内核可以单编一个dts。比如:
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make mediatek/mt7986a-bananapi-bpi-r3.dtb
编译的是arch/arm64/boot/dts/目录下面的mediatek/mt7986a-bananapi-bpi-r3.dtb
它是如何编译的呢,我们使用procmon来监视进程事件:
fork parent 295240 -> child 295516 (make --no-print-directory -C /home/yuanjp/Xrouter/staging/mt7981/linux-6.6.31 -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/Makefile mediatek/mt7986a-bananapi-bpi-r3.dtb)
exec pid 295516 (make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=arch/arm64/boot/dts arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb)
fork parent 295516 -> child 295517 (make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=arch/arm64/boot/dts arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb)
exec pid 295517 (make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=arch/arm64/boot/dts/mediatek need-builtin= need-modorder= arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb)
fork parent 295517 -> child 295518 (make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=arch/arm64/boot/dts/mediatek need-builtin= need-modorder= arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb)
exec pid 295518 (mkdir -p arch/arm64/boot/dts/mediatek)
exit pid 295518 (status 0 signal 17)
fork parent 295517 -> child 295519 (make -f /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/Makefile.build obj=arch/arm64/boot/dts/mediatek need-builtin= need-modorder= arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb)
exec pid 295519 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
fork parent 295519 -> child 295520 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
exec pid 295520 (gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts)
fork parent 295520 -> child 295521 (gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts)
exec pid 295521 (/usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -E -lang-asm -quiet -nostdinc -I /home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -D __DTS__ -MMD arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp -mtune=generic -march=x86-64 -undef -fno-directives-only -dumpdir arch/arm64/boot/dts/mediatek/ -dumpbase .mt7986a-bananapi-bpi-r3.dtb.dts.dts -dumpbase-ext .dts)
exit pid 295521 (status 0 signal 17)
exit pid 295520 (status 0 signal 17)
fork parent 295519 -> child 295522 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
exec pid 295522 (./scripts/dtc/dtc -o arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb -b 0 -i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/ -i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -Wno-interrupt_provider -Wno-unique_unit_address -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -d arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.dtc.tmp arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp)
exit pid 295522 (status 0 signal 17)
fork parent 295519 -> child 295523 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
exec pid 295523 (cat arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.dtc.tmp)
exit pid 295523 (status 0 signal 17)
fork parent 295519 -> child 295524 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
exec pid 295524 (scripts/basic/fixdep arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./scripts/dtc/dtc -o arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb -b 0 -i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/ -i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -Wno-interrupt_provider -Wno-unique_unit_address -Wno-unit_address_vs_reg -Wno-avoid_unnecessary_addr_size -Wno-alias_paths -Wno-graph_child_address -Wno-simple_bus_reg -d arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.dtc.tmp arch/arm6)
exit pid 295524 (status 0 signal 17)
fork parent 295519 -> child 295525 (/bin/sh -c set -e; echo ' DTC arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb'; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - HUP; kill -s HUP $$' HUP; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - INT; kill -s INT $$' INT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - QUIT; kill -s QUIT $$' QUIT; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - TERM; kill -s TERM $$' TERM; trap 'rm -f arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb; trap - PIPE; kill -s PIPE $$' PIPE; gcc -E -Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp -nostdinc -I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes -undef -D__DTS__ -x assembler-with-cpp -o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp /home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts ; ./script)
exec pid 295525 (rm -f arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d)
分成两个步骤:
gcc
-E
-Wp,-MMD,arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.pre.tmp
-nostdinc
-I/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes
-undef -D__DTS__
-x assembler-with-cpp
-o arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp
/home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dts
可以看到,它没有用交叉编译链,而直接使用主机的gcc。预编译的目的是处理include和宏替换。
./scripts/dtc/dtc
-o arch/arm64/boot/dts/mediatek/mt7986a-bananapi-bpi-r3.dtb
-b 0
-i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/arch/arm64/boot/dts/mediatek/
-i/home/yuanjp/Xrouter/staging/source/linux-6.6.31/scripts/dtc/include-prefixes
-Wno-interrupt_provider
-Wno-unique_unit_address
-Wno-unit_address_vs_reg
-Wno-avoid_unnecessary_addr_size
-Wno-alias_paths
-Wno-graph_child_address
-Wno-simple_bus_reg
-d arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.d.dtc.tmp
arch/arm64/boot/dts/mediatek/.mt7986a-bananapi-bpi-r3.dtb.dts.tmp
-b 0 是从cpu 0启动
-d 是生成依赖文件