Wiren Board 5: Build an image to download in USB Mass-Storage mode: различия между версиями

Материал из Wiren Board
(Новая страница: «Эта инструкция описывает, как собрать bootstream для загрузки Linux с USB Mass Storage Gadget. При этом сод…»)
 
Строка 18: Строка 18:
* Скачать и распаковать содержимое initramfs в директорию с исходниками
* Скачать и распаковать содержимое initramfs в директорию с исходниками
  <nowiki>
  <nowiki>
$ wget http://lexs.blasux.ru/dump/initramfs_usbgadget.tar.gz
$ wget https://github.com/contactless/linux/releases/download/untagged-549d7245be70b24d7b1e/initramfs_usbgadget.zip
$ unzip initramfs_usbgadget.zip
$ sudo tar xvf initramfs_usbgadget.tar.gz</nowiki>
$ sudo tar xvf initramfs_usbgadget.tar.gz</nowiki>
* Инициализировать окружение для сборки ядра. При необходимости, изменить в этом файле переменные ''DT'' и ''CROSS_COMPILE''
* Инициализировать окружение для сборки ядра. При необходимости, изменить в этом файле переменные ''DT'' и ''CROSS_COMPILE''

Версия 02:52, 5 августа 2015

Эта инструкция описывает, как собрать bootstream для загрузки Linux с USB Mass Storage Gadget. При этом содержимое SD-карты становится доступно по USB как обычная флешка.

Структура bootstream:

  • U-Boot SPL - первичный загрузчик, проводит начальную инициализацию
  • U-Boot - собственно загрузчик, запускает Linux
  • Образ ядра Linux, состоит из нескольких частей
    • zImage - cобственно ядро
    • initramfs - файловая система с модулями для поддержки USB gadget, входит в zImage
    • DTB - информация о периферии, необходимая для работы ядра. Дописывается в конец zImage, в конфиге должна быть включена опция CONFIG_ARM_APPENDED_DTB

Сборка Linux

  • Получить исходники ядра из git, нужна ветка v3.19-imx5-x0.1
$ git clone https://github.com/contactless/linux.git
$ cd linux
$ git checkout v3.19-imx5-x0.1
  • Скачать и распаковать содержимое initramfs в директорию с исходниками
$ wget https://github.com/contactless/linux/releases/download/untagged-549d7245be70b24d7b1e/initramfs_usbgadget.zip
$ unzip initramfs_usbgadget.zip
$ sudo tar xvf initramfs_usbgadget.tar.gz
  • Инициализировать окружение для сборки ядра. При необходимости, изменить в этом файле переменные DT и CROSS_COMPILE
$ . ./scripts/kbuild-env.sh
  • Задать конфиг ядра
$ make mxs_usbgadget_defconfig
  • Собрать ядро и модули, установив их в распакованную initramfs
$ INSTALL_MOD_PATH=./initramfs_usbgadget/ ./scripts/kbuild.sh
  • Собрать ядро с appended DTB и initramfs
$ ./scripts/kbuild-dtb.sh

Сборка U-Boot

  • Получить исходники U-Boot из git. Нужна ветка wb_v2015.07
$ cd ..
$ git clone https://github.com/contactless/u-boot.git
$ cd u-boot
$ git checkout wb_v2015.07
  • Задать конфиг U-Boot
$ make mx28evk_usbgadget_defconfig
  • Скопировать ранее собранный образ [[kernel+initramfs]+DTB] в директорию U-Boot
$ cp ../linux/zImage-imx28-evk ./
  • Собрать совмещенный образ [U-Boot+[[kernel+initramfs]+DTB]], пригодный для загрузки по USB (bootstream)
$ make -j4 u-boot.sb

Сборка mxsldr

Эта утилита нужна для загрузки полученного образа по USB. Требуется установленная библиотека libusb-1.0 (apt-get install libusb-1.0-0-dev)

$ cd ..
$ git clone http://git.denx.de/mxsldr.git
$ cd mxsldr
$ make

Загрузка собранного образа с помощью mxsldr

$ ./mxsldr ../u-boot/u-boot.sb