安卓内核kernel之设备树

以高通msm8916平台为例


安卓内核即linux启动的时候是如何加载设备树的呢

又如何根据设备树加载硬件信息,然后将平台相关的代码如何加载进内核中去的呢


首先要了解设备树信息是如何存储的,存储的内容是什么,内核如何去找这个信息


在kernel/arch/arm64/boot/dts/qcom/目录下有很多dts dtsi文件


哪一个是msm8916平台所需要的呢,最后如何编译,编译结果放在哪儿了,最后内核从哪儿去找?


在kernel/arch/arm64/boot/dts/qcom/目录下有个makefile


dtb-$(CONFIG_ARCH_MSM8916) += XXXX.dtb \

                                                                    XXXXX.dtb \

                                                                  .....


可以看见 根据CONFIG_ARCH_MSM8916这个宏,可以找到所需要的dtb文件


根据dts文件的格式


根节点是   /

然后根据根节点遍历所有节点

就能把设备信息给抓出来了


最后编译的时候是将dts文件编译成dtb

最后放在boot.img里


然后bootloader在引导kernel的时候会传入参数

这个参数就是dtb的物理地址,内核就通过这个地址去寻找dts


具体参考set_machion_fdt()函数


dts文件主要参数是

名称

内容

比如

memory

0x00000000 0x80000000

即memory设备 起始地址0 长度2G


然后内核就根据这些信息 建立内存映射表 等等


同样的,几乎所有设备信息 比如中断 i2c 都可以通过设备树进行描述











你可能感兴趣的:(安卓内核kernel之设备树)