Что такое uboot linux

3. Загрузчик U-Boot

Данный документ описывает особенности работы загрузчика U-Boot для модулей на базе микросхемы 1892ВА018 (aka СКИФ, Scythian, MCom-03).

3.2. Обзор загрузчика

3.2.1. Возможности

  • Поддержка модулей на базе MCom-03:
    • ROCK Pi N10 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
    • NGFW-CB r1.0 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
    • conga-SEVAL с установленным процессорным модулем ELV-MC03-SMARC r1.1;
    • ELV-SMARC-CB r1.0 с установленным процессорным модулем ELV-MC03-SMARC r1.1;
    • Трастфон-Э ОПН r1.1 с установленным процессорным модулем Трастфон-Э ПМ r1.5;
    • MCom-03 BuB r1.3.x, r1.5.x (aka IPCom BuB).

    3.2.2. Исходный код

    Основные файлы поддержки микросхемы:

    • arch/arm/dts/mcom03*.dts ,
    • board/elvees/ ,
    • configs/mcom03*_defconfig ,
    • include/configs/mcom03.h .

    3.2.3. Конфигурация и сборка

    Соответствие модулей, конфигураций и имён DTS-файлов приведено в таблице Таблица 3.1 .

    Таблица 3.1 Конфигурации и DTS-файлы для модулей MCom-03 

    Результатом сборки исходных кодов загрузчика является образ u-boot.bin . Образ доступен в корневой директории загрузчика после завершения сборки.

    Для сборки загрузчика на ПК требуется кросс-компилятор aarch64-linux-gnu.

    Переменные окружения, влияющие на сборку загрузчика:

    • ARCH — целевая архитектура;
    • CROSS_COMPILE — префикс кросс-компилятора;
    • DEVICE_TREE — имя файла DTS (без расширения) для целевого модуля;
    • PATH — пути для поиска используемых приложений.

    Пример сборки загрузчика для модуля MCom-03 BuB r1.3.0:

    export PATH=:$PATH export ARCH=arm export CROSS_COMPILE=aarch64-linux-gnu- export DEVICE_TREE=mcom03-bub-r1.3.0 make mcom03bub_defconfig make

    3.2.4. Загрузка ядра Linux

    U-Boot выполняет загрузку Linux по схеме Generic Distro:

    • SD-карта (или eMMC, USB-накопитель) содержит файл extlinux.conf , образы ядер Linux, DTB-файлы, rootfs.
    • U-Boot перебирает источники загрузки: монтирует файловые системы с носителей подключенных к SD-контроллерам MCom-03, USB-контроллерам, проверяет наличие extlinux.conf . Порядок носителей определяется переменной boot_targets .
    • U-Boot считывает extlinux.conf , загружает образ ядра и DTB в ОЗУ, передаёт управление ядру.

    3.2.5. Переменные окружения

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

    Во время запуска загрузчик выполняет поиск переменных окружения, сохраненных в QSPI флеш-памяти:

    • при успешном обнаружении устанавливаются переменные окружения, сохраненные в QSPI флеш-памяти;
    • в случае ошибки устанавливаются переменные окружения, заданные по умолчанию в коде U-Boot (см. файл include/configs/mcom03.h ).

    3.2.6. Драйвер GEMAC

    3.2.7. Драйвер NAND NFC

    3.2.8. Драйвер QSPI

    Драйвер контроллера QSPI реализует ведущее устройство на шине SPI согласно классу UCLASS_SPI (см. doc/driver-model/spi-howto.rst ) модели драйверов U-Boot.

    Драйвер поддерживает спецификацию ведущего и ведомых устройств на шине SPI согласно doc/device-tree-bindings/spi/spi-bus.txt .

    • Поддержка до четырех ведомых устройств.
    • Передача в формате CPHA = 0 (см. флаг SPI_CPHA режима).
    • Полярность сигнала синхронизации CPOL = 0 (см. флаг SPI_CPOL режима).
    • Сигнал CS в активном состоянии «логический 0» (см. флаг SPI_CS_HIGH режима).
    • Передача слов данных старшим битом вперед (см. флаг SPI_LSB_FIRST режима).
    • Ведущее устройство на шине SPI (см. флаг SPI_SLAVE режима).
    • Пересылка в режиме full-duplex:
      • Передача данных по одному выводу на шине SPI (см. флаг SPI_TX_BYTE режима).
      • Прием данных по одному выводу на шине SPI (см. флаг SPI_RX_SLOW режима).
      • Не поддерживается установка скорости передачи. Частота на шине SPI равна частоте clk_ext , которая указывается в свойстве clocks в device tree. Частота clk_ext должна быть не больше частоты clk_axi на шине AXI.
      • Размер данных должен быть кратен восьми битам.
      • Передача в формате CPHA = 1 не поддерживается (флаг SPI_CPHA режима должен быть равен 0).
      • Полярность сигнала синхронизации CPOL = 1 не поддерживается (флаг SPI_CPOL режима должен быть равен 0).
      • Сигнал CS в активном состоянии «логическая 1» не поддерживается (флаг SPI_CS_HIGH режима должен быть равен 0).
      • Передача слов данных младшим битом вперед не поддерживается (флаг SPI_LSB_FIRST режима должен быть равен 0).
      • Передача/прием данных по одной линии не поддерживается (флаг SPI_3WIRE режима должен быть равен 0).
      • Режим loopback не поддерживается (флаг SPI_LOOP режима должен быть равен 0).
      • Режим ведомого устройства на шине SPI не поддерживается (флаг SPI_SLAVE режима должен быть равен 0).
      • Пропуск принятых байтов данных перед преамбулой не поддерживается (флаг SPI_PREAMBLE режима должен быть равен 0).
      • Передача данных по двум выводам на шине SPI не поддерживается (флаг SPI_TX_DUAL режима должен быть равен 0).
      • Передача данных по четырем выводам на шине SPI не поддерживается (флаг SPI_TX_QUAD режима должен быть равен 0).
      • Прием данных по двум выводам на шине SPI не поддерживается (флаг SPI_RX_DUAL режима должен быть равен 0).
      • Прием данных по четырем выводам на шине SPI не поддерживается (флаг SPI_RX_QUAD режима должен быть равен 0).

      С учетом ограничений, перечисленных выше, драйвер поддерживает только режим работы устройства на шине SPI, равный 0x0900 .

      При инициализации драйвер выполняет:

      • захват и включение тактового сигнала;
      • вывод контроллера QSPI из состояния сброса;
      • настройку контактных площадок в подсистеме HSPERIPH для внешних выводов контроллера QSPI1 на микросхеме MCom-03;
      • начальную настройку контроллера QSPI.

      При удалении драйвер выполняет:

      3.3. Поддержка ELV-MC03-SMARC

      Загрузчик и переменные окружения размещаются в QSPI0.

      Загрузчик поддерживает нижеперечисленные интерфейсы модуля ELV-MC03-SMARC. Наименования интерфейсов приведены в соответствии со спецификацией SMARC 2.1. В скобках указаны контроллеры MCom-03.

      Источник

      U-Boot

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

      Образ

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

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

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

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

      Ядро

      Или скопируйте программу 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

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

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

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

      Переменные

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

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

      Загрузка

      При запуске 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 , см. /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 ".:.:."

      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 можно снять командой:

      Командой erase выполняется стирание содержимого 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 :

      Дисплей
      VGA vga
      3.5″ (320×240) 3.5
      5.7″ (640×480) 5.7
      8″ (640×480) 8
      8″ (800×600) 8-800×600
      8″ (800×600)
      A080SN01
      8-800x600n

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

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

      Источник

      Читайте также:  Which app use port linux
Оцените статью
Adblock
detector