如何将dtb传递给内核
系统只要通过网络命令或者在flash上将设备树文件读到内存,在启动内核时,将设备树的地址写到R2寄存器即可,有设备树时bootm的命令形式为“bootm <uImage_addr> <initrd_addr> <dtb_addr> ”, 对于ARM程序调用规则(ATPCS)而言,调用函数的形参传递通r0,r1,r2传递,所以我们要将r2传递给内核只需要定义一个函数指针the_kernel指向内核的启动地址,然后执行 the_kernel(0,machine_id, 0x32000000)启动内核就将设备树的地址传递给内核了,0x32000000是设备树的地址,然而对于设备树地址是不可以随便选的,设备树地址不要破坏u_boot,内核本身和要到的空间
dtb的修改原理
如果我们想要去修改dtb文件有两种方法,第一种就是在电脑上重新修改dts然后编译后重新烧写到内存中,第二种我们可以使用u-boot提供的一些命令(fdt)来修改dtb文件,修改后保存在板子上以后启动时就可以使用这个被修改过后的新dtb文件.,至于dtb文件的格式可以参考我之前写过的文章(https://blog.csdn.net/qq_41936794/article/details/105881245),修改dtb文件的步骤有如下:
例子1. 修改属性的值
例子2. 添加一个全新的属性