Копирование файлов из emmc через uboot на tftp-сервер

#u-boot #tftp

#u-загрузка #tftp

Вопрос:

у меня проблема в том, что устройство не загружается в Linux. Он просто останавливается при «запуске ядра …».

Чтобы лучше понять, что идет не так, я подумал, что было бы неплохо получить доступ к журналам из Linux.

Я могу получить доступ к пользовательской области из uboot через «ls»:

 Zynq> ls mmc 0:2 
ostree/deploy/poky/deploy/9d325972b955e6584d3fad0a7ff1bf1a8.0/etc
<DIR>       2048 .
<DIR>       1024 ..
<DIR>       1024 modprobe.d
            0 motd
<DIR>       1024 xdg
<DIR>       1024 logrotate.d
          58 rpcbind.conf
        1633 inputrc
         828 mke2fs.conf
          15 timestamp
       10929 login.defs
         324 issue
<DIR>       1024 sudoers.d
etc ...
  

Теперь я ищу способ скопировать файлы из пользовательского интерфейса на другое устройство (удаленный компьютер).

Я узнал о «tftpput», который доступен в uboot. Моя проблема в том, что «tftpput» ожидает адрес сохранения и размер. Но я не знаю, как получить эту информацию.

 tftpput - TFTP put command, for uploading files to a server

Usage:
tftpput Address Size [[hostIPaddr:]filename]
  

Мне не удалось найти хорошую документацию по «tftpput». Может быть, у кого-нибудь есть ссылка для меня или предоставьте мне небольшое «как» по этому поводу?

Заранее спасибо

Ответ №1:

Чтобы ответить на конкретный вопрос, вам нужен tftp-сервер на другой машине. Затем, когда вы используете ‘load’ для переноса файла в память, у вас теперь будет этот адрес, для вас будет установлен $filesize (для параметра size), а машина, на которой вы настраиваете tftp-сервер, является заключительной частью команды.

Тем не менее, если вы видите только «Запуск ядра» и ничего больше, вполне вероятно, что ядро Linux не доходит до точки, в которой монтируется rootfs, запускается пользовательская среда, и вы увидите файлы журнала. Без дополнительной информации трудно сказать, что вам нужно здесь сделать, но в первую очередь следует убедиться в правильности ваших загрузочных параметров.

Комментарии:

1. Привет, спасибо за вашу помощь. К сожалению, я получил новую задачу с более высоким приоритетом, поэтому я не смогу протестировать это немедленно.

Ответ №2:

Чтобы проанализировать, почему ядро не загружается, вы могли бы включить раннюю консоль.

Для 64-разрядных систем ARM ранняя консоль включается с помощью параметров командной строки ядра. U-Boot берет их из переменной окружения bootargs .

Аргументы для earlycon зависят от вашей платы, например, для Odroid C2:

 setenv bootargs earlycon=meson,0xc81004c0
  

Для ранней консоли на 32-разрядной системе ARM вам придется скомпилировать ядро с соответствующими параметрами конфигурации, например, для Banana Pi:

 CONFIG_DEBUG_LL=y
CONFIG_DEBUG_SUNXI_UART0=y
CONFIG_EARLY_PRINTK=y
  

Комментарии:

1. Привет, спасибо за вашу помощь. К сожалению, я получил новую задачу с более высоким приоритетом, поэтому я не смогу протестировать это немедленно.

Ответ №3:

давайте предположим, что file.txt имеет размер 16 байт (это 10 в шестнадцатеричном формате)

Сначала необходимо загрузить файл в память fatload mmc 1:1 0x40400000 file.txt

Затем вы можете отправить его на tftp-сервер: tfttput 0x40400000 10 192.168.7.1:filetxt