rk 平台启动时,调试串口总是会打印 ddr 调试信息,这是从 u-boot DDR 初始化程序输出的, 这部分程序只有二进制文件, 没源码.
问度娘谷哥找不到官方的方法去除调试信息, 用了点旁门左道 -- 反汇编! : )
以 RK3288 为例, DDR 初始化程序为 32_LPDDR2_400MHz_LPDDR3_400MHz_DDR3_400MHz_20160803.bin
这个文件存放于 u-boot 代码目录下
tools/rk_tools/bin/rk32/
32_LPDDR2_400MHz_LPDDR3_400MHz_DDR3_400MHz_20160803.bin
以下 DDR.bin 指的是这个文件。
记下这个地址 0xe80
2. 反汇编 DDR.bin, 强制为 thumb 指令
arm-linux-gnueabihf-objdump -b binary -marm -Mforce-thumb -D ./tools/rk_tools/bin/rk32/
32_LPDDR2_400MHz_LPDDR3_400MHz_DDR3_400MHz_20160803.bin
> ddr.S
3. 在 ddr.S 里搜索第一步的地址 0xe80
有两个地方加载这个地址的内容(即 UART_DBG 寄存器地址):
分析 0xdae 部分的代码是字节发送部分(向 UART_THR 写入字节, 并待 UART_LSR 寄存器变化), 记下该地址.
4. 复制 DDR.bin 至新文件, 如 RK3288_DDR_Release.bin , 将第 3 步记录的地址内容修改为 0x4770 (对应的 thumb 指令为 "bx lr")
5. 修改 u-boot/tools/rk_tools/RKBOOT/RK3288.ini , 将 DDR 配置文件修改为第 4 步生成的 bin 文件.
6. u-boot 目录下 make 生成引导, 烧写验证
RK3288 平台已改过的 DDR.bin:
https://download.csdn.net/download/mxm12/10444790