Содержание
Как настроить 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-сервер).