====== U-Boot ====== [[http://www.denx.de/wiki/U-Boot|U-Boot]] --- универсальный загрузчик, используемый для загрузки ОС [[linux|Linux™]] и других ОС. ===== Образ ===== U-Boot использует образы, создаваемые программой ''mkimage'', сборка которой выполнятся при сборке U-Boot (см. ''/tools/mkimage'') и которую, вероятно, можно поставить из пакета ''uboot-mkimage'' вашего дистрибутива GNU/Linux. ''mkimage'' добавляет 64 байта информации: название, контрольную сумму и пр. Для отображения информации об образе: * На host-компьютере:\\ ''mkimage -l '', где '''' --- название файла образа. * В U-Boot: * Для образов по адресу '''':\\ ''iminfo '' * Для образов записанных во 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''' --- название [[linux#корневая_файловая_система|КФС]], ''ramdisk.gz'' --- название файла сжатого образа КФС, ''uramdisk.gz'' --- название создаваемого образа U-Boot. ==== Запись образа во Flash ==== FIXME Для записи созданного образа ядра или КФС во Flash требуется: - Скопировать образ с хоста в //оперативную память// целевой платы * По сетевому интерфейсу через протоколы TFTP или NFS * По последовательному порту - Проверить целостность скопированного образа в оперативной памяти - Выключить защиту Flash от записи - Стереть область Flash для образа - Скопировать образ из оперативной памяти в стёртую область Flash - Проверить целостность образа во Flash ==== Создание из образа оригинального файла ==== Для получения из образа U-Boot оригинального файла у файла образа нужно убрать начальные 64 байта, например:\\ ''dd if=uImage of=zImage bs=1 skip=64'' ===== Переменные ===== Список переменных и их значения отображаются командой ''printenv''. Для вывода значения отдельной переменной используйте команду ''printenv '', где '''' --- название переменной. ==== Загрузка ==== При запуске U-Boot, после [[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 ==== Проверка контрольной суммы ==== При загрузке ядра и [[linux#корневая_файловая_система|КФС]] U-Boot проверяет контрольную сумму (КС, CRC). Если подсчитанная КС не совпадает с КС подсчитанной при [[u-boot#создание_образа|создании образа]], выполняется перезагрузка. Проверка КС может быть отключена установкой переменой ''verify'' значения ''no''. Заметьте, что при отключённой проверке КС и //программной перезагрузке// из ОС вы можете получить нерабочую систему (или с очень странным поведением), так как может быть выполнен запуск с повреждённым образом ядра и/или КФС. Проверка КС кода самого U-Boot не выполняется. ==== Доступ к переменным из Linux ==== Прочесть переменные U-Boot из Linux можно программой ''fw_printenv'', см. ''/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 , # 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 цветов. Для преобразования изображения можно воспользоваться [[http://www.gimp.org/|GIMP]]. Адрес изображения указывается в переменой ''splashimage''. Если по указанному адресу изображение не распознано, то отображается логотип. Экран очищается командой ''cls'', при этом отображается логотип вместо заставки, но палитра остаётся без изменения. Перенаправление вывода консоли на экран:\\ ''setenv stdout lcd'' При использовании (U-Boot 2010.09 из Git-репозитория ниже и U-Boot 1.3.3 начиная с svn598 [[u-boot#патчи|патчей]] для плат на основе EP93xx) тип дисплея задаётся переменной ''panel'': ^ Дисплей ^ ^ | 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'' следует [[u-boot#сохранение_переменных|сохранить]]). Для отображения фона и символов используется нулевой и 15-ый цвета палитры, соответственно. ===== Файлы U-Boot 2010.09 ===== Для Тион-Про2. [[git|Git]] репозиторий: http://zao-zeo.ru/media/files/u-boot/u-boot-2010.09-zeo.git ==== Собранные ==== Бинарный файлы загрузчика. {{filelist>u-boot/u-boot-2010.09/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ===== Файлы U-Boot 2010.03 ===== Для Тион270, Тион-Про270 (rev.2 и ранее). ==== Собранные ==== Бинарные файлы загрузчика. {{filelist>u-boot/*2010.03_tion270*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ==== Патчи ==== {{filelist>u-boot/patch/*2010.03*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ===== Файлы U-Boot 2009.8 ===== Для Тион-Про28. ==== Патчи ==== {{filelist>u-boot/patch/*2009.8*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ===== Файлы U-Boot 1.3.3 ===== ==== Собранные ==== Бинарные файлы загрузчика. {{filelist>u-boot/u-boot-1.3.3_*bin*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ==== Патчи ==== Патчи для исходных кодов. Файл логотипа ''zeo.bmp'' следует скопировать в директорию ''tools/logos'' исходных кодов. {{filelist>u-boot/patch/*1.3.3*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} {{filelist>u-boot/patch/zeo.bmp&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} Оригинальный исходный код [[ftp://ftp.denx.de/pub/u-boot/u-boot-1.3.3.tar.bz2|U-Boot 1.3.3]]. ==== Скрипты ==== Скрипты для упрощения записи Linux и КФС. В файле скрипта должно использоваться Unix-разделение строк, см. статью [[http://ru.wikipedia.org/wiki/Новая_строка|"новая строка" в Wikipedia]] {{filelist>u-boot/*scripts*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} ===== Проблемы ===== 1. Проблема с работой по 10 Мбитной сети (таймауты), по крайней мере с платами на основе Marvell PXA270. ---- 2. Если в ''bootargs'' указывать переменную, например, ''bootargs '${nfsroot}''', то вместо этой переменной не подставляется её значение при передачи параметров ядру. Требуемое можно сделать указав //дополнительно// в переменной bootcmd ''setenv bootargs ${bootargs} ${nfsroot}''