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

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


wiki:usomiq-am437x-ezsdk

Это старая версия документа!


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. Скачиваем компилятор

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

2. Скачиваем SDK в исходниках

wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/exports/am437x-evm-linux-sdk-src-05.02.00.10.tar.xz

Распаковка исходников

Компилятор можно распаковать в локальную директорию, где будет происходить сборка, либо в директорию '/opt' (потребуются права root). Установка в локальную директорию «лучше» тем, что не загрязняет корень файловой системы, но хуже тем, что, если вам потребуется использовать этот же компилятор для сборки другого программного пакета, то пути придется прописывать в директорию, где этот компилятор распаковали, либо заново распаковывать компилятор в другой директории и тем самым плодить ненужные копии одного компилятора. Распаковка в '\opt' дает возможность всегда ссылаться на один экземпляр компилятора любому пользователю, зарегистрированному в системе (другой пользователь не сможет использовать компилятор, распакованный в домашней директории другого пользователя).

Сначала создадим директорию, где будем компилировать SDK:

mkdir am437x-evm-linux-sdk-src-05.02.00.10
cd am437x-evm-linux-sdk-src-05.02.00.10

Распакуем компилятор в локальной директории (исправьте абсолютный путь к реальному положению ваших архивов):

tar xf /media/winshare/am43xx/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf.tar.xz

У нас появился архив 'gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf'. Пропишем пути к GCC:

export CC=`pwd`/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

Проверим работает ли компилятор:

${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)

GCC выдал свою версию, поэтому всё в порядке. Теперь мы можем обращаться к компилятору через '${CC}'

2. Исходники SDK

Распакуем исходники SDK в локальную директорию рядом с SDK

tar xf /media/winshare/am43xx/am437x-evm-linux-sdk-src-05.02.00.10.tar.xz

Появилась директория 'board-support', в которой находятся:

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

u-boot находится в директории 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2', а ядро Linux в 'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e'

Компиляция

Компиляция u-boot

Заходим в директорию 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2' и выполняем команды:

make ARCH=arm distclean
make ARCH=arm am43xx_evm_usomiq_defconfig
make ARCH=arm CROSS_COMPILE=${CC}

Если ваш модуль имеет NAND с размером страницы 4096 байт, то надо использовать другой _defconfig вместо обычного:

make ARCH=arm am43xx_evm_usomiq_nand4k_defconfig

Если всё сделано правильно, то появятся два файла: MLO и u-boot.img. Эти файлы надо скопировать на первый раздел карточки SD:

cp MLO /media/boot
cp u-boot.img /media/boot

Компиляция ядра

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

Подготовка SD карты

Возьмите SD карту объемом не менее 2ГБ. Далее разобьем общее пространство карты на два:

  • boot - раздел fat32 для u-boot
  • roofs - раздел ext4 для файловой системы

Разбивку карты выполняем в ОС Linux!

Вставляете SD карту в ПК и определяете как к ней обращаться:

dmesg | tail

Появится что-то похожее:

[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

В данном примере карта уже разбита на два раздела, но нам интересно другое: «sdc: sdc1 sdc2». Теперь мы знаем, что карта в системе обозначена как '/dev/sdc'. Если бы карта имела один раздел или вовсе их не имела, то всё равно «sdc» мы бы увидели. Итак, выполняем разметку карты: выполняем команду

sudo fdisk /dev/sdc

Если на карте есть разделы, то их надо удалить последовательно нажимая букву 'd' и выбирая номер раздела, который надо удалить (удаляем все). Теперь считаем, что на карте нет разделов:

  1. Создаем раздел командой 'n' (new), затем 'p' (основной), затем 1 (первый раздел), подтверждаем выбор первого сектора [ENTER], вводим 4095 для последнего сектора и опять [ENTER]
  2. Изменяем тип раздела на fat16 нажатием 't' (type), потом 'e' (W95 FAT16 (LBA)
  3. Делаем раздел загружаемым: нажимаем 'a', потом '1'

Теперь создадим раздел для файловой системы:

  1. Создаем раздел командой 'n' (new), затем 'p' (основной), затем 2 (второй раздел), далее два раза жмем [ENTER]

Можно посмотреть что получилось в итоге. Для этого нажмите 'p':

Disk /dev/sdc: 7948 MB, 7948206080 bytes
255 heads, 63 sectors/track, 966 cylinders, total 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xafb3f87b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *        2048        4095        1024    e  W95 FAT16 (LBA)
/dev/sdc2            4096    15523839     7759872   83  Linux

Для записи разделов на диск нажмите 'w'

Форматирование разделов

  1. Форматируем раздел 1 как «FAT» командой «sudo mkfs.vfat -F 32 -n «boot» /dev/sdc1»
  2. Форматируем раздел 2 как «ext4» командой «sudo mkfs.ext4 -L rootfs /dev/sdc2»

Монтирование разделов Если в вашей системе не поддерживается автоматическое монтирование разделов носителей, то делаем это вручную:

sudo mkdir -p /media/boot
sudo mkdir -p /media/rootfs
sudo mount /dev/sdc1 /media/boot
sudo mount /dev/sdc2 /media/rootfs

Файловая система

Файловую систему скачаем готовую для SDK (размер архива 2ГБ):

wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/exports/am437x-evm-linux-sdk-bin-05.02.00.10.tar.xz

В данном архиве содержится несколько файловых систем, включая скомпилированные бинарники u-boot и ядро Linux для отладочных плат от Texas Instruments (для uSomIQ они не подойдут).

Запись на карту

Запись u-boot на карту Заходим в директорию u-boot 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2', далее выполняем команды:

sudo cp MLO /media/boot
sudo cp u-boot.img /media/boot

Запись ядра, модулей и dtb Заходим в директорию ядра Linux 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2', далее выполняем команды:

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/
wiki/usomiq-am437x-ezsdk.1547477668.txt.gz · Последнее изменение: 2019/01/14 17:54 — maxx