news 2026/8/5 23:24:15

(1)uboot编译记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(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-rk3506,uboot做为微型操作系统也有自己的设备树,设备树里只配置了最核心需要用到的功能。

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.bin
output directory is ./unpack_test
extracting entry=471,file=UsbHead.bin
extracting entry=471,file=rk3506b_ddr_750MHz_.bin
extracting entry=472,file=rk3506_usbplug_v1.bin
extracting entry=loader,file=FlashHead.bin
extracting entry=loader,file=FlashData.bin
extracting entry=loader,file=FlashBoot.bin
Info:Unpack loader ok.
ls ./unpack_test/
FlashBoot.bin FlashHead.bin rk3506_usbplug_v1.bin
FlashData.bin rk3506b_ddr_750MHz_.bin UsbHead.bin

rk3506_spl_loader_v1.06.111.bin里面包含了上面的6个文件
其中:

  • rk3506_usbplug_v1.bin和UsbHead.bin,顾名思义是用来处理usb的,接收我们用瑞芯微开发者工具usb通信发来文件的,只在ddr内存中运行。
  • FlashHead.bin:(IDB 头 / 芯片通行证)内容:包含固定的 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.bin(DDR驱动)拼接上去。

拼接搬运工:再在 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,可以看到明确指出FlashData=bin/rk35/rk3506b_ddr_750MHz_v1.06.bin
FlashBoot=bin/rk35/rk3506_spl_v1.11.bin:

[CHIP_NAME] NAME=RK350F [VERSION] MAJOR=1 MINOR=1 [CODE471_OPTION] NUM=1 Path1=bin/rk35/rk3506b_ddr_750MHz_v1.06.bin [CODE472_OPTION] NUM=1 Path1=bin/rk35/rk3506_usbplug_v1.02.bin [LOADER_OPTION] NUM=2 LOADER1=FlashData LOADER2=FlashBoot FlashData=bin/rk35/rk3506b_ddr_750MHz_v1.06.bin FlashBoot=bin/rk35/rk3506_spl_v1.11.bin [LOADER2_PARAM] LOAD_ADDR=0x3f00000 FLAG=0x0 [OUTPUT] PATH=rk3506_spl_loader_v1.06.111.bin IDB_PATH=rk3506_idblock_v1.06.111.img [SYSTEM] NEWIDB=true [FLAG] 471_RC4_OFF=true RC4_OFF=true CREATE_IDB=true
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 23:16:33

网络安全日报制作指南:从海量威胁情报中提炼核心价值

1. 项目概述:一份日报的诞生与价值又到了枇杷成熟的季节,对于我这个在网络安全行业摸爬滚打了十几年的老家伙来说,每天清晨打开邮箱,浏览来自全球各个安全研究团队、厂商和社区的第一手威胁情报,就像在自家院子里摘下一…

作者头像 李华
网站建设 2026/8/5 23:16:30

教育行业数据中台实战:用QClaw打通全链路,驱动精细化运营增长

1. 项目概述:当教育遇上“玩虾”,一场数据驱动的运营革命 最近和几个做教育行业的朋友聊天,大家普遍都在感慨:市场越来越难做了。传统的电话销售、地推、渠道合作,成本高企,转化率却像坐滑梯一样往下掉。获…

作者头像 李华
网站建设 2026/8/5 23:15:30

Kubernetes调度系统原理与生产实践指南

1. Kubernetes调度系统深度解析在容器编排领域,Kubernetes的调度系统堪称集群资源分配的"大脑"。我曾在生产环境中处理过这样一个案例:某电商平台在大促期间,由于未合理配置调度策略,导致关键支付服务被分配到边缘节点&…

作者头像 李华
网站建设 2026/8/5 23:11:25

范式起源项目解析:大规模数据解密与知识图谱构建实践

最近在技术社区里,一个名为“范式:起源”的项目引起了不小的讨论。它的标题里混杂着“兔子洞”、“MASSIVE”、“ALL DECRYPTED”这些充满神秘感的词汇,乍一看像是什么游戏彩蛋或网络谜题。但如果你点进去,会发现它远不止于此——…

作者头像 李华
网站建设 2026/8/5 23:06:03

冒泡、选择、插入排序:时间复杂度、稳定性与实战场景全解析

1. 排序算法入门:为什么从这三个开始?如果你刚开始接触数据结构与算法,或者准备面试,那么“冒泡排序”、“选择排序”和“插入排序”这三个名字你一定绕不开。它们常常被并称为“初级排序算法”或“简单排序算法”。很多朋友可能会…

作者头像 李华
网站建设 2026/8/5 23:05:04

Tomcat假死问题深度排查:从线程死锁到内存泄漏的实战指南

1. 问题现象与初步感知:什么是Tomcat“假死”?在线上服务运维中,Tomcat的“假死”状态绝对是一个让人血压飙升的经典问题。它不像服务彻底崩溃那样干脆利落,会留下明确的错误日志和进程退出的信号。恰恰相反,从外部监控…

作者头像 李华