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

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


wiki:uboot

Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

wiki:uboot [2012/11/20 19:14] (текущий)
Строка 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 (внешнее изменение)