从正在运行的linux系统上替换sama5d3上的引导程序

时间:2019-02-21 09:59:03

标签: embedded-linux bootloader atmel flash-memory

我想在运行4.1.0-linux4sam_5.1buildroot-2016.02的基于sama5d36的系统上替换nand闪存中的第一阶段引导程序。

我可以用flashcp替换内核映像,但是当我使用引导加载程序尝试运行时,flashcp可以正常运行,但是系统随后无法启动,停留在{{ 1}}提示。

ROMBOOT

然后,我可以使用buildroot:~# flashcp -v at91bootstrap.bin /dev/mtd0 Erasing block: 1/1 (100%) Writing kb: 14/14 (100%) Verifying kb: 14/14 (100%) buildroot:~# reboot [...] Sent SIGKILL to all processes Requesting system reboot �RomBOOTRestarting system 编写相同的引导程序映像,它将引导,因此该映像很好。在没有用户干预的情况下如何在Linux中刷新它?

1 个答案:

答案 0 :(得分:1)

在闪存的开头,实际启动代码之前应该有一个208字节的标头。

摘自SAMA5D3数据表(在发布问题之前我应该​​已经阅读过)

  

在初始化和重置命令之后,引导程序将读取第一页而不进行ECC检查,以确定是否存在NAND参数标头。标头由52个相同的32位字组成(出于冗余原因),该字必须包含NAND和   PMECC参数可用于正确执行NAND中其余数据的读取。

当我转储引导扇区的内容时,头文件就在那里

buildroot:~# hd < /dev/mtd0 | head -4
00000000  05 24 90 c0 05 24 90 c0  05 24 90 c0 05 24 90 c0  |.$...$...$...$..|
*
000000d0  0e 00 00 ea 05 00 00 ea  05 00 00 ea 05 00 00 ea  |................|
000000e0  05 00 00 ea cc 3b 00 00  06 00 00 ea 06 00 00 ea  |.....;..........|

头四个字节不断重复,ARM跳转表从偏移量0xD0(= 208 = 52 * 4)开始

sam-ba在写引导扇区时会处理此头文件,但是Linux mtd驱动程序和flashcp将其视为普通数据,因此我应该提供它。