通过/ dev/mtd更新内核

Bar*_*iak 3 linux embedded kernel

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

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

echo ./kernel.bin > /dev/mtdblock4 
Run Code Online (Sandbox Code Playgroud)

但它不起作用.下次引导时,存储的数据不会被识别为内核.

sho*_*nex 8

你应该使用mtdutils工具flashcp:

flashcp -v ./kernel.bin /dev/mtd4
Run Code Online (Sandbox Code Playgroud)

flashcp将负责擦除,编写和验证哪些猫不会做.请注意,它适用于char驱动程序而不是块驱动程序.-v用于详细操作


Bas*_*tch 5

它应该至少是,cat kernel.bin > /dev/mtdblock4但这可能不会起作用.

这取决于你的内核实际加载的方式(引导加载程序是什么).

  • 我不得不 -1 这个,对于基于 NAND 的设备(大多数),你必须在写入之前擦除闪存;简单地写入它不会产生正确的结果。这里的其他答案描述了正确的方法。 (2认同)