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