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

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


wiki:usomiq-am437x-ezsdk

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
wiki:usomiq-am437x-ezsdk [2019/01/14 17:56] – [Запись на карту] maxxwiki:usomiq-am437x-ezsdk [2023/06/16 14:42] (текущий) – [Автономный старт с NAND] admin77
Строка 13: Строка 13:
 2. Скачиваем SDK в исходниках 2. Скачиваем SDK в исходниках
 <code> <code>
-wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/latest/exports/am437x-evm-linux-sdk-src-05.02.00.10.tar.xz+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> </code>
 ===== Распаковка исходников ===== ===== Распаковка исходников =====
Строка 65: Строка 65:
 </code> </code>
 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'**, а ядро Linux в **'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e'**
 +
 ===== Компиляция ===== ===== Компиляция =====
 +Дальнейшие действия будут в директории board-support:
 +<code>
 +cd board-support
 +</code>
 ==== Компиляция u-boot ==== ==== Компиляция u-boot ====
-Заходим в директорию 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2' и выполняем команды:+SDK от Texas Instruments не поддерживает модуль uSomIQ, //хотя и легко запускается, если убрать чтение идентификатора платы из встроенной EEPROM//. Сначала скачаем и применим исправления исходных кодов для модуля uSomIQ:
 <code> <code>
-make ARCH=arm distclean +wget http://mentorel.com/downloads/usomiq/patches/add-am437x-usomiq-u-boot-sdk-05.02.00.10.patch
-make ARCH=arm am43xx_evm_usomiq_defconfig +
-make ARCH=arm CROSS_COMPILE=${CC}+
 </code> </code>
-Если ваш модуль имеет NAND с размером страницы 4096 байт, то надо использовать другой _defconfig вместо обычного:+Заходим в директорию 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2' и выполняем команду:
 <code> <code>
-make ARCH=arm am43xx_evm_usomiq_nand4k_defconfig+cd u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2 
 +patch -p1 < ../add-am437x-usomiq-u-boot-sdk-05.02.00.10.patch
 </code> </code>
-Если всё сделано правильно, то появятся два файла: MLO и u-boot.img. Эти файлы надо скопировать на первый раздел карточки SD:+Теперь непосредственно компиляция:
 <code> <code>
-cp MLO /media/boot +make ARCH=arm distclean 
-cp u-boot.img /media/boot+make ARCH=arm am43xx_evm_usomiq_defconfig 
 +make ARCH=arm CROSS_COMPILE=${CC}
 </code> </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> <code>
 make ARCH=arm CROSS_COMPILE=${CC} distclean make ARCH=arm CROSS_COMPILE=${CC} distclean
 make ARCH=arm CROSS_COMPILE=${CC} tisdk_am437x-evm_defconfig make ARCH=arm CROSS_COMPILE=${CC} tisdk_am437x-evm_defconfig
 make ARCH=arm CROSS_COMPILE=${CC} zImage modules dtbs 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> </code>
 ==== Подготовка SD карты ==== ==== Подготовка SD карты ====
 Возьмите SD карту объемом не менее 2ГБ. Далее разобьем общее пространство карты на два: Возьмите SD карту объемом не менее 2ГБ. Далее разобьем общее пространство карты на два:
   * boot - раздел fat32 для u-boot   * boot - раздел fat32 для u-boot
-  * roofs - раздел ext4 для файловой системы+  * rootfs - раздел ext4 для файловой системы
  
 //Разбивку карты выполняем в ОС Linux!// //Разбивку карты выполняем в ОС Linux!//
Строка 105: Строка 122:
 [535222.056436]  sdc: sdc1 sdc2 [535222.056436]  sdc: sdc1 sdc2
 </code> </code>
-В данном примере карта уже разбита на два раздела, но нам интересно другое: "sdc: sdc1 sdc2". Теперь мы знаем, что карта в системе обозначена как '/dev/**sdc**'. Если бы карта имела один раздел или вовсе их не имела, то всё равно "sdc" мы бы увидели. Итак, выполняем разметку карты: выполняем команду +В данном примере карта уже разбита на два раздела, но нам интересно другое: "sdc: sdc1 sdc2". Теперь мы знаем, что карта в системе обозначена как '/dev/**sdc**'. Если бы карта имела один раздел или вовсе их не имела, то всё равно "sdc" мы бы увидели.  
 + 
 + 
 +Итак, cначала удалим все разделы с карты:
 <code> <code>
-sudo fdisk /dev/sdc+sudo dd if=/dev/zero of=/dev/sdc bs=1M count=20
 </code> </code>
-Если на карте есть разделы, то их надо удалить последовательно нажимая букву 'd' и выбирая номер раздела, который надо удалить (удаляем все). Теперь считаем, что на карте нет разделов: +Далее, чтобы выполнить разметку карты выполняем команду:
-  - Создаем раздел командой 'n' (new), затем 'p' (основной), затем 1 (первый раздел), подтверждаем выбор первого сектора [ENTER], вводим 4095 для последнего сектора и опять [ENTER] +
-  - Изменяем тип раздела на fat16 нажатием 't' (type), потом 'e' (W95 FAT16 (LBA) +
-  - Делаем раздел загружаемым: нажимаем 'a', потом '1' +
-Теперь создадим раздел для файловой системы: +
-  - Создаем раздел командой 'n' (new), затем 'p' (основной), затем 2 (второй раздел), далее два раза жмем [ENTER] +
-Можно посмотреть что получилось в итоге. Для этого нажмите 'p':+
 <code> <code>
-Disk /dev/sdc: 7948 MB7948206080 bytes +sudo sfdisk --version 
-255 heads63 sectors/track966 cylinderstotal 15523840 sectors +</code> 
-Units = sectors of 1 * 512 = 512 bytes +Если версия sfdisk >= 2.26.x (sfdisk from util-linux 2.27.1), то выполняем команду: 
-Sector size (logical/physical): 512 bytes / 512 bytes +<code> 
-I/O size (minimum/optimal)512 bytes / 512 bytes +sudo sfdisk /dev/sdc <<-__EOF__ 
-Disk identifier: 0xafb3f87b +1M,12M,0xE,* 
- +13M,,,- 
-   Device Boot      Start         End      Blocks   Id  System +__EOF__ 
-/dev/sdc1          2048        4095        1024     W95 FAT16 (LBA) +</code> 
-/dev/sdc2            4096    15523839     7759872   83  Linux+На карте 16ГБ получилась такая карта разделов
 +<code> 
 +Device     Boot Start      End  Sectors  Size Id Type 
 +/dev/sdc1      2048    26623    24576   12M  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>
-Для записи разделов на диск нажмите 'w' 
- 
-**Форматирование разделов** 
-  - Форматируем раздел 1 как "FAT" командой "sudo mkfs.vfat -F 32 -n "boot" /dev/sdc1" 
-  - Форматируем раздел 2 как "ext4" командой "sudo mkfs.ext4 -L rootfs /dev/sdc2" 
  
 **Монтирование разделов** **Монтирование разделов**
Строка 145: Строка 167:
 Файловую систему скачаем готовую для SDK (размер архива 2ГБ): Файловую систему скачаем готовую для SDK (размер архива 2ГБ):
 <code> <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+wget http://software-dl.ti.com/processor-sdk-linux/esd/AM437X/05_02_00_10/exports/am437x-evm-linux-sdk-bin-05.02.00.10.tar.xz
 </code> </code>
-В данном архиве содержится несколько файловых систем, включая скомпилированные бинарники u-boot и ядро Linux для отладочных плат от Texas Instruments (для uSomIQ они не подойдут). +Сначала распакуем весь архив: 
- +<code> 
-==== Запись на карту ==== +tar xf am437x-evm-linux-sdk-bin-05.02.00.10.tar.xz 
-**Запись u-boot на карту**+</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', далее выполняем команды: Заходим в директорию u-boot 'u-boot-2018.01+gitAUTOINC+313dcd69c2-g313dcd69c2', далее выполняем команды:
 <code> <code>
Строка 156: Строка 202:
 sudo cp u-boot.img /media/boot sudo cp u-boot.img /media/boot
 </code> </code>
-**Запись ядра, модулей и dtb**+=== Запись ядра, модулей и dtb ===
 Заходим в директорию ядра Linux 'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e', далее выполняем команды: Заходим в директорию ядра Linux 'linux-4.14.79+gitAUTOINC+bde58ab01e-gbde58ab01e', далее выполняем команды:
 <code> <code>
Строка 167: Строка 213:
 sudo umount /dev/sdc1 /dev/sdc2 sudo umount /dev/sdc1 /dev/sdc2
 </code> </code>
-Теперь карту можно извлечь из ПК и загружать с нее модуль uSomIQ AM437x. Загрузка происходит автоматически без дополнительных действий.+Теперь карту можно извлечь из ПК и загружать с нее модуль uSomIQ AM437x. Загрузка происходит автоматически без дополнительных действий. Логин для входа в Linux - root без пароля 
 +===== Автономный старт с NAND ===== 
 +=== Запись загрузчика u-boot === 
 +Запишем идентификатор платы в EEPROM, установленную на плате модуля. Этот шаг необязателен, потому что данная версия u-boot игнорирует пустой или отсутствующий EEPROM, но, всё же, будет выполнять разный сценарий загрузки в зависимости от разных идентификаторов платы. 
 +<code> 
 +=> run eeprom_dump 
 +Setting bus to 0 
 +0000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................ 
 +0010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................ 
 +</code> 
 +Видно, что память EEPROM чистая, если модуль предварительно не прошивали. Запишем идентификатор и посмотрим на изменения: 
 +<code> 
 +=> run eeprom_usomiq 
 +=> run eeprom_dump 
 +Setting bus to 0 
 +0000: aa 55 33 ee 41 4d 34 33 55 53 4f 4d ff ff ff ff    .U3.AM43USOM.... 
 +0010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................ 
 +</code> 
 +Теперь это однозначно uSomIQ AM437x.\\ 
 +Смотрим какие разделы присутствуют на флеш NAND: 
 +<code> 
 +=> mtd 
 + 
 +device nand0 <nand.0>, # parts = 10 
 + #: name                size            offset          mask_flags 
 + 0: NAND.SPL            0x00040000      0x00000000      0 
 + 1: NAND.SPL.backup1    0x00040000      0x00040000      0 
 + 2: NAND.SPL.backup2    0x00040000      0x00080000      0 
 + 3: NAND.SPL.backup3    0x00040000      0x000c0000      0 
 + 4: NAND.u-boot-spl-os  0x00080000      0x00100000      0 
 + 5: NAND.u-boot         0x00100000      0x00180000      0 
 + 6: NAND.u-boot-env     0x00040000      0x00280000      0 
 + 7: NAND.u-boot-env.backup10x00040000   0x002c0000      0 
 + 8: NAND.kernel         0x00700000      0x00300000      0 
 + 9: NAND.file-system    0x1f600000      0x00a00000      0 
 + 
 +active partition: nand0,0 - (NAND.SPL) 0x00040000 @ 0x00000000 
 + 
 +defaults: 
 +mtdids  : nand0=nand.0 
 +mtdparts: mtdparts=nand.0:256k(NAND.SPL),256k(NAND.SPL.backup1),256k(NAND.SPL.backup2),256k(NAND.SPL.backup3),512k(NAND.u-boot-spl-os),1m(NAND.u-boot),256k(NAND.u-boot-env),256k(NAND.u-boot-env.backup1),7m(NAND.kernel),-(NAND.file-system) 
 +</code> 
 +На всякий случай стираем флеш: 
 +<code> 
 +=> nand erase.chip 
 + 
 +NAND erase.chip: device 0 whole chip 
 +Erasing at 0x1ffe0000 -- 100% complete. 
 +OK 
 +</code> 
 +В ходе выполнения стирания могут появляться сообщения о "плохих" блоках. Это особенность NAND флеш и ничего страшного нет, блоки будут помечены как плохие и это никак не повлияет на работу устройства в будущем. 
 +<code> 
 +mmc rescan 
 +load mmc 0 ${loadaddr} MLO 
 +nand write ${loadaddr} NAND.SPL 
 +nand write ${loadaddr} NAND.SPL.backup1 
 +</code> 
 +Запись файла u-boot.img 
 +<code> 
 +load mmc 0 ${loadaddr} u-boot.img 
 +nand write ${loadaddr} NAND.u-boot 
 +</code> 
 +Запись dtb файла 
 +<code> 
 +setenv devtype mmc 
 +run findfdt 
 +run loadfdt 
 +nand write ${fdtaddr} NAND.u-boot-spl-os 
 +</code> 
 +Запись файла ядра 
 +<code> 
 +run loadimage 
 +nand write ${loadaddr} NAND.kernel 
 +</code> 
 +=== Запись файловой системы === 
 +//Предварительно надо взять готовый образ файловой системы из архива am437x-evm-linux-sdk-bin-05.02.00.10, например, маленький образ 'arago-tiny-image-am437x-evm.tar.xz', чтобы он точно уместился во флеш памяти.// 
 + 
 + 
 +теперь набираем команду 'boot' и загружаемся в Linux. Список разделов на флеш памяти можно посмотреть с помощью команды mtdinfo: 
 +<code> 
 +root@am437x-usomiq:~# mtdinfo 
 +Count of MTD devices:           10 
 +Present MTD devices:            mtd0, mtd1, mtd2, mtd3, mtd4, mtd5, mtd6, mtd7, mtd8, mtd9 
 +Sysfs interface supported:      yes 
 +</code> 
 +Видим, что последний раздел **mtd9** - это именно раздел под файловую систему. Теперь, с помощью ubiutils создаем файловую систему на флеш памяти: 
 +<code> 
 +ubiformat /dev/mtd9 -s 2048 -O 2048 
 +ubiattach /dev/ubi_ctrl -m 9 -O 2048 
 +ubimkvol /dev/ubi0 -s 450MiB -N rootfs 
 +mount -t ubifs ubi0:rootfs /mnt 
 +</code> 
 +Директория '/mnt' теперь это отформатированный раздел на флеш памяти NAND. Теперь запишем файловую систему, которую предварительно записали на SD карту в домашнюю директорию пользователя 'root': 
 +<code> 
 +cd /mnt 
 +tar xf ~/arago-tiny-image-am437x-evm.tar.xz 
 +</code> 
 +Теперь можно набрать команду reboot или poweroff, извлечь карту и загружаться непосредственно с модуля без внешнего накопителя. 
wiki/usomiq-am437x-ezsdk.1547477800.txt.gz · Последнее изменение: 2019/01/14 17:56 — maxx