обновление ядра через / dev / mtd - PullRequest
3 голосов
/ 02 ноября 2011

Я работаю на встроенном устройстве, где образ ядра хранится в / dev / mtd4 части флэш-памяти.Я бы хотел обновить это ядро ​​без Uboot.

Как это возможно?Я пытался позвонить:

echo ./kernel.bin > /dev/mtdblock4 

, но это не работает.Сохраненные данные не распознаются как ядро ​​при следующей загрузке.

Ответы [ 5 ]

8 голосов
/ 02 ноября 2011

Вы должны использовать инструмент mtdutils flashcp:

flashcp -v ./kernel.bin /dev/mtd4

flashcp позаботится о стирании, записи и проверке того, что кошка не будет делать.Обратите внимание, что это работает с драйвером символа, а не с драйвером блока.-v для многословной операции

5 голосов
/ 02 ноября 2011

Должно быть, по крайней мере, cat kernel.bin > /dev/mtdblock4, но это, вероятно, тоже не сработает.

И это зависит от того, как на самом деле загружается ваше ядро ​​(что такое загрузчик).

4 голосов
/ 02 ноября 2011

Я никогда не использовал flashcp. Где я могу получить это? Я использую flash_erase или flash_eraseall, а затем nandwrite. Если у вас нет этих утилит, вы можете получить источник здесь и собрать их для своей цели.

Для обновления моей системы я использую:

# /usr/bin/flash_erase /dev/mtd3
# /usr/bin/nandwrite -m -p /dev/mtd3 /uImage

Это вспышка NAND? Если это так, я не думаю, что эхо или кошка будут правильно пропускать плохие блоки для вас.

0 голосов
/ 01 февраля 2018

У меня также есть устройство, на котором я обновляю образ ядра и использую uBoot. Мой рабочий процесс:

  • Я передаю новый файл образа в каталог устройств tmp
  • Стираю каталог flash mtd:

    flash_eraseall / dev / mtd3

  • затем я копирую из tmp в каталог flash (/ tmp / -> / dev / mtd3)

    flashcp / tmp / uImage / dev / mtd3

Надеюсь, это поможет, С уважением

0 голосов
/ 09 января 2012

Чтобы обновить различные блоки mtd, я использую следующую процедуру:

# flash_eraseall /dev/mtd3
# dd if="kernel.bin" of=/dev/mtd3 bs=16k conv=sync
...