- 为什么x86编译出来的镜像时bzImage,而arm编译出来是zImage
bzImage:叫“Big zImage”,通过 bootsect + setup + compressed kernel 分段加载到高内存(high memory),通过之前对x86启动流程分析,启动前确实还需要做很多boot相关的工作。
zImage:启动模式简单,没有x86前面的部分,所以只有zImage。
2. 为什么x86下不需要指定dts,而arm下需要指定dts?(在qemu模拟器下,但是在arm开发板下也确实需要单独编译一个dts文件)
x86:大部分 x86 硬件可以自动发现,原因是:有标准总线(PCI, ISA, ACPI),BIOS/UEFI 会把硬件信息写到 ACPI 表或 MP 表,Linux x86 内核启动时,可以通过 扫描 PCI/ACPI 总线 得到 CPU、内存、串口、网卡等设备信息,因此,不需要单独指定 DTS 文件
ARM:ARM 平台非常多样化:嵌入式板子、SoC、开发板各种型号,没有统一的总线或标准的硬件发现机制,内核本身无法扫描硬件,因此需要 设备树(Device Tree, DTS) 来告诉内核:CPU 核心数量和类型、内存布局、外设寄存器地址、UART/串口设备地址、中断控制器、定时器等、没有 DTS,ARM 内核不知道怎么初始化硬件,就无法启动。
- 为什么arm下日志不打印秒数?
一句话,arm下时钟还没初始化,而x86启动前已经初始化了,所以arm不显示,x86会显示
4. 突然明白了驱动编程的一些本质
**本质上就是对各种需要用到的硬件的配置配置配置!!!**比如偏底层的讲,配置I2C驱动:要配置需要的时钟,配置SOC内部的I2C控制器以实现I2C协议的一些相关的配置,然后配置外部I2C设备,比如一个传感器的一些配置。其实可以看作是并行关系,但为了更好的理解,看作分层关系,越底层了就是越下层。