Uboot linux что такое
Обновлено: 01.07.2024
Загрузчик второго уровня. Копирует кусок данных из указанного ему места из энергонезависимой памяти в ОЗУ. Так как он считает, что это запакованный образ Linux , он его распаковывает и запускает. Образ ядра должен быть предварительно запакован в понятный формат для U-Boot с помощью утилиты mkimage . U-Boot позволяет производить загрузку образов через ftp, а также менять параметры запуска из командной строки, что удобно в момент отладки системы, когда требуется часто пересобирать ядро, файловую систему.
Используем U-Boot 1.3.4 + патч от linux4sam.
tar xvjf u-boot-x.x.x.tar.bz2
cat u-boot-x.x.x-exp.diff | patch -p1
Адаптация кода
Проверить стартовый адрес в /u-boot/board/at91sam9260ek/config.mk . Он должен совпадать с адресом, указанным в Bootstrap (JUMP_ADDRESS).
Установить размер памяти, рабочие частоты в /include/configs/at91sam9260.h :
Понизить при необходимости частоту SPI (согласовать с Bootstrap ):
Задать параметры запуска в соответствующей секции (или во всех).
"rootfstype=ubifs rootflags=bulk_read,chk_data_crc rw"
Для ramfs и монтировании UBIFS файловой системы:
Обратить внимание на параметр:
0xD0042000 = адрес, где находится образ ядра. См. Логическая карта памяти.
0x210000 = 2162688 = максимальный размер образа ядра Linux .
0x22000000 = 32 M = адрес загрузки образ ядра, зависит от объёма установленной памяти.
Установить адрес микросхемы физического интерфейса Ethernet в cpu/arm926ejs/at91sam9/ether.c :
macb_eth_initialize(0, (void *)AT91SAM9260_BASE_EMAC, 0x01);
Компилятор
Используется не новее 2007q1-21. Причина: непонятное увеличение размера скомпилированного файла.
Компиляция
В Makefile определить путь к компилятору (около 130 строки):
Для запуска Linux из Dataflash сделать файл следующего содержания и запустить:
export PATH=/<path to toolchain>/arm-2007q1/bin:$
make ARCH=arm distclean
make ARCH=arm CROSS_COMPILE=arm-none-eabi-
Для запуска Linux из Nandflash сделать файл следующего содержания и запустить:
export PATH=/<path to toolchain>/arm-2007q1/bin:$
make ARCH=arm distclean
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
Результат сборки: /<path to u-boot>/board/at91sam9260ek/dataflash/u-boot.bin
Утилита mkimage для упаковки ядра Linux : /<path to u-boot>/tools/mkimage
размер файла не должен превышать параметр IMG_SIZE, указанный в Bootstrap .
Статья посвящена U-Boot и uClinux. Основной тип операционных систем используемых для микроконтроллеров остается RTOS. При наличии большой бизнес логики используют Linux. Для обеспечения реального времени применяют AMP, RTLinux и др. U-Boot (Universal bootloader) — универсальный загрузчик.
Что касается микроконтроллеров, необходимо значительный объем памяти на микроконтроллере, или поддержка нативной адресации ПЗУ (ROM) со стороны внешней памяти микроконтроллера, в случае отсутствии последнего, bin файл загружается из внешней памяти (NOR, SD и др.) в RAM с нативной адресацией.
Важность Das U-Boot в Embedded Linux системах достаточно лаконично изложена в книге Embedded Linux системы, Карим Ягмур. Текст о U-Boot начинается словами: «Хотя существует довольно много других загрузчиков, Das U-Boot, универсальный загрузчик, возможно, является самым богатым, самым гибким и наиболее активно развивающимся из загрузчиков с открытым исходным кодом». U-boot может использовать следующие файловые системы:
Для работы с U-Boot и uClinux для микроконтроллеров понадобиться репозиторий с github u-boot.
Все эксперименты будут происходит на базе данного репозитория, в качестве отладочной платы используется stm32f746g-disco и операционная система ubuntu 14.04 (можно использовать иные дистрибутивы Linux).
Для сборки u-boot нам понадобиться GNU Cross-Build Tools (возможно вам придется еще установить ia32-libs).
Распаковываем Cross-Build Tools и добавляем его в PATH.
В конце файла добавляем строку.
Основные директории для нашей отладочной платы:
Для примера изменим файл board.c функцию checkboard.
В директории lib-arm нужно открыть файл config.mk и изменить компилятор на arm-uclinuxeabi (можно передать как аргумент при сборке системы).
Сохраняем файл и в корне каталога выполняем следующею команду.
Затем находим необходимый VCP(COM-порт).
Затем bin файл зашиваем в плату с помощью openocd.
Запускаем sudo minicom -s или запускаем sudo gtkterm и
подключить VCP к Serial 6.
Для читателей которые еще не использовали openocd, переходим по ссылке openocd и скачиваем данный репозиторий к себе на компьютер.
Следующим моментом будет настройка tftp сервера.
Аргумент /srv/tftp команды in.tftpd указывает на каталог в котором будут храниться файлы TFTP сервера. Заменим /srv/tftp на /tftpboot.
Создадим директорию /tftpboot:
Чтобы новые настройки вступили в силу, перезапустим службу inetd:
нужно записать в директорию с проектом networking.uImage (скачиваемым образ с emcraft) и настраиваем окружение для u-boot (нужно воспользоваться командой setenv, saveenv, printenv).
Итого: установили U-Boot и uClinux, собрали исполняемый bin файл и запустили uClinux.
U-Boot — универсальный загрузчик, используемый для загрузки ОС Linux™ и других ОС .
Образ
U-Boot использует образы, создаваемые программой mkimage , сборка которой выполнятся при сборке U-Boot (см. <u-boot>/tools/mkimage ) и которую, вероятно, можно поставить из пакета uboot-mkimage вашего дистрибутива GNU/Linux.
mkimage добавляет 64 байта информации: название, контрольную сумму и пр.
Для отображения информации об образе:
На host-компьютере:mkimage -l <img> , где <img> — название файла образа.
Создание образа
Поставьте mkimage из пакета uboot-mkimage вашего дистрибутива GNU/Linux Или скопируйте программу mkimage полученную при сборке U-Boot в одну из директорий указанных в переменной окружения PATH (см. echo $PATH ) или измените её значение (например, export PATH+=:/path/to/mkimage_dir ).После этого вы можете для сборки ядра и создания из собранного ядра образа U-Boot выполнять make uImage .
Также вы можете создать образ из командной строки, см. встроенную помощь mkimage -h .
Корневая файловая система
Запись образа во Flash
Для записи созданного образа ядра или КФС во Flash требуется:
Скопировать образ с хоста в оперативную память целевой платы Проверить целостность скопированного образа в оперативной памяти Скопировать образ из оперативной памяти в стёртую область 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, в котором хранятся переменные.
Пример вывода команды:
Проверка контрольной суммы
При загрузке ядра и КФС U-Boot проверяет контрольную сумму (КС, CRC). Если подсчитанная КС не совпадает с КС подсчитанной при создании образа , выполняется перезагрузка.
Проверка КС может быть отключена установкой переменой verify значения no .
Проверка КС кода самого U-Boot не выполняется.
Доступ к переменным из Linux
Прочесть переменные U-Boot из Linux можно программой fw_printenv , см. <u-boot>/tools/env . Конфигурация задается файлом /etc/fw_env.config .
Пример файла конфигурации для Тион, Тион-Про:
Пример чтения переменой ethaddr :
MAC-адрес
Для плат на базе процессора:
Flash
Отображение информации о Flash – команда flinfo .
Идентификатор Flash задаётся переменной mtdids , например, значением nor0=flash .
Команда mtdparts выводит список текущих разделов, например:
Команда ls выводит содержимое ФС JFFS2 для раздела указанного командой chpart (в переменной partition ), например, nor0,2 .
Командой protect off выполняется снятие программной или аппаратной защиты от записи или стирания Flash. Например, защиту с раздела 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 :
Указанный дисплей используется после сброса (переменную panel следует сохранить ).
Для отображения фона и символов используется нулевой и 15-ый цвета палитры, соответственно.
Примечание: для оперативной подсказки по командам u-boot необходимо набрать команду «help» для получения списка всех поддерживаемых команд, либо «help some_command_you_need», чтобы узнать какие параметры у конкретной, одной команды.
Настройка переменных окружения
Для того, чтобы создать или изменить переменную окружения надо выполнить команду:
Пояснение на реальном примере:
Данная запись означает, что u-boot создаст (если этой переменной еще не было) либо изменит уже существующую переменную окружения «bootcmd».
При первом запуске U-boot, программа запускается с переменными окружения «по умолчанию» и будет их использовать до тех пор, пока пользователь не выполнит команду «saveenv». Любая модификация переменных окружения хранится лишь в энергозависимой памяти и не будет сохранена во флеш память до выполнения команды «saveenv». Это удобно при отладке, например, чтобы на один сеанс изменит параметры загрузки ядра Linux и не портить рабочие значения.
Загрузка образов по сети
Эта запись означает, что с помощью протокола NFS будет скачан файл «name_of_file» с компьютера в сети с адресом «host_ip» из директории «export_dir».
Примечание: для передачи данных по NFS в Linux на компьютере директория, к которой обращается u-boot, должна быть доступна по NFS.
Пояснение на реальном примере:
Данная запись означает, что u-boot скачает по протоколу TFTP файл uImage с компьютера, имеющего адрес, прописанный в переменной окружения «serverip».
Запись данных в NOR flash
Запись в NOR flash рассмотрим на примере записи ядра Linux - uImage:
1) Загружаем образ по сети (например, используя TFTP)
обратите внимание, что далее мы будем использовать размер «1a3070». В вашем случае данное число будет другим
2) Стираем флеш перед записью (обязательно)
стереть место под ядро (очищаем с нулевого по 10й сектор, размер сектора - 0x20000):3) Производим запись ядра во флеш:
4) Модификация переменных окружения для старта с NOR-flash
Ядро выполняется прямо с флеш (возможно только для NOR)на самом деле ядро считывается из флеш и копируется по нужным адресам в SDRAM, указанным при создании uImage.
данные действия выполняют при запуске ядра с последовательной или NAND флеш.
Параметры ядра Linux
Для того, чтобы запустить Linux, ему требуется файловая система. Она может находиться на удаленном компьютере в сети и быть доступна по NFS, либо быть на флеш памяти платы. При этом флеш память должна быть разбита на разделы (partitions) и быть представлена в виде файловой системы (JFFS2, YAFFS).
Загрузка файловой системы Linux с флеш памяти на платеПараметр «ip=..» может иметь следующие значения:
В Linux сеть не будет сконфигурирована
В Linux сетевой интерфейс платы будет иметь ip-адрес 192.168.1.1
Примечание: данный параметр доступен лишь, если DHCP поддержка включена в ядро
При запуске ядра Linux, оно само определит ip-адрес, маску и прочие параметры по DHCP протоколу (если в данном сегменте сети есть DHCP-сервер).
Читайте также: