我想在运行4.1.0-linux4sam_5.1
和buildroot-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中刷新它?
答案 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
将其视为普通数据,因此我应该提供它。