+7(952) 531-56-65

out4ru@gmail.com

Процессорные модули » Статьи » Статья 10. Сборка ФС Debian 10 Buster

Статья 10. Сборка ФС Debian 10 Buster


Описание


В данной статье приведена краткая инструкция по сборке файловой системы Debian (выпуск Buster) для использования ее в модулях и оценочных платах на базе процессоров с архитектурой armhf (iMX6/iMX6ULL/iMX7/iMX8, STM32MP1 и т.п.)
Примечание:
Процессоры MCIMX287CVM4B установленный на модуле O4-iMX287-NANO и NUC980YC установленный на модуле O4-NUC980-NANO имеют архитектуру ARM9 (armel), процессоры семейства iMX6 - MCIMX6Y2CVM08AB установленный на модуле O4-iMX6ULL-NANO/O4-iMX6ULL-SODIMM/EV-iMX6UL-M2 и STM32MP157 на модуле EV-STM32MP157-SODIMM имеют архитектуру ARM Cortex A7 (armhf). 
Именно для архитектуры armhf предназначена данная сборка.

Мы соберем Debian в контексте использования с модулями O4-iMX6UL-NANO/O4-iMX6UL-SODIMM/O4-STM32MP157-SODIMM. Для сборки потребуется компьютерой с ОС Линукс, один-два свободных гигабайта на жестком диске и доступ в сеть интернет. Автор использует ОС Ubuntu 16.04. 
1. Поставим необходимые для сборки пакеты:

out4@out4-lm:/$ sudo apt-get install qemu-user-static debootstrap binfmt-support

2. Создайте папку с любым именем в удобном месте, например MyProject и перейдем в нее:

out4@out4-lm:/$ mkdir /home/USER/MyProject
out4@out4-lm:/$ cd /home/USER/MyProject/

Вместо USER вам надо подставить ваше имя пользователя. Все команды будут выполняться в данном каталоге!

3. Создадим две переменные

out4@out4-lm:~/MyProject$ targetdir=debian-buster
out4@out4-lm:~/MyProject$ distro=buster
Первая переменная - имя каталога в котором будет располагаться собираемая файловая система, вторая переменная - имя релиза, который нам надо собрать - buster (Debian 10). Вместо него можно подставить stretch (Debian 9), jessie (Debian 8) и т.д.
4. Начинаем:

out4@out4-lm:~/MyProject$ mkdir $targetdir
out4@out4-lm:~/MyProject$ sudo debootstrap --arch=armhf --foreign $distro $targetdir/
out4@out4-lm:~/MyProject$ sudo cp /usr/bin/qemu-arm-static $targetdir/usr/bin/
out4@out4-lm:~/MyProject$ sudo cp /etc/resolv.conf $targetdir/etc

Половина дела уже сделана, зайдем в созданную файловую систему с помощью chroot

out4@out4-lm:~/MyProject$ sudo chroot $targetdir

и опять создадим две переменные

I have no name!@out4-lm:/# distro=buster
I have no name!@out4-lm:/# export LANG=C

Пусть вас не пугает имя 'I have no name!' , просто пока в нашей собираемой системе не установлено имя в localhost. Запустим вторую фазу сборки, в которой установятся самые необходимые пакеты в собираемую систему:

I have no name!@out4-lm:/# /debootstrap/debootstrap --second-stage

Данная фаза достаточно длительная, надо подождать 

Обновим файл списка исходников пакетов:

I have no name!@out4-lm:/# cat <<EOT > /etc/apt/apt.conf.d/71-no-recommends
APT::Install-Recommends "0";
APT::Install-Suggests "0";
EOT

Обновимся

I have no name!@out4-lm:/# apt-get update

Установим локали

I have no name!@out4-lm:/# apt-get install locales dialog

Можете выбрать все (all) хотя их установка займет продолжительное время (20-40 минут)
картинка локали

Теперь установим нужные нам пакеты. На все вопросы отвечаем Да (Y). Пока поставим только самые необходимые, после всегда можно будет опять зайти chroot - ом и доставить недостающие. Пока нам надо чтобы появился доступ по ssh и настройка сети

I have no name!@out4-lm:/# apt-get install openssh-server ntpdate net-tools

Если планируется использовать дисплей для отображания информации, сразу поставим xfce

I have no name!@out4-lm:/# apt-get install xfce4 task-xfce-desktop

Для модулей O4-iMX6ULL-NANO/EV-iMX6UL-NANO в этом нет необходимости, так как интерфейс дисплея в них не используется.
В созданной нами системе есть пользователь root, без пароля. Придумаем пароль, поскольку для доступа по ssh он необходим

I have no name!@out4-lm:/# passwd
New password:
Retype new password:
passwd: password updated successfully
I have no name!@out4-lm:/#

На запрос вводим два раза придуманный пароль (в примере используется пароль root), для реальных систем рекомендуется нечто более замысловатое. Обратите внимание, что вводимый ппароль не отображается в терминале в целях безопастности. Настроим сеть

I have no name!@out4-lm:/# echo <<EOT >> /etc/network/interfaces
allow-hotplug eth0
iface eth0 inet dhcp
EOT
I have no name!@out4-lm:/#

Укажем gateway ( у меня он 192.168.1.1, у вас может быть иным)



I have no name!@out4-lm:/# echo "nameserver 8.8.8.8" > /etc/resolv.conf
I have no name!@out4-lm:/# route add default gw 192.168.1.1

Придумаем имя системе, которое будет отображаться в промте терминала 

I have no name!@out4-lm:/# echo debian-buster > /etc/hostname

Откорректируем inittab, добавим имя консольного интерфейса, того процессора, с которым планируется использовать данную файловую систему, в противном случае попасть в консоль будет проблематично. 
Модули O4-iMX6ULL-NANO/O4-iMX6ULL-SODIMM  используют интерфейс ttymxc0 в качестве консоли, в O4-STM32MP157-SODIMM данный интерфейс называется ttySTM0

Для модуля O4-STM32MP157-SODIMM:
I have no name!@out4-lm:/# echo T0:2345:respawn:/sbin/getty -L ttySTM0 115200 vt100 >> /etc/inittab

и ОБЯЗАТЕЛЬНО (иначе залогиниться в консоли будет невозможно)

I have no name!@out4-lm:/# echo ttySTM0 >> /etc/securetty

Для модуля на процессоре MCIMX6Y2CVM08AB:

I have no name!@out4-lm:/# echo T0:2345:respawn:/sbin/getty -L ttymxc0 115200 vt100 >> /etc/inittab

выходим из chroot

I have no name!@out4-lm:/# exit

Удаляем ненужное


out4@out4-lm:~/MyProject$ sudo rm $targetdir/usr/bin/qemu-arm-static

Файловая система готова. Зайдем в нее и проверим ее размер 

out4@out4-lm:~/MyProject$  cd debian-buster/
out4@out4-lm:~/MyProject/debian-buster$ du -h
...
4,0K    ./srv
4,0K    ./boot
368M    .

В зависимости от количества установленных пакетов размер будет меняться. Теперь можно протестировать наш дебиан на реальной плате. Большой размер данной системы предполагает, что она будет располагаться в микросхеме памяти  eMMC или на SD карте. Но, перед тем как переходить к описанию процесса записи на карту или в память модуля, рассмотрим иной способ. 

Как вы помните, в Статье №3 мы рассматривали установку и настройку tftpboot и NFS. Сейчас они нам потребуются. Еще потребуется модуль или плата с уже записанным загрузчиком u-boot и собранные файлы ядра и описания железа (zImage и *.dtb файл). Рассмотрим на примере системы с модулем O4-STM32MP157-SODIMM. Данные модули поставляются полностью записанные, но с файловой системой buildroot. Мы же задействуем наш новособранный Debian. Скопируйте любым удобным вам методом файлы ядра в папку /tftpboot. Можете взять их с данного архива.

Изменим права доступа к ним 

out4@out4-lm:/$ chmod -R 777 /tftpboot/{uImage,zImage,stm32mp157c-mb-sodimm2-rgb.dtb,stm32mp157c-mb-sodimm2-dsi.dtb}

Вы помните, что в Статье №3 мы создали каталог /tftpboot/rootfs/debian.

Теперь можно скопировать собранную нами файловую систему в данную папку (обязательно с sudo), а можно просто создать симлинк (ссылку) на нашу собранную файловую систему. 

out4@out4-lm:/tftpboot$ sudo ln -sf /home/out4/MyProject/debian-buster/ /tftpboot/rootfs/debian-buster

Добавим в файл exports следующую строку

out4@out4-lm:/tftpboot$ vi /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
/tftpboot/rootfs/buildroot         192.168.1.0/24(rw,sync,no_root_squash,subtree_check)
/tftpboot/rootfs/openwrt         192.168.1.0/24(rw,sync,no_root_squash,subtree_check)
/tftpboot/rootfs/debian         192.168.1.0/24(rw,sync,no_root_squash,subtree_check)
/tftpboot/rootfs/debian-buster         192.168.1.0/24(rw,sync,no_root_squash,subtree_check)


и перезапустим сервис

out4@out4-lm:/$ sudo exportfs -a

Готово! Теперь можно запускать плату и монтироваться к нашей файловой системе.

Подразумевается, что вы используете плату O4-STM32MP157-MB совместно с модулем O4-STM32MP157-SODIMM. Дип свитч выбора режима загрузки установите в положение eMMC (0100), подключите кабель Ethernet, переходник O4-FT230 для консоли, запустите PuTTY и подайте питание. В окне PuTTY вы увидите старт загрузчика u-boot, прервите загрузку нажатием комбинации клавиш Crtl-C  и введите следующие команды:


Укажем в переменных окружения адрес serverip
STM32MP> setenv serverip 192.168.1.195

Здесь надо указать IP адрес компьютера на котором вы развернули tftpboot и NFS
Укажем в переменных окружения MAC адрес

STM32MP> setenv ethaddr 00:e0:0c:bc:e5:60

Возможно, в модуле не указан MAC адрес, пропишите его. Командой dhcp в u-boot получим IP адрес для платы

STM32MP> dhcp
ethernet@5800a000 Waiting for PHY auto negotiation to complete. done
BOOTP broadcast 1
BOOTP broadcast 2
BOOTP broadcast 3
BOOTP broadcast 4
DHCP client bound to address 192.168.1.188 (3 ms)
STM32MP>

Надеюсь, в вашей сети есть роутер, который выдаст вам IP адрес для платы. 

STM32MP> tftp $kernel_addr_r uImage
STM32MP> tftp $fdt_addr_r stm32mp157c-mb-sodimm2-rgb.dtb

STM32MP> tftp $kernel_addr_r uImage
Using ethernet@5800a000 device
TFTP from server 192.168.1.195; our IP address is 192.168.1.188
Filename 'uImage'.
Load address: 0xc2000000
Loading: T #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ######################
         582 KiB/s
done
Bytes transferred = 6430816 (622060 hex)
STM32MP> tftp $fdt_addr_r stm32mp157c-mb-sodimm2-rgb.dtb
Using ethernet@5800a000 device
TFTP from server 192.168.1.195; our IP address is 192.168.1.188
Filename 'stm32mp157c-mb-sodimm2-rgb.dtb'.
Load address: 0xc4000000
Loading: ##############
         5.1 MiB/s
done
Bytes transferred = 70173 (1121d hex)
STM32MP>


Загрузим по tftp ядро и dtb файл. kernel_addr_r и fdt_addr_r это переменные u-boot в которых хранятся адреса ОЗУ в которые будут загружены файлы. Хотя для меня более привычные имена это loadaddr для ядра и fdt_addr для dtb файла, но ST назвала их по другому.

Если файлы загрузились по сети, то можно запускать ядро. Но перед этим укажем ядру где ему искать точку монтирования файловой системы:

STM32MP> setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs  nfsroot=192.168.1.195:/tftpboot/rootfs/debian-buster,v3, tcp rw   ip=192.168.1.188'

в строке nfsroot=192.168.1.195:/tftpboot/rootfs/debian-buster замените IP адрес на адрес вашего сервера где находится NFS и если вы назвали во своему папку, то замените debian-buster на ваше название. В ip=192.168.1.188  замените IP адрес на тот что выдал DHCP сервер вашей плате, хотя данный параметр необязателен.
Теперь запускаем ядро:

STM32MP> bootm ${kernel_addr_r} - ${fdt_addr_r}
 
Напомню, что команда bootz запускает ядро в формате zImage, а команда bootm запускает ядро в формате uImage. 

Если все  прошло удачно, то вы увидите лог загрузки ядра, монтирование файловой системы и приглашение для ввода логина/пароля в систему. Логин у нас root, пароль я задавал тоже root, вы укажите свой.

Дальнейшая работа в данной файловой системе ничем не отличается от работы в любом Debian. Сейчас для нас самое главное - работоспособность сети, проверим 

ping 8.8.8.8
 
Пропингуем гугл, чтобы удостоверится в этом. Если сеть работает, используя команду apt-get install можно установить нужные пакеты прямо с платы. Это удобно, чтобы создать необходимый именно вам образ файловой системы, который затем можно превратить в архим или образ или партицию, готовую для записи в память eMMC или на SD карту. Также это удобно для разработки ваших приложений, поскольку исчезает необходимость после добавления/изменения файлов в файловой системе ее перезаписывать на карту памяти или в память модуля. 
Если пинг не проходит

dhclient eth0


Модуль O4-STM32MP157-SODIMM имеет RGB интерфейс для подключения LCD дисплеев с паралелльной шиной и DSI интерфейс для подключения MIPI дисплеев. Предположим, что у вас подключен дисплей O4-LCD5-800*480 с шиной RGB24 и емкостной сенсорной панелью. Давайте устновим графическую надстройку xfce и посмотрим на графческий дебиан. 

Выполняем 

apt-get install xfce4
reboot

Мы опять попадаем в u-boot. Прерываем загрузку нажатием клавиш Crtl-C. Чтобы опять не вводить все те строки, что писали при первом запуске, автоматизируем данный процесс:

STM32MP> setenv ethaddr 00:e0:0c:bc:e5:60;
STM32MP> setenv serverip 192.168.1.195;
STM32MP> setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs  nfsroot=192.168.1.195:/tftpboot/rootfs/debian-buster,v3, tcp rw '
STM32MP> setenv bootcmd 'dhcp;tftp $kernel_addr_r uImage;tftp $fdt_addr_r stm32mp157c-mb-sodimm2-rgb.dtb;bootm ${kernel_addr_r} - ${fdt_addr_r}'
STM32MP> saveenv

Только измените IP адрес сервера и название каталога с файловой системой на свои. Теперь нажмем кнопку Reset на плате. Без нашего участия u-boot должен загрузить ядро по сети , запустить его, а оно в свою очередь примонтироваться к файловой системе. На экране мы увидим работу графической подсистемы xfce, если подключить клавиатуру, то можно залогиниться. Роль мыши будет исполнять сенсорная панель экрана. 

Если вы используете дипслей с MIPI интерфейсом, то при загрузке ядра нужен файл stm32mp157c-mb-sodimm2-dsi.dtb

Для плат с модулем на базе процессора iMX6ULL все выглядит практически также. Конечно ядро и dtb файл должен быть именно для данного процессора. Хотя не совсем. Ядро может быть тоже, а вот dtb файл обязательно должен быть под данный модуль)



Что же, Debian мы собрали и запустили, задача решена. Вы можете устанавливать необходимые пакеты, писать свои приложения, до тех пор пока не получите задуманное и не решите перенести эту файловую систему на сам модуль в микросхему памяти eMMC. Можно и на SD карту, но крайне рекомендуется этого не делать, по крайней мере в реальных устройствах. В порядке эксперимента или демонстрации можно, но в конечном изделии файловую систему лучше расположить в eMMC.


Теперь рассмотрим задачу о записи файловой системы в сам модуль в микросхему eMMC.

Для записи файлов в системы на базе процессора STM32MP1 компания ST Microelectronic предоставляет утилиту STM32Cube Programmer, а для записи iMX6ULL компания NXP распространяет утилиту MFGTool. 

Что потребуется для STM32MP1:
1. На компьютере с Линукс, где вы собирали файловую систему Debian загрузить и установить STM32Cube Programmer
2. У вас должны быть собранные бинарные файлы загрузчика u-boot, загрузчика tf-a, ядра zImage, файла описания железа dtb и наша папка с собранной файловой системой Debian Buster. 
Загрузим архив с утилитой программатора в каталог MyProject

Перейдем в 

out4@out4-lm:/$ cd /home/USER/MyProject/

Все команды мы выполняем именно отсюда! Разархивируем 

out4@out4-lm:~/MyProject$ unzip en.stm32cubeprog_v2-4-0.zip
Archive:  en.stm32cubeprog_v2-4-0.zip
  inflating: SetupSTM32CubeProgrammer-2.4.0.exe
  inflating: SetupSTM32CubeProgrammer-2.4.0.linux
   creating: SetupSTM32CubeProgrammer-2.4.0.app/
   creating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/
   creating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/MacOs/
  inflating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/MacOs/SetupSTM32CubeProgrammer-2_4_0_macos
   creating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/Resources/
  inflating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/Resources/stm32cubeprogrammer.icns
  inflating: SetupSTM32CubeProgrammer-2.4.0.app/Contents/Info.plist
out4@out4-lm:~/MyProject$

Запускаем инсталлятор

out4@out4-lm:~/MyProject$ ./SetupSTM32CubeProgrammer-2.4.0.linux
И отвечаем на кучу вопросов по ходу установки.  На запрос о пути установки лучше ничего не менять, принять предложенный путь

Select the installation path:  [/home/out4/STMicroelectronics/STM32Cube/STM32CubeProgrammer]

Все предложенные pack - и лучше установить. Вот так выглядит мой лог установки



Для записи в микросхему eMMC нам потребуются следующие файлы:
  • tf-a-stm32mp157c-mb-sodimm2.stm32 (первоначальный трастовый загрузчик)
  • u-boot.stm32 (загрузчик)
  • zImage (ядро)
  • stm32mp157c-mb-sodimm2-rgb.dtb или stm32mp157c-mb-sodimm2-dsi.dtb (в зависимости от используемого дисплея RGB/DSI)
  • Файловая система Debian  в виде файла партиции ext4
Первые четыре файла (загрузчики, ядро и dtb) у нас собираются с помощью buildroot, как описано в статье №6. Если вы их не собирали, то можно взять их из этого архива. Партицию с файловой системой сейчас создадим.
Но сначала, скопируем в нашу собранную файловую систему ядро и dtb файл.

Создадим там еще один каталог emmc, куда скопируем бинарные файлы (zImage, stm32mp157c-mb-sodimm2-rgb.dtb, tf-a-stm32mp157c-mb-sodimm2.stm32, u-boot.stm32) любым удобным способом.

out4@out4-lm:~/MyProject$ mkdir emmc

Файлы ядра разместим прямо в файловой системе. Для этого создадим в ней папку /boot

out4@out4-lm:~/MyProject$ mkdir debian-buster/boot

Скопируем в нее файлы ядра

out4@out4-lm:~/MyProject$ sudo cp emmc/zImage debian-buster/bootout4@out4-lm:~/MyProject$ sudo cp emmc/stm32mp157c-mb-sodimm2-rgb.dtb debian-buster/boot[/code]
Теперь создадим файл o4-stm32mp157-sodimm-emmc-debian.tsv, в котором можно посмотреть структуру того как будут расположены данные в eMMC памяти

[/code][/code][/code][/code]
out4@out4-lm:~/MyProject$ cat <<EOT > o4-stm32mp157-sodimm-emmc-debian.tsv
#Opt    Id      Name    Type    IP      Offset  Binary
-       0x01    fsbl1-boot      Binary          none    0x0             emmc/tf-a-stm32mp157c-mb-sodimm2.stm32
-       0x03    ssbl-boot       Binary          none    0x0             emmc/u-boot.stm32
P       0x04    fsbl1           Binary          mmc1    boot1           emmc/tf-a-stm32mp157c-mb-sodimm2.stm32
P       0x05    fsbl2           Binary          mmc1    boot2           emmc/tf-a-stm32mp157c-mb-sodimm2.stm32
P       0x06    ssbl            Binary          mmc1    0x00080000      emmc/u-boot.stm32
P       0x23    rootfs          FileSystem      mmc1    0x00280000      emmc/debian10-armhf.ext4
EOT



и создадим скрипт, который будет вызывать STM32 Cube Programmer и записывать данные в память eMMC.


out4@out4-lm:~/MyProject$ cat <<EOT > flash-debian10-emmc.sh
sudo ~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/STM32_Programmer_CLI -c port=usb1 -w o4-stm32mp157-sodimm-emmc-debian.tsv
EOT



сделаем данный скрипт исполняемым

out4@out4-lm:~/MyProject$  chmod +x flash-debian10-emmc.sh




Теперь у нас есть практически все необходимое для записи в память, кроме образа debian10-stm32.ext4, который нужен программатору для записи. Поэтому, из собранной и настроенной вами файловой системы, в которой уже установлены все нужные пакеты и программы, скрипты, которые вы написали для своего устройства сделаем образ. Предположим, что нам достаточно объема 1 Гигабайт для файловой системы.

Создаем файл размером 1 Гигабайт

out4@out4-lm:~/MyProject$ dd if=/dev/zero of=debian10-stm32.ext4 bs=100M count=10
10+0 records in
10+0 records out
1048576000 bytes (1.0 GB, 1000 MiB) copied, 3.98328 s, 263 MB/s
out4@out4-lm:~/MyProject$



Проверим его размер 

out4@out4-lm:~/MyProject$ du -sh debian10-stm32.ext4
1001M   debian10-stm32.ext4
out4@out4-lm:~/MyProject$



Инииализируем и отформатируем его, создадим промежуточную папку и примонтируем

out4@out4-lm:~/MyProject$ sudo losetup -fP debian10-stm32.ext4
out4@out4-lm:~/MyProject$ mkfs.ext4 debian10-stm32.ext4
mke2fs 1.44.1 (24-Mar-2018)
Discarding device blocks: done
Creating filesystem with 256000 4k blocks and 64000 inodes
Filesystem UUID: 35de850f-488f-4da7-ac5b-0c7d589d56e7
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
out4@out4-lm:~/MyProject$ mkdir loopfs
out4@out4-lm:~/MyProject$ sudo mount -o loop /dev/loop0 loopfs
out4@out4-lm:~/MyProject$ df -hP loopfs/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop1      969M  2.5M  900M   1% /home/out4/MyProject/loopfs
out4@out4-lm:~/MyProject$




В промежуточный каталог loopfs скопируем все содержимое debian-buster

out4@out4-lm:~/MyProject$ sudo cp -fr debian-buster/* loopfs/
out4@out4-lm:~/MyProject$ sync




Отмонтируем и удаляем промежуточную папку

[/code]
out4@out4-lm:~/MyProject$ sudo umount loopfs
out4@out4-lm:~/MyProject$ rm -fr loopf





Теперь у наc есть образ файловой системы debian10-stm32.ext4, перенесем его к нашим файлам

mv debian10-stm32.ext4  emmc/





Устанавливаем Дип переключатель режима выбора источника загрузки в USB (0000), подключаем кабель USB A-A в порт USB0 платы (верхний разъем платы O4-STM32MP157-MB) и запускаем скрипт 

./flash-debian10-emmc.sh





И ждем 20-30 минут. Утилита STM32Cube Programmer также есть для ОС Windows, но там процесс записи медленней раза в 2 чем в Линукс. После окончания процесса записи отключаем плату, устанавливаем переключатель в положению eMMC (0100) и нажимаем кнопку сброс.
Теперь, как и в случае с настройкой загрузки по tftp в u-boot надо настроить загрузки из eMMC

STM32MP> setenv bootargs 'console=ttySTM0,115200 root=/dev/mmcblk1p2   rw'
STM32MP> setenv mmc_boot 'mmc dev 1;ext4load mmc 1:2 $kernel_addr_r /boot/zImage;ext4load mmc 1:2 $fdt_addr_r /boot/stm32mp157c-mb-sodimm2-rgb.dtb;bootz ${kernel_addr_r} - ${fdt_addr_r};'
STM32MP> saveenv

STM32MP> res





И снова нажимаем кнопку Reset, теперь система должна полностью загрузиться из eMMC.

Для модулей на базе процессора iMX6ULL (O4-iMX6ULL-NANO/O4-iMX6uLL-SODIMM) все немного проще. Необходимо создать архив tar.bz2 с нашей файловой системой

[/code]
out4@out4-lm:~/MyProject/debian-buster$ sudo tar cjvf rootfs_debian10.tar.bz2 ./







копируем архив с файловой системой (rootfs_debian.tar.bz2), загрузчик u-boot.imx, файлы ядра zImage и o4-imx6ull-sodimm.dtb на флешку и несем к компьютеру с Windows. Там скачиваем архив mfgtool-o4.rar, распаковываем его в удобном месте, и копируем файлы с флешки (zImage, o4-imx6ull-sodimm.dtb, u-boot.imx, rootfs_debian10.tar.bz2) в папку Mfgtool\Profiles\Linux\OS Firmware\files\ , подключаем плату кабелем USB к компьютеру и запускаем скрипт Mfgtool\o4-imx6ull-sodimm-debian.vbs. Ждем 30-40 минут. Если имена ваших файлов не совпадают с вышеприведенными, необходимо открыть в любом текстовом редакторе файл o4-imx6ull-sodimm-debian.vbs  и откорректировать имена файлов. 

Файлы для скачивания:
Архив для модуля O4-STM32MP157-SODIMM (с файловой системой Debian Buster)
Архив для модуля O4-STM32MP157-SODIMM (без файловой системы, только файлы ядра и загрузчика)
Архив для модуля O4-iMX6ULL-SODIMM (с файловой системой Debian Buster)
Архив для модуля O4-iMX6ULL-SODIMM (без файловой системы, только файлы ядра и загрузчика)
Утилита MFGTool (Windows) для программирования модулей O4-iMX6ULL-SODIMM/EV-iMX6UL-NANO 
Утилита STM32Cube (Windows) для программирования модулей O4-STM32MP157-SODIMM

















Быстрая доставка

Безопасная оплата

Гарантия качества