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