GrabDuck

wiki:uboot [Wiki МЕНТОР ЭЛЕКТРОНИКС]

:

Примечание: 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 ADDR_IN_MEMORY host_ip:/export_dir/name_of_file

Эта запись означает, что с помощью протокола NFS будет скачан файл «name_of_file» с компьютера в сети с адресом «host_ip» из директории «export_dir».

Примечание: для передачи данных по NFS в Linux на компьютере директория, к которой обращается u-boot, должна быть доступна по NFS.

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-сервер).