我正在研究嵌入式设备,其中内核映像存储在flash的/ dev / mtd4部分中。 我想在没有Uboot的情况下更新这个内核。
怎么可能? 我试着打电话:
echo ./kernel.bin > /dev/mtdblock4
但它不起作用。下次启动时,存储的数据不会被识别为内核。
答案 0 :(得分:8)
您应该使用mtdutils工具flashcp:
flashcp -v ./kernel.bin /dev/mtd4
flashcp将负责擦除,编写和验证哪些猫不会这样做。 请注意,它适用于char驱动程序而不是块驱动程序。 -v用于详细操作
答案 1 :(得分:5)
至少应该是cat kernel.bin > /dev/mtdblock4
,但这可能也不会有用。
这取决于你的内核是如何实际加载的(引导加载程序是什么)。
答案 2 :(得分:4)
我从未使用过flashcp。我在哪里可以得到它?我使用flash_erase或flash_eraseall然后nandwrite。如果您没有这些实用程序,则可以获取源here并为目标构建它们。
要更新我的系统,我使用:
# /usr/bin/flash_erase /dev/mtd3
# /usr/bin/nandwrite -m -p /dev/mtd3 /uImage
这是NAND闪存吗?如果是这样,我认为echo或cat不会为你正确地跳过坏块。
答案 3 :(得分:0)
要更新不同的mtd块,我使用以下例程:
# flash_eraseall /dev/mtd3 # dd if="kernel.bin" of=/dev/mtd3 bs=16k conv=sync
答案 4 :(得分:0)
我还有一个设备,我更新内核映像并使用uBoot。 我的工作流程是:
我删除了flash mtd目录:
flash_eraseall / dev / mtd3
然后我从tmp复制到flash目录(/ tmp / - > / dev / mtd3)
flashcp / tmp / uImage / dev / mtd3
我希望这有帮助, 问候