通过/ dev / mtd更新内核

时间:2011-11-02 08:35:08

标签: linux embedded kernel

我正在研究嵌入式设备,其中内核映像存储在flash的/ dev / mtd4部分中。 我想在没有Uboot的情况下更新这个内核。

怎么可能? 我试着打电话:

echo ./kernel.bin > /dev/mtdblock4 

但它不起作用。下次启动时,存储的数据不会被识别为内核。

5 个答案:

答案 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。 我的工作流程是:

  • 我将新的imagefile传输到设备tmp目录
  • 我删除了flash mtd目录:

    flash_eraseall / dev / mtd3

  • 然后我从tmp复制到flash目录(/ tmp / - > / dev / mtd3)

    flashcp / tmp / uImage / dev / mtd3

我希望这有帮助, 问候