多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

(1)uboot编译记录

(1)uboot编译记录 进入u-boot目录先清除之前编译出的内容保证目录纯净make distclean然后编译./make.sh CROSS_COMPILE/home/teng/my3506sdk/rk3506/prebuilts/gcc/linux-x86/arm/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf- alientek_rk3506 --spl-new根据传入的参数alientek_rk3506会去找u-boot/configs路径下的alientek_rk3506_defconfig这个文件。对比了正点原子的alientek_rk3506_defconfig这个文件和同路径下瑞芯微自身提供的rk3506_defconfig进行文本差异对比发现本质上就两处差异1.uboot用到的设备树换成了alientek-rk3506uboot做为微型操作系统也有自己的设备树设备树里只配置了最核心需要用到的功能。2.注释掉了AB分区功能右侧瑞芯微自带的是打开的继续跟踪第1点差异进到u-boot/arch/arm/dts/路径下对比正点原子写的设备树alientek-rk3506.dts和瑞芯微官方写的设备树rk3506-evb.dts的差异发现就改了个名说明设备树根本没啥差异正点原子给的sdk在uboot里面就只关闭了AB分区功能。然后就在u-boot目录里面生成了一个rk3506_spl_loader_v1.06.111.bin文件和uboot.img这就是最终的结果rk3506_spl_loader_v1.06.111.bin分析使用./rkbin/tools/boot_merger unpack -i ./u-boot/rk3506_spl_loader_v1.06.111.bin -o ./unpack_test指令解包log:********boot_merger ver 1.35********input loader is ./u-boot/rk3506_spl_loader_v1.06.111.binoutput directory is ./unpack_testextracting entry471,fileUsbHead.binextracting entry471,filerk3506b_ddr_750MHz_.binextracting entry472,filerk3506_usbplug_v1.binextracting entryloader,fileFlashHead.binextracting entryloader,fileFlashData.binextracting entryloader,fileFlashBoot.binInfo:Unpack loader ok.ls ./unpack_test/FlashBoot.bin FlashHead.bin rk3506_usbplug_v1.binFlashData.bin rk3506b_ddr_750MHz_.bin UsbHead.binrk3506_spl_loader_v1.06.111.bin里面包含了上面的6个文件其中rk3506_usbplug_v1.bin和UsbHead.bin顾名思义是用来处理usb的接收我们用瑞芯微开发者工具usb通信发来文件的只在ddr内存中运行。FlashHead.binIDB 头 / 芯片通行证内容包含固定的 RKNS或 RCVN魔术字。rk3506b_ddr_750MHz_.bin和FlashData.bin不同名但是同一个文件内容负责在 BootROM 阶段接管 CPU初始化开发板外部 DDR3/DDR4/LPDDR 内存颗粒的机器码。也就是用来点亮内存ddr的由瑞芯微提供的不开源的。FlashBoot.bin也就是二级引导spl负责加载uboot的现在来分析使用瑞芯微开发工具烧录这个rk3506_spl_loader_v1.06.111.bin会是什么样的场景地址0x00000000文件rk3506_spl_loader_v1.06.111.bin执行瑞芯微开发工具会把rk3506_spl_loader_v1.06.111.bin拆成上述的6个文件其中rk3506_usbplug_v1.bin、UsbHead.bin、rk3506b_ddr_750MHz_.bin会加载到ddr中运行也就是初始化了usb可以用usb接收后续的文件。FlashHead.bin、FlashData.bin、FlashBoot.bin这三个文件会有下面的操作制作 4 个防伪头工具把 FlashHead.bin 复制 4 份排成一排。拼接核心驱动紧接着在这 4 个头的屁股后面把 FlashData.binDDR驱动拼接上去。拼接搬运工再在 FlashData.bin 的屁股后面把 FlashBoot.bin拼接上去。填充对齐最后用 0x00 或 0xFF 把整个尾部补齐到扇区对齐。然后把按照上面规则缝合好的二进制大块写入到eMMC的0x40 扇区rk3506_idblock_v1.06.111.img分析就是上面FlashHead.bin、FlashData.bin、FlashBoot.bin这三个按照上面提到的规则打包出来的文件uboot.img这个就是需要烧录进去的uboot镜像其他分析编译过程用到的配置文件/rkbin/RKBOOT/RK3506BMINIALL.ini可以看到明确指出FlashDatabin/rk35/rk3506b_ddr_750MHz_v1.06.binFlashBootbin/rk35/rk3506_spl_v1.11.bin[CHIP_NAME] NAMERK350F [VERSION] MAJOR1 MINOR1 [CODE471_OPTION] NUM1 Path1bin/rk35/rk3506b_ddr_750MHz_v1.06.bin [CODE472_OPTION] NUM1 Path1bin/rk35/rk3506_usbplug_v1.02.bin [LOADER_OPTION] NUM2 LOADER1FlashData LOADER2FlashBoot FlashDatabin/rk35/rk3506b_ddr_750MHz_v1.06.bin FlashBootbin/rk35/rk3506_spl_v1.11.bin [LOADER2_PARAM] LOAD_ADDR0x3f00000 FLAG0x0 [OUTPUT] PATHrk3506_spl_loader_v1.06.111.bin IDB_PATHrk3506_idblock_v1.06.111.img [SYSTEM] NEWIDBtrue [FLAG] 471_RC4_OFFtrue RC4_OFFtrue CREATE_IDBtrue
返回列表