内核与dtb绑定一般有三种做法
对于附加dtb到内核上去,可以用cat *.dtb >> zImage,生成的zImage可以直接用bootz启动
类似的,uImage+dtb则不行,要先生成附加了dtb的zImage->make uImage->uImage才可用
#uImage+dtb可搜FIT-uImage
cat arch/arm/boot/dts/socfpga_arria5_socdk.dtb >> arch/arm/boot/zImage
make uImage
cp -v arch/arm/boot/uImage ~/ftp/
————————————————
版权声明:本文为CSDN博主「flfihpv259」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/flfihpv259/article/details/102685703
将dtb放到kernel一起
uimage不能直接在后面+dtb
必须编译成zimage ,zimage后面+dtb后再编译成是uimage
kernel编译脚本修改,
\arch\arm\boot\Makefile
编译zimage的时候加上dtb
DTB_OBJS ?= $(dtb-y)
DTB_OBJS_FULL := $(addprefix
(
o
b
j
)
/
d
t
s
/
,
(obj)/dts/,
(obj)/dts/,(DTB_OBJS))
把原来的uimage 依赖zimage修改为依赖zimage-dtb
$(obj)/uImage:
(
o
b
j
)
/
z
I
m
a
g
e
F
O
R
C
E
@
(obj)/zImage FORCE @
(obj)/zImageFORCE@(check_for_multiple_loadaddr)
$(call if_changed,uimage)
---------------------》
$(obj)/zImage-dtb: $(obj)/zImage $(DTB_OBJS_FULL) FORCE
@cat $(obj)/zImage $(DTB_OBJS_FULL) >
@
@
@ @
@@(kecho) ’ Kernel: $@ is ready’
$(obj)/uImage:
(
o
b
j
)
/
z
I
m
a
g
e
−
d
t
b
F
O
R
C
E
@
(obj)/zImage-dtb FORCE @
(obj)/zImage−dtbFORCE@(check_for_multiple_loadaddr)
$(call if_changed,uimage)
那么这样编译出来的uimage在arm/boot目录下就可以直接拿去uboot哪bootm xxx地址就能直接运行,之前需要bootm XX(kernel addr) - XX(dtb addr)
dtb的反编译
有时候我们需要将dtb.bin反编译查看那么就可以这样用
dtc -i dtb -O dts nvtxxx.bin -o nvt.dts