我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
但是它不起作用。存储的数据在下一次启动时未被识别为内核。
我正在处理嵌入式设备,其中内核映像存储在闪存的/dev/mtd4分区中。我想更新这个内核而不使用Uboot。
如何实现呢? 我尝试调用:
echo ./kernel.bin > /dev/mtdblock4
但是它不起作用。存储的数据在下一次启动时未被识别为内核。
你应该使用 mtdutils 工具的 flashcp :
flashcp -v ./kernel.bin /dev/mtd4
flashcp将负责擦除、写入和验证,而cat则不会。请注意它与字符驱动程序一起使用,而不是块驱动程序。-v用于详细操作。
flashcp
在烧录时损坏了我的rootfs,而flash_eraseall
+nandwrite -p
则正常工作。也许我们应该关注一下工具描述中的“将数据复制到NOR闪存”这一点? - Daniel Alder# /usr/bin/flash_erase /dev/mtd3
# /usr/bin/nandwrite -m -p /dev/mtd3 /uImage
这是NAND闪存吗?如果是的话,我认为echo或cat命令不能正确地跳过坏块。
至少应该使用cat kernel.bin > /dev/mtdblock4
,但这可能也不起作用。
这取决于你的内核实际上是如何加载的(引导程序是什么)。
为了更新不同的mtd块,我使用以下例程:
# flash_eraseall /dev/mtd3 # dd if="kernel.bin" of=/dev/mtd3 bs=16k conv=sync
我也有一个设备,我更新内核映像并使用uBoot。
我的工作流程是:
我擦除闪存mtd目录:
flash_eraseall /dev/mtd3
然后我从tmp复制到flash目录(/tmp/ --> /dev/mtd3)
flashcp /tmp/uImage /dev/mtd3
希望这可以帮助到您, 敬礼
cat
而不是echo
,例如cat ./kernel.bin > /dev/mtdblock4
。 - Paul R