|
本人研究了一下openwrt 19.07.1的mt7621路由器的固件打包过程
openwrt image builder里面已经编译好了一个通用的vmlinux内核 还有很多机型对应的dtb文件
#合并dtb与通用内核,形成各机型专用内核
patch-dtb vmlinux MT7621.dtb
cp vmlinux kernel
实际对比发现 这里的patch-dtb工具做的事情用如下命令应该也可以,未经证实
cat vmlinux MT7621.dtb > kernel
#压缩vmlinux镜像
lzma e kernel -lc1 -lp2 -pb2 kernel.lzma
#添加64字节uboot引导头
mkimage -A mips -O linux -T kernel -C lzma -a 0x80001000 -e 0x80001000 -n 'MIPS OpenWrt Linux-4.3.4' -d kernel.lzma ukernel.bin
#填充到2MB
dd if=ukernel.bin of=ukernel_2M.bin bs=2048k conv=sync
#制作根文件系统
mksquashfs4 -nopad -noappend -root-owned -comp xz -Xpreset 9 -Xe -Xlc 0 -Xlp 2 -Xpb 2 -b 256k -processors 1 -fixed-time 1454366308 root root.squashfs
#-p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1'
#制作ubi镜像
ubinize -E 5 -p 128KiB -m 2048 -o ok.bin ubi.cfg
ubi.cfg的内容如下
[rootfs]
mode=ubi
vol_id=0
vol_type=dynamic
vol_name=rootfs
image=/opt/root.squashfs
[rootfs_data]
mode=ubi
vol_id=1
vol_type=dynamic
vol_name=rootfs_data
vol_size=1MiB
vol_flags=autoresize
#最后是合并内核与ubi镜像,得到最终刷机固件
cat ukernel_2M.bin ok.bin > firmware.bin
这是mt7621 采用nand芯片的固件生成流程 代表路由器 hc5962 小米R3P 小米R3G
如果是spi的话 那么开头内核部分生成应该是一样的,后面的制作ubi镜像应该是制作jffs2镜像
实际测试发现命令patch-dtb无法成功执行,提示是DTB maker not find ,这个没办法解决
但是 我对比了image builder提供的通用vmlinux与最终从成品固件提取的kernel后发现两个文件的区别在于
kernel是vmlinux后面追加了一个dtb文件 两者文件大小刚好相差一个 dtb文件
所以 我在想 如果我想修改dtb文件来适配某些硬改内存 或者是 spi 与nand分区的话 是不是可以这样做?
dtc xxx.dtb -I dtb -O dts -o a.dts
然后用记事本修改a.dts
#回编译dts为dtb
dtc adts -I dts -O dtb -o a.dtb
然后用cat 命令合并vmliux与新的dtb 再用lmza压缩 然后mkimage添加启动头 再把改动后的kernel替换到image builder里面的对应机型的kernel
后面的事情 可以交个imagebuilder做 或者自己用命令也行
未经证实 虽然我用16进制工具比较 patch-dtb相当于合并了两个文件
但是如果真的是 合并 openwrt官方没必要写一个patch-dtb吧???
求高手解答?????
之所以这样是因为我的机器是hc5961 配置和hc5962相比 多了sata接口 内存512M nand是256M 不改dtb的话 虽说能用 但是内存只能认256M nand也不能合理的利用起来
至于重新修改 从源码编译 我觉得没必要 毕竟 除了内存与 nand问题没别的问题
修改dtb应该能完美解决问题
|
|