将sama5d3上的bootloader替换为正在运行的linux系统

问题描述 投票:1回答:1

我想在运行4.1.0-linux4sam_5.1buildroot-2016.02的基于sama5d36的系统上替换nand flash中的第一阶段bootloader。

我可以用flashcp替换内核映像就好了,但是当我尝试使用bootloader时,flashcp运行没有错误,但系统之后没有启动,停留在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

然后我可以使用sam-ba编写相同的bootloader映像,它将启动,因此图像很好。如果没有用户干预,它如何在Linux中闪存?

embedded-linux bootloader atmel flash-memory
1个回答
1
投票

在闪存开始时,实际引导代码之前应该有一个208字节的标头。

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

在初始化和复位命令之后,引导程序在没有ECC检查的情况下读取第一页,以确定是否存在NAND参数头。标头由相同的32位字(由于冗余原因)的52倍组成,其必须包含用于正确执行NAND中其余数据读取的NAND和PMECC参数。

当我转储引导扇区的内容时,标题当然就在那里

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将其视为普通数据,因此我应该提供它。

© www.soinside.com 2019 - 2024. All rights reserved.