#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