Инструменты пользователя

Инструменты сайта


wiki:usomiq-am437x-ezsdk
no way to compare when less than two revisions

Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
Следующая версия
wiki:usomiq-am437x-ezsdk [2019/05/28 18:29] – [Подготовка SD карты] maxx
Строка 1: Строка 1:
 +====== Linux SDK для AM437x Sitara ======
 +//Данное руководство относится к версии SDK: PROCESSOR-SDK-LINUX-AM437X  05_02_00_10//
 +Компиляция выполнялась на машине Ubuntu 16.04.2 LTS 64bit
 +===== Скачиваем необходимые ресурсы =====
 +Исходные тексты ядра и файловой системы, компилятор, а также уже скомпилированные бинарники для процессора AM437x находятся на странице: [[http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/index_FDS.html]]
  
 +Компилировать всё будем сами из исходных текстов, поэтому бинарные (уже скомпилированные версии) скачивать не будем.
 +
 +1. Скачиваем компилятор
 +<code>
 +wget https://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabihf/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz
 +</code>
 +2. Скачиваем SDK в исходниках
 +<code>
 +wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/05_02_00_10/exports/am437x-evm-linux-sdk-src-05.02.00.10.tar.xz
 +</code>
 +===== Распаковка исходников =====
 +Компилятор можно распаковать в локальную директорию, где будет происходить сборка, либо в директорию '/opt' (потребуются права root). Установка в локальную директорию "лучше" тем, что не загрязняет корень файловой системы, но хуже тем, что, если вам потребуется использовать этот же компилятор для сборки другого программного пакета, то пути придется прописывать в директорию, где этот компилятор распаковали, либо заново распаковывать компилятор в другой директории и тем самым плодить ненужные копии одного компилятора. Распаковка в '\opt' дает возможность всегда ссылаться на один экземпляр компилятора любому пользователю, зарегистрированному в системе (другой пользователь не сможет использовать компилятор, распакованный в домашней директории другого пользователя).
 +
 +Сначала создадим директорию, где будем компилировать SDK:
 +<code>
 +mkdir am437x-evm-linux-sdk-src-05.02.00.10
 +cd am437x-evm-linux-sdk-src-05.02.00.10
 +</code>
 +Распакуем компилятор в локальной директории (исправьте абсолютный путь к реальному положению ваших архивов):
 +<code>
 +tar xf /media/winshare/am43xx/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz
 +</code>
 +У нас появился архив 'gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf'. Пропишем пути к GCC:
 +<code>
 +export CC=`pwd`/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
 +</code>
 +Проверим работает ли компилятор:
 +<code>
 +${CC}gcc -v
 +Using built-in specs.
 +COLLECT_GCC=/home/maxx/Projects/am437x/am437x-evm-linux-sdk-src-05.02.00.10/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
 +COLLECT_LTO_WRAPPER=/storage/Projects/am437x/am437x-evm-linux-sdk-src-05.02.00.10/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/7.2.1/lto-wrapper
 +Target: arm-linux-gnueabihf
 +Configured with: '/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/snapshots/gcc.git~linaro-7.2-2017.11/configure' SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --enable-gnu-indirect-function --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/builder_arch/amd64/label/tcwg-x86_64-build/target/arm-linux-gnueabihf/_build/builds/destdir/x86_64-unknown-linux-gnu
 +Thread model: posix
 +gcc version 7.2.1 20171011 (Linaro GCC 7.2-2017.11)
 +</code>
 +GCC выдал свою версию, поэтому всё в порядке. Теперь мы можем обращаться к компилятору через '${CC}'
 +
 +
 +2. Исходники SDK
 +
 +Распакуем исходники SDK в локальную директорию рядом с SDK
 +<code>
 +tar xf /media/winshare/am43xx/am437x-evm-linux-sdk-src-05.02.00.10.tar.xz
 +</code>
 +Появилась директория 'board-support', в которой находятся:
 +<code>
 +board-support/extra-drivers:
 +cmem-mod-4.15.00.02+gitAUTOINC+0f39ed469f  cryptodev-module-1.9  ti-sgx-ddk-km-1.14.3699939  uio-module-drv-2.2.1.0+gitAUTOINC+bda9260f22
 +
 +board-support/linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e:
 +arch   certs    CREDITS  Documentation  firmware  include  ipc     Kconfig  lib          Makefile  net     samples  security  ti_config_fragments  tools  virt
 +block  COPYING  crypto   drivers        fs        init     Kbuild  kernel   MAINTAINERS  mm        README  scripts  sound     TISDK-README         usr
 +
 +board-support/u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2:
 +api   board  common     configs  doc            drivers  env       fs       Kbuild   lib       MAINTAINERS  net   README   snapshot.commit  TISDK-README
 +arch  cmd    config.mk  disk     Documentation  dts      examples  include  Kconfig  Licenses  Makefile     post  scripts  test             tools
 +</code>
 +u-boot находится в директории **'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2'**, а ядро Linux в **'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e'**
 +
 +===== Компиляция =====
 +Дальнейшие действия будут в директории board-support:
 +<code>
 +cd board-support
 +</code>
 +==== Компиляция u-boot ====
 +SDK от Texas Instruments не поддерживает модуль uSomIQ, //хотя и легко запускается, если убрать чтение идентификатора платы из встроенной EEPROM//. Сначала скачаем и применим исправления исходных кодов для модуля uSomIQ:
 +<code>
 +wget http://mentorel.com/downloads/usomiq/patches/add-am437x-usomiq-u-boot-sdk-05.02.00.10.patch
 +</code>
 +Заходим в директорию 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2' и выполняем команду:
 +<code>
 +cd u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2
 +patch -p1 < ../add-am437x-usomiq-u-boot-sdk-05.02.00.10.patch
 +</code>
 +Теперь непосредственно компиляция:
 +<code>
 +make ARCH=arm distclean
 +make ARCH=arm am43xx_evm_usomiq_defconfig
 +make ARCH=arm CROSS_COMPILE=${CC}
 +</code>
 +Если всё сделано правильно, то появятся два файла: **MLO** и **u-boot.img**. Эти файлы надо будет скопировать на FAT раздел карточки SD 
 +==== Компиляция ядра ====
 +SDK от Texas Instruments не поддерживает модуль uSomIQ, поэтому сначала скачаем и применим исправления исходных кодов для модуля uSomIQ:
 +<code>
 +wget http://mentorel.com/downloads/usomiq/patches/add-am437x-usomiq-kernel-sdk-05.02.00.10.patch
 +cd linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e
 +patch -p1 < ../add-am437x-usomiq-kernel-sdk-05.02.00.10.patch
 +</code>
 +Непосредственно компиляция
 +<code>
 +make ARCH=arm CROSS_COMPILE=${CC} distclean
 +make ARCH=arm CROSS_COMPILE=${CC} tisdk_am437x-evm_defconfig
 +make ARCH=arm CROSS_COMPILE=${CC} zImage modules dtbs
 +</code>
 +Если ваш компьютер имеет несколько процессорных ядер (не путать с логическими ядрами), то можно ускорить компиляцию запустив компилятор на каждом из ядер. Для этого компилятору gcc надо передать параметр **-j4**, если ядер 4, или 8, если ядер 8. То есть, команда для компиляции ядра будет выглядеть так (местоположение -j8 не имеет значения):
 +<code>
 +make ARCH=arm CROSS_COMPILE=${CC} zImage modules dtbs -j8
 +</code>
 +==== Подготовка SD карты ====
 +Возьмите SD карту объемом не менее 2ГБ. Далее разобьем общее пространство карты на два:
 +  * boot - раздел fat32 для u-boot
 +  * rootfs - раздел ext4 для файловой системы
 +
 +//Разбивку карты выполняем в ОС Linux!//
 +
 +Вставляете SD карту в ПК и определяете как к ней обращаться:
 +<code>
 +dmesg | tail
 +</code>
 +Появится что-то похожее:
 +<code>
 +[530052.702577] EXT4-fs (sdc2): mounted filesystem with ordered data mode. Opts: (null)
 +[535222.048372] sd 2:0:0:0: [sdc] 15431680 512-byte logical blocks: (7.90 GB/7.36 GiB)
 +[535222.056436]  sdc: sdc1 sdc2
 +</code>
 +В данном примере карта уже разбита на два раздела, но нам интересно другое: "sdc: sdc1 sdc2". Теперь мы знаем, что карта в системе обозначена как '/dev/**sdc**'. Если бы карта имела один раздел или вовсе их не имела, то всё равно "sdc" мы бы увидели. 
 +
 +
 +Итак, cначала удалим все разделы с карты:
 +<code>
 +sudo dd if=/dev/zero of=/dev/sdc bs=1M count=20
 +</code>
 +Далее, чтобы выполнить разметку карты выполняем команду:
 +<code>
 +sudo sfdisk --version
 +</code>
 +Если версия sfdisk >= 2.26.x (sfdisk from util-linux 2.27.1), то выполняем команду:
 +<code>
 +sudo sfdisk /dev/sdc <<-__EOF__
 +1M,12M,0xE,*
 +13M,,,-
 +__EOF__
 +</code>
 +На карте 16ГБ получилась такая карта разделов:
 +<code>
 +Device     Boot Start      End  Sectors  Size Id Type
 +/dev/sdc1  *     2048    26623    24576   12M  e W95 FAT16 (LBA)
 +/dev/sdc2       26624 30965759 30939136 14.8G 83 Linux
 +</code>
 +Теперь форматируем разделы:\\
 +* Форматируем раздел 1 как "FAT" командой 
 +<code>
 +sudo mkfs.vfat -F 16 -n BOOT /dev/sdc1
 +</code>
 +* Форматируем раздел 2 как "ext4" командой
 +<code>
 +sudo mkfs.ext4 -L rootfs /dev/sdc2
 +</code>
 +
 +**Монтирование разделов**
 +Если в вашей системе не поддерживается автоматическое монтирование разделов носителей, то делаем это вручную:
 +<code>
 +sudo mkdir -p /media/boot
 +sudo mkdir -p /media/rootfs
 +sudo mount /dev/sdc1 /media/boot
 +sudo mount /dev/sdc2 /media/rootfs
 +</code>
 +==== Файловая система ====
 +Файловую систему скачаем готовую для SDK (размер архива 2ГБ):
 +<code>
 +wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/exports/am437x-evm-linux-sdk-bin-05.02.00.10.tar.xz
 +</code>
 +Сначала распакуем весь архив:
 +<code>
 +tar xf am437x-evm-linux-sdk-bin-05.02.00.10.tar.xz
 +</code>
 +Получаем директорию "ti-processor-sdk-linux-am437x-evm-bin-05.02.00.10" с содержимым:
 +<code>
 +cd ti-processor-sdk-linux-am437x-evm-bin-05.02.00.10
 +ls
 +bin  board-support  filesystem  Rules.make  setup.sh
 +</code>
 +В данном архиве содержится несколько файловых систем, включая скомпилированные бинарники u-boot и ядро Linux для отладочных плат от Texas Instruments (для uSomIQ они не подойдут). Нас интересует директория **filesystem**:
 +<code>
 +arago-base-tisdk-image-am437x-evm.tar.xz
 +arago-base-tisdk-image-am437x-evm.ubi
 +arago-tiny-image-am437x-evm.tar.xz
 +arago-tiny-image-am437x-evm.ubi
 +tisdk-docker-rootfs-image-am437x-evm.tar.xz
 +tisdk-docker-rootfs-image-am437x-evm.ubi
 +tisdk-rootfs-image-am437x-evm.tar.xz
 +tisdk-rootfs-image-am437x-evm.ubi
 +</code>
 +Запишем на нашу SD карту файловую систему **tisdk-rootfs-image-am437x-evm.tar.xz**
 +<code>
 +cd filesystem
 +sudo tar xf tisdk-rootfs-image-am437x-evm.tar.xz -C /media/rootfs
 +</code>
 +==== Запись загрузчиков на карту ====
 +=== Запись u-boot на карту ===
 +Заходим в директорию u-boot 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2', далее выполняем команды:
 +<code>
 +sudo cp MLO /media/boot
 +sudo cp u-boot.img /media/boot
 +</code>
 +=== Запись ядра, модулей и dtb ===
 +Заходим в директорию ядра Linux 'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e', далее выполняем команды:
 +<code>
 +sudo cp arch/arm/boot/zImage /media/rootfs/boot/
 +sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install
 +sudo cp arch/arm/boot/dts/am437x-usomiq.dtb /media/rootfs/boot/
 +</code>
 +Далее нужно обязательно отмонтировать оба раздела, иначе данные на карте не сохранятся:
 +<code>
 +sudo umount /dev/sdc1 /dev/sdc2
 +</code>
 +Теперь карту можно извлечь из ПК и загружать с нее модуль uSomIQ AM437x. Загрузка происходит автоматически без дополнительных действий.
wiki/usomiq-am437x-ezsdk.txt · Последнее изменение: 2023/06/16 14:42 — admin77