Инструменты пользователя

Инструменты сайта


wiki:uboot
no way to compare when less than two revisions

Различия

Показаны различия между двумя версиями страницы.


wiki:uboot [2012/11/20 19:14] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Как настроить U-boot ======
  
 +//Примечание: U-boot допускает ввод лишь шестнадцатеричных значений, поэтому ставить перед каждым числом "0x" не обязательно.//
 +===== Команды u-boot =====
 +//Примечание: для оперативной подсказки по командам u-boot необходимо набрать команду "help" для получения списка всех поддерживаемых команд, либо "help some_command_you_need", чтобы узнать какие параметры у конкретной, одной команды.//
 +
 +===== Настройка переменных окружения =====
 +Для того, чтобы создать или изменить переменную окружения надо выполнить команду:
 +<code>setenv NAME_OF_VAR value1 value2 value3...</code>
 +
 +Пояснение на реальном примере:
 +<code>setenv bootcmd tftp 22000000 uImage \; bootm 22000000</code>
 +Данная запись означает, что u-boot создаст (если этой переменной еще не было) либо изменит уже существующую переменную окружения "bootcmd".
 +
 +При первом запуске U-boot, программа запускается с переменными окружения "по умолчанию" и будет их использовать до тех пор, пока пользователь не выполнит команду "saveenv". Любая модификация переменных окружения хранится лишь в энергозависимой памяти и не будет сохранена во флеш память до выполнения команды "saveenv". Это удобно при отладке, например, чтобы на один сеанс изменит параметры загрузки ядра Linux и не портить рабочие значения.
 +
 +===== Загрузка образов по сети =====
 +  * Используя NFS
 +<code>nfs ADDR_IN_MEMORY host_ip:/export_dir/name_of_file</code>
 +Эта запись означает, что с помощью протокола NFS будет скачан файл "name_of_file" с компьютера в сети с адресом "host_ip" из директории "export_dir".
 +
 +//Примечание: для передачи данных по NFS в Linux на компьютере директория, к которой обращается u-boot, должна быть доступна по NFS.//
 +
 +  * Используя TFTP
 +<code>tftp ADDR_IN_MEMORY name_of_file</code>
 +Пояснение на реальном примере:
 +<code>tftp 22000000 uImage</code>
 +Данная запись означает, что u-boot скачает по протоколу TFTP файл uImage с компьютера, имеющего адрес, прописанный в переменной окружения "serverip".
 +===== Запись данных в NOR flash =====
 +Запись в NOR flash рассмотрим на примере записи ядра Linux - uImage:
 +
 +1) Загружаем образ по сети (например, используя TFTP)
 +
 +<code>> tftp 22000000 uImage
 +###########..
 +Bytes transferred = 1716336 (1a3070 hex)</code>
 +//обратите внимание, что далее мы будем использовать размер "1a3070". В вашем случае данное число будет другим//
 +
 +2) Стираем флеш перед записью (обязательно)
 +
 +Возможны варианты:
 +  * стереть всю флеш-микросхему:\\
 +<code>> erase all</code>
 +  * стереть место под ядро (очищаем с нулевого по 10й сектор, размер сектора - 0x20000):\\
 +<code>> erase 1:0-10</code>
 +
 +3) Производим запись ядра во флеш:\\
 +<code>> cp.b 22000000 10000000 1a3070</code>
 +
 +Копирование в NOR из u-boot идет со средней скоростью 1 МБ/мин, поэтому в среднем, чтобы залить файловую систему в NOR память уйдет около 30-40мин, в зависимости от размера. Данный способ является абсолютно не эффективным, поэтому лучше работать с флеш-памятью в среде Linux с помощью флеш-утилит. Скомпилированные для ARM-архитектуры фдеш утилиты можно скачать здесь: [[http://mentorel.com/downloads/flash-utils.tgz]].
 +
 +4) Модификация переменных окружения для старта с NOR-flash
 +
 +Возможны варианты:
 +  * Ядро выполняется прямо с флеш (возможно только для NOR)
 +<code>> setenv bootcmd bootm 10000000</code>
 +на самом деле ядро считывается из флеш и копируется по нужным адресам в SDRAM, указанным при создании uImage.
 +
 +  * Ядро копируется в SDRAM и выполняется оттуда:
 +<code>> setenv bootcmd cp.b С0042000 22000000 1a3070 \; bootm 22000000</code>
 +данные действия выполняют при запуске ядра с последовательной или NAND флеш.
 +===== Параметры ядра Linux =====
 +Для того, чтобы запустить Linux, ему требуется файловая система. Она может находиться на удаленном компьютере в сети и быть доступна по NFS, либо быть на флеш памяти платы. При этом флеш память должна быть разбита на разделы (partitions) и быть представлена в виде файловой системы (JFFS2, YAFFS).
 +
 +  * Загрузка файловой системы Linux по NFS
 +<code>setenv bootargs console=ttyS0,115200 root=/dev/nfs nfsroot=192.168.1.33:/home/rfs/target,nolock rw ip=192.168.1.244</code>
 +
 +  * Загрузка файловой системы Linux с флеш памяти на плате
 +<code>setenv bootargs console=ttyS0,115200 root=/dev/mtdblock0 rw ip=192.168.1.244</code>
 +
 +Параметр "ip=.." может иметь следующие значения:
 +
 +1) ip=off
 +
 +В Linux сеть не будет сконфигурирована
 +
 +2) ip=192.168.1.1
 +
 +В Linux сетевой интерфейс платы будет иметь ip-адрес 192.168.1.1
 +
 +3) ip=dhcp
 +
 +//Примечание: данный параметр доступен лишь, если DHCP поддержка включена в ядро//
 +
 +При запуске ядра Linux, оно само определит ip-адрес, маску и прочие параметры по DHCP протоколу (если в данном сегменте сети есть DHCP-сервер).
wiki/uboot.txt · Последнее изменение: 2012/11/20 19:14 — 127.0.0.1