U-Boot

U-Boot — универсальный загрузчик, используемый для загрузки ОС Linux™ и других ОС.

Образ

U-Boot использует образы, создаваемые программой mkimage, сборка которой выполнятся при сборке U-Boot (см. <u-boot>/tools/mkimage) и которую, вероятно, можно поставить из пакета uboot-mkimage вашего дистрибутива GNU/Linux.

mkimage добавляет 64 байта информации: название, контрольную сумму и пр.

Для отображения информации об образе:

  • На host-компьютере:
    mkimage -l <img>, где <img> — название файла образа.
  • В U-Boot:
    • Для образов по адресу <addr>:
      iminfo <addr>
    • Для образов записанных во Flash:
      imls

Создание образа

Ядро

  • Поставьте mkimage из пакета uboot-mkimage вашего дистрибутива GNU/Linux
  • Или скопируйте программу mkimage полученную при сборке U-Boot в одну из директорий указанных в переменной окружения PATH (см. echo $PATH) или измените её значение (например, export PATH+=:/path/to/mkimage_dir).

После этого вы можете для сборки ядра и создания из собранного ядра образа U-Boot выполнять make uImage.

Также вы можете создать образ из командной строки, см. встроенную помощь mkimage -h.

Корневая файловая система

mkimage -n 'Ramdisk name' -C gzip -A arm -O linux -T ramdisk -d ramdisk.gz uramdisk.gz,
где 'Ramdisk name' — название КФС, ramdisk.gz — название файла сжатого образа КФС, uramdisk.gz — название создаваемого образа U-Boot.

Запись образа во Flash

FIXME

Для записи созданного образа ядра или КФС во Flash требуется:

  1. Скопировать образ с хоста в оперативную память целевой платы
    • По сетевому интерфейсу через протоколы TFTP или NFS
    • По последовательному порту
  2. Проверить целостность скопированного образа в оперативной памяти
  3. Выключить защиту Flash от записи
  4. Стереть область Flash для образа
  5. Скопировать образ из оперативной памяти в стёртую область Flash
  6. Проверить целостность образа во Flash

Создание из образа оригинального файла

Для получения из образа U-Boot оригинального файла у файла образа нужно убрать начальные 64 байта, например:
dd if=uImage of=zImage bs=1 skip=64

Переменные

Список переменных и их значения отображаются командой printenv.

Для вывода значения отдельной переменной используйте команду printenv <var>, где <var> — название переменной.

Загрузка

При запуске U-Boot, после задержки, выполняет команды содержащиеся в переменной bootcmd.

Несколько команд могут быть разделены символом ';'.

Задержка

Задержка при загрузке задаётся переменной bootdelay.

Параметры ядра

Параметры передаваемые ядру (cmdline) задаются переменной bootargs.

Идентификатор ядра

Идентификатор ядра machid задаётся переменной machid, указывается шестнадцатеричное значение без префикса.

Сохранение переменных

Сохранение переменных во Flash выполняется командой saveenv. При её выполнении автоматически снимается и устанавливается защита от записи сектора Flash, в котором хранятся переменные.

Пример вывода команды:

  $ saveenv
  Saving Environment to Flash...
  . done
  Un-Protected 1 sectors
  Erasing Flash...
  . done
  Erased 1 sectors
  Writing to Flash... done
  . done
  Protected 1 sectors

Проверка контрольной суммы

При загрузке ядра и КФС U-Boot проверяет контрольную сумму (КС, CRC). Если подсчитанная КС не совпадает с КС подсчитанной при создании образа, выполняется перезагрузка.

Проверка КС может быть отключена установкой переменой verify значения no.

Заметьте, что при отключённой проверке КС и программной перезагрузке из ОС вы можете получить нерабочую систему (или с очень странным поведением), так как может быть выполнен запуск с повреждённым образом ядра и/или КФС.

Проверка КС кода самого U-Boot не выполняется.

Доступ к переменным из Linux

Прочесть переменные U-Boot из Linux можно программой fw_printenv, см. <u-boot>/tools/env. Конфигурация задается файлом /etc/fw_env.config.

Пример файла конфигурации для Тион, Тион-Про:

# MTD dev name    Dev. offset    Env. size    Flash sector size
/dev/mtd0         0x40000        0x40000      0x40000

Пример чтения переменой ethaddr:

fw_printenv 2>/dev/null | grep ethaddr | grep -o -E ".{2}:.{11}:.{2}"

MAC-адрес

Если на плате есть наклейка "MAC: …", то это плата с IAB (JSC Electrical Equipment Factory) MAC-адресом, который можно смело использовать на этой плате.

Для плат на базе процессора:

  • EP93xx — MAC-адрес записывается в ИМС SPI Flash программой download (параметр -n), читается из неё в U-Boot (начиная с svn890 задаёт значение переменной ethaddr) и в драйвере Ethernet в Linux
  • PXA270 — MAC-адрес задаётся в ethaddr переменной окружения U-Boot и передаётся Linux через serial number tag (начиная с svn886)

Flash

Отображение информации о Flash – команда flinfo.

Идентификатор Flash задаётся переменной mtdids, например, значением nor0=flash.

Разделы задаются переменной mtdparts, например, три раздела 512 kB, 4 MB и оставшееся место: mtdparts=flash:512k(u-boot)ro,4m(kernel)ro,-(fs).

Команда mtdparts выводит список текущих разделов, например:

$ mtdparts 
device nor0 <flash>, # parts = 3
#: name                size            offset          mask_flags
0: u-boot              0x00080000      0x00000000      1
1: kernel              0x00400000      0x00080000      1
2: fs                  0x01b80000      0x00480000      0
active partition: nor0,2 - (fs) 0x01b80000 @ 0x00480000

Команда ls выводит содержимое ФС JFFS2 для раздела указанного командой chpart (в переменной partition), например, nor0,2.

Командой protect off выполняется снятие программной или аппаратной защиты от записи или стирания Flash. Например, защиту с раздела nor0,2 можно снять командой:

protect off nor0,2

Командой erase выполняется стирание содержимого Flash. Например, перед записью КФС размещённой на разделе nor0,2 требуется стереть содержимое этого раздела полностью командой:

erase nor0,2

См. также команды fsinfo, fsload.

Заставка

Для заставки используется изображение в формате bmp с индексированной палитрой из 256 цветов. Для преобразования изображения можно воспользоваться GIMP.

Адрес изображения указывается в переменой splashimage. Если по указанному адресу изображение не распознано, то отображается логотип.

Экран очищается командой cls, при этом отображается логотип вместо заставки, но палитра остаётся без изменения.

Перенаправление вывода консоли на экран:
setenv stdout lcd

При использовании (U-Boot 2010.09 из Git-репозитория ниже и U-Boot 1.3.3 начиная с svn598 патчей для плат на основе EP93xx) тип дисплея задаётся переменной panel:

Дисплей <val>
VGA vga
3.5" (320x240) 3.5
5.7" (640x480) 5.7
8" (640x480) 8
8" (800x600) 8-800x600
8" (800x600)
A080SN01
8-800x600n

Указанный дисплей используется после сброса (переменную panel следует сохранить).

Для отображения фона и символов используется нулевой и 15-ый цвета палитры, соответственно.

Файлы U-Boot 2010.09

Для Тион-Про2.

Git репозиторий: http://zao-zeo.ru/media/files/u-boot/u-boot-2010.09-zeo.git

Собранные

Бинарный файлы загрузчика.

ФайлРазмерИзменение
u-boot-2010.09_tion-pro2_ga313ade6e1922212cf2c4ea83e3bb0e7ff4a2210.bin1679802011/11/25 17:02
md5.sum1052011/11/25 17:03

Файлы U-Boot 2010.03

Для Тион270, Тион-Про270 (rev.2 и ранее).

Собранные

Бинарные файлы загрузчика.

ФайлРазмерИзменение
u-boot-2010.03_tion270-pxa270-series_zeo551b5cfb539639540ccf7a0fc6f1d02516d8347f_bin.tar.gz6600002013/09/25 16:21

Патчи

ФайлРазмерИзменение
u-boot-2010.03_zeo551b5cfb539639540ccf7a0fc6f1d02516d8347f.patch.gz149632013/09/25 16:24

Файлы U-Boot 2009.8

Для Тион-Про28.

Патчи

ФайлРазмерИзменение
u-boot_2009.8_tion-pro28_svn2200.tar.gz12202013/03/25 20:58
u-boot_2009.8_tion-pro28_freescale_svn2200.tar.gz5061872013/03/25 20:58

Файлы U-Boot 1.3.3

Собранные

Бинарные файлы загрузчика.

Патчи

Патчи для исходных кодов. Файл логотипа zeo.bmp следует скопировать в директорию tools/logos исходных кодов.

ФайлРазмерИзменение
zeo.bmp155422010/01/31 19:21

Оригинальный исходный код U-Boot 1.3.3.

Скрипты

Скрипты для упрощения записи Linux и КФС. В файле скрипта должно использоваться Unix-разделение строк, см. статью "новая строка" в Wikipedia

ФайлРазмерИзменение
u-boot_scripts_svn402.tar.gz11892010/01/31 19:21

Проблемы

1. Проблема с работой по 10 Мбитной сети (таймауты), по крайней мере с платами на основе Marvell PXA270.


2. Если в bootargs указывать переменную, например, bootargs '${nfsroot}', то вместо этой переменной не подставляется её значение при передачи параметров ядру. Требуемое можно сделать указав дополнительно в переменной bootcmd setenv bootargs ${bootargs} ${nfsroot}

 
u-boot.txt · Последние изменения: 2014/04/22 18:16 От asv
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki Donate