- Mastering Embedded Linux Programming
- Chris Simmonds
- 341字
- 2021-07-30 09:45:01
Moving from bootloader to kernel
When the bootloader passes control to the kernel it has to pass some basic information to the kernel, which may include some of the following:
- On PowerPC and ARM architectures: a number unique to the type of the SoC
- Basic details of the hardware detected so far, including at least the size and location of the physical RAM, and the CPU clock speed
- The kernel command line
- Optionally, the location and size of a device tree binary
- Optionally, the location and size of an initial RAM disk
The kernel command line is a plain ASCII string which controls the behavior of Linux, setting, for example, the device that contains the root filesystem. I will look at the details of this in the next chapter. It is common to provide the root filesystem as a RAM disk, in which case it is the responsibility of the bootloader to load the RAM disk image into memory. I will cover the way you create initial RAM disks in Chapter 5, Building a Root Filesystem.
The way this information is passed is dependent on the architecture and has changed in recent years. For instance, with PowerPC, the bootloader simply used to pass a pointer to a board information structure, whereas, with ARM, it passed a pointer to a list of "A tags". There is a good description of the format of the kernel source in Documentation/arm/Booting
.
In both cases, the amount of information passed was very limited, leaving the bulk of it to be discovered at runtime or hard-coded into the kernel as "platform data". The widespread use of platform data meant that each device had to have a kernel configured and modified for that platform. A better way was needed, and that way is the device tree. In the ARM world, the move away from A tags began in earnest in February 2013 with the release of Linux 3.8 but there are still quite a lot of devices in the field, and even in development, still using A tags.
- HTML5 移動Web開發從入門到精通(微課精編版)
- RTC程序設計:實時音視頻權威指南
- Object-Oriented JavaScript(Second Edition)
- CKA/CKAD應試教程:從Docker到Kubernetes完全攻略
- 快速念咒:MySQL入門指南與進階實戰
- Learning Unreal Engine Android Game Development
- C專家編程
- Learning VMware vSphere
- DB2SQL性能調優秘笈
- C++17 By Example
- Wearable:Tech Projects with the Raspberry Pi Zero
- Beginning PHP
- SaaS攻略:入門、實戰與進階
- Hands-On ROS for Robotics Programming
- Web前端開發精品課:HTML5 Canvas開發詳解