Перенос ОС linux с SD карты на микросхему eMMC

встраиваемые модели

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение Olej » 05 сен 2019, 00:17

Забегая вперёд...
Olej писал(а):

Код: Выделить всё

# mkdir /mnt/boot

# mount -tvfat /dev/mmcblk1p1 /mnt/boot
 
# ls -la /mnt/boot
...
-rwxr-xr-x    1 root     root           301 Jun 29  2018 boot.scr
...
-rwxr-xr-x    1 root     root       3572480 Jun 29  2018 zImage
Нас здесь должен интересовать файл параметров boot.scr, который использует U-boot при загрузке, или, точнее, исходный текстовый файл boot.cmd из которого генерируется (подписывается) boot.scr ... вот как у меня это было при сборке образа для одного из ARM одноплатников:

Код: Выделить всё

[olej@xenix F809-A3B8]$ mkimage -C none -A arm -T script -d boot1.cmd boot.scr
Image Name:
Created:      Mon Jul  2 11:24:58 2018
Image Type:   ARM Linux Script (uncompressed)
Data Size:    250 Bytes = 0.24 KiB = 0.00 MiB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 242 Bytes = 0.24 KiB = 0.00 MiB
P.S. Сами имена файлов, типа boot.scr, как я видел в разных моделях ARM, могут радикально различаться, в зависимости от того, на базе какого дистрибутива Linux и каким образом собирался образ системы.

mkimage на этом вашем компьютере возможно нужно найти и доустановить (это, как и генерацию mkimage можно делать на любом инструментальном компьютере, в том числе и x86 ... а затем перенести сгенерированный boot.scr на ARM по сети):

Код: Выделить всё

[olej@xenix F809-A3B8]$ sudo dnf install uboot-tool
...
У меня при показанной сборке этот boot1.cmd имел содержимое:

Код: Выделить всё

setenv fdt_high ffffffff

setenv bootargs console=tty1 console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait

fatload mmc 0 $kernel_addr_r zImage
fatload mmc 0 $fdt_addr_r sun8i-h3-orangepi-one.dtb

bootz $kernel_addr_r - $fdt_addr_r
Вот это хотелось бы просмотреть (всю цепочку).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение Olej » 05 сен 2019, 12:14

Вот ещё одна очень важная вещь, которую мы первоначально упустили из виду в вашей ситуации:
Olej писал(а): 4. Вот ваша eMMC с которой (якобы ... это нужно проверить) происходит загрузка Linux (я всё это вытягиваю из вашего файла):

Код: Выделить всё

# blkid
/dev/mmcblk0: PTUUID="7385b987" PTTYPE="dos"
/dev/mmcblk0p1: SEC_TYPE="msdos" UUID="AF48-8A11" TYPE="vfat" PARTUUID="7385b987-01"
/dev/mmcblk0p2: UUID="9266496a-5dbe-4cd1-a3a4-03627e66a324" TYPE="ext4" PARTUUID="7385b987-02"
/dev/mmcblk1: PTTYPE="dos"
/dev/mmcblk1p1: SEC_TYPE="msdos" UUID="AF48-8A11" TYPE="vfat"
/dev/mmcblk1p2: UUID="9266496a-5dbe-4cd1-a3a4-03627e66a324" TYPE="ext4"
/dev/mmcblk1boot1: SEC_TYPE="msdos" UUID="AF48-8A11" TYPE="vfat"
/dev/mmcblk1boot0: SEC_TYPE="msdos" UUID="AF48-8A11" TYPE="vfat"
При копировании утилитой dd образа диска разделы копируются со старыми UUID. При этом при одновременном присутствии SD и eMMC при загрузке у вас возникают дубликаты UUID в одной системе, что совершенно недопустимо, система при ссылках на устройства по UUID и по имени (/dev/mmcblk) просто сойдёт с ума!

Про изменения UUID (и меток томов) см. Как изменить UUID раздела и его метку.
Требуемые для этого программы/пакеты могут быть не установлены по умолчанию и их нужно будет доустанавливать. Вот как это выглядит в Debian 10:

Код: Выделить всё

olej@ACER:~$ apt-file search /usr/bin/uuid
libossp-uuid-dev: /usr/bin/uuid-config    
libuuidm-ocaml-dev: /usr/bin/uuidtrip
uuid: /usr/bin/uuid
uuid-runtime: /usr/bin/uuidgen
uuid-runtime: /usr/bin/uuidparse
uuidcdef: /usr/bin/uuidcdef

Код: Выделить всё

olej@ACER:~$ apt-file search bin/tune2fs
android-sdk: /usr/lib/android-sdk/tools/bin/tune2fs
e2fsprogs: /sbin/tune2fs

Код: Выделить всё

olej@ACER:~$ apt-file search bin/e2label
e2fsprogs: /sbin/e2label                  

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение Olej » 05 сен 2019, 12:49

kAndrew писал(а): Помогите пожалуйста советом как правильно перенести ОС Linux с SD карты на внутреннюю микросхему eMMC.
ОС собрана и успешно работает с SD карты.
При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.
1. Здесь нужно бы определиться вам ... и нам показать:
- текущий ваш Linux, который вас устраивает, собран вашей фирмой самостоятельно, я так понимаю, с помощью BuildRoot ...
- но BuildRoot всегда, в начале сборки, требует определить дистрибутив, из которого производится сборка
Какой у вас?
Покажите:

Код: Выделить всё

$ lsb_release -a
...
$ uname -a
...

Код: Выделить всё

olej@ACER:~$ which dpkg apt
/usr/bin/dpkg
/usr/bin/apt
P.S. Про BuildRoot подробнее см. BuildRoot, Linux для embedded применений

2. Такие одноплатные SoC - они предназначены для автономной работы... Но на этапе отработки решений возникает необходимость (пробовать) устанавливать дополнительные утилиты, пакеты в системе (с помощью apt, apt-get, ...). Для того нужно подключение через RG-45 к локальной сети и Интернет, к репозиториям дистрибутива. (Можно, конечно, и скачивать отдельные пакеты .deb из репозиториев и автономно устанавливать их на SoC с помощью dpkg ... но это в 3-4 более трудоёмко по времени).
Поэтому подключайте (кабель RG-45) и проверяйте:

Код: Выделить всё

$ /sbin/ifconfig -a
...
$ ping 8.8.8.8
...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение Olej » 05 сен 2019, 13:31

kAndrew писал(а): При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.
Как в вашей модели определяется устройство или приоритетность загрузки?
Я видел, например, с ARM одноплатниках:
- DragonBoard 410c : выбор SD/eMMC определяется установкой одного из джамперов на плате;
- Orange Pi PC+ : если вставлена SD - грузится с SD, если нет - грузится с eMMC;

Как у вас?

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 11:12

Olej писал(а):
Olej писал(а): (вообще то мне не понятно: почему вы после копирования не расширили размер раздела /dev/mmcblk1p2 до поного размера eMMC 3.6 GiB?)
Только расширить нужно правильно.
И не забыть при этом создать хоть какой-то минимальный swap-раздел!
Покажите: Про необходимость swap + его размер - см. swap
Раздел не расширяли, так как это не самая большая проблема, пока не решён вопрос с загрузкой из eMMC.

Вот вывод free:

Код: Выделить всё

# free
             total       used       free     shared    buffers     cached
Mem:        504600      85964     418636         20       1388       6676
-/+ buffers/cache:      77900     426700
Swap:            0          0          0

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 11:36

Olej писал(а):
kAndrew писал(а): ОС собрана и успешно работает с SD карты.
При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.
информация о файловой системе в прикрепленном файле.
Показывать информацию в файле - неудачная идея, лучше вывод команд показывать явно, копируя с терминала под BBCODE <code> (4-й по порядку значок во 2-й строке значков над окном редактирования ответа).

Тема интересная! ;-)
Но, начнём разбираться по порядку...
Итак, преамбула:

1. компьютер, как я понимаю, ARM, загрузка через U-boot...

2. как я предполагаю, у вас через UART подключен внешний компьютер-терминал, на котором вы можете покомандно наблюдать загрузку начиная с U-boot? так как это описано рядом в теме загрузчик U-boot и сериальная отладка... Можете посмотреть и скопировать с внешнего терминала сообщения загрузки (как это показано в теме по ссылке)?

3. SD карата у вас (с которой переносилась система): /dev/mmcblk0. eMMC внутренняя память (на которую переносилась система): dev/mmcblk1.

Код: Выделить всё

# fdisk -l /dev/mmcblk1
Disk /dev/mmcblk1: 3.6 GiB, 3867148288 bytes, 7553024 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
Disklabel type: dos
Disk identifier: 0x00000000

Device         Boot Start    End Sectors   Size Id Type
/dev/mmcblk1p1 *    16384  49151   32768    16M  c W95 FAT32 (LBA)
/dev/mmcblk1p2      49152 910975  861824 420.8M 83 Linux
Так?
Перенос делался побайтным копированием (там есть некоторые детали, которые пока не затрагиваем), типа такого:

Код: Выделить всё

# dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=1M status=progress conv=fsync count=418
...
# sync
(вообще то мне не понятно: почему вы после копирования не расширили размер раздела /dev/mmcblk1p2 до поного размера eMMC 3.6 GiB?)
1. Одноплатник на основе i.MX_6UL_EVK.
ARM, Cortex-A7.

2. Основная работа с одноплатником производится по ssh. Вывод лога загрузки ОС в uart сейчас отключен.
Вот лог загрузки UBoot с sd-карты (отучить загрузчик от uart мы пока не сумели):

Код: Выделить всё

U-Boot 2016.03 (Sep 05 2019 - 16:57:33 +0300)

CPU:   Freescale i.MX6UL rev1.2 528 MHz (running at 396 MHz)
CPU:   Industrial temperature grade (-40C to 105C) at 51C
Reset cause: POR
Board: MX6UL 14x14 EVK
I2C:   ready
DRAM:  512 MiB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1
*** Warning - bad CRC, using default environment

unsupported panel TFT43AB
In:    serial
Out:   serial
Err:   serial
switch to partitions #0, OK
mmc0 is current device
Net:   FEC1
Error: FEC1 address not set.

Normal Boot
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
switch to partitions #0, OK
mmc0 is current device
reading boot.scr
** Unable to read file boot.scr **
reading zImage
6596224 bytes read in 304 ms (20.7 MiB/s)
Booting from mmc ...
reading imx6ul-14x14-evk.dtb
34736 bytes read in 20 ms (1.7 MiB/s)
Kernel image @ 0x80800000 [ 0x000000 - 0x64a680 ]
## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 83000000, end 8300b7af
Modify /soc/aips-bus@02000000/bee@02044000:status disabled
ft_system_setup for mx6

Starting kernel ...


3.
3. SD карата у вас (с которой переносилась система): /dev/mmcblk0. eMMC внутренняя память (на которую переносилась система): dev/mmcblk1. ..... Так?
Да.
Перенос делался побайтным копированием (там есть некоторые детали, которые пока не затрагиваем), типа такого:
Нет. На eMMC записывался образ sdcard.img, который генерирует buildroot в результате сборки. Этот же образ записывается на sd-карту, с которой плата грузится и работает.

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 11:41

Olej писал(а):
Olej писал(а): 1. компьютер, как я понимаю, ARM, загрузка через U-boot...
Я работал только штатные, серийные, ARM одноплатники ограниченной номенклатуры: Rapsberry Pi 2, Orange Pi One, Dragon Board 410c.
Во всех этих линиях одноплатников, там где есть eMMC, то откуда грузиться определяется аппаратно, положением джампера, перемычки на плате.
Как это у вас?

И ещё...
Какой у вас установлен вариант дистрибутива Linux?

Код: Выделить всё

$ lsb_release -a
...
Потому что формат вывода df отличается у вас от клонов Debian, которые я видел:

Код: Выделить всё

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               428959    380737     22581  94% /
devtmpfs                 87948         0     87948   0% /dev
tmpfs                   252300         0    252300   0% /dev/shm
tmpfs                   252300         4    252296   0% /tmp
tmpfs                   252300        16    252284   0% /run
Или это образ самостоятельно построенный BuildRoot или подобными инструментами?
P.S. Попутно ... у вас израсходовано почти все пространство на разделе /dev/root - 94%. Это очень много. Поэтому расширять раздел нужно (до 3.6Gb - размер swap)!
Образ собран с помощью buildroot.
Ядро взято из репозитория Freescale.

Код: Выделить всё

# uname -a
Linux buildroot 4.9.11 #14 SMP PREEMPT Thu Aug 22 10:50:05 EEST 2019 armv7l GNU/Linux
Утилиты
lsb_release
у нас нет.

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 12:03

Olej писал(а):
Olej писал(а): Потому что формат вывода df отличается у вас от клонов Debian, которые я видел:

Код: Выделить всё

# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               428959    380737     22581  94% /
devtmpfs                 87948         0     87948   0% /dev
tmpfs                   252300         0    252300   0% /dev/shm
tmpfs                   252300         4    252296   0% /tmp
tmpfs                   252300        16    252284   0% /run
Нужно бы посмотреть что там к вас в загрузочном /boot разделе /dev/mmcblk1p1 (FAT).
Но поскольку он в вашей системе/дистрибутиве не монтируется после загрузки (я и в других некоторых ARM видел), для этого нужно это сделать вручную, как-то так:

Код: Выделить всё

# mkdir /mnt/boot

# mount -tvfat /dev/mmcblk1p1 /mnt/boot
 
# ls -la /mnt/boot
...
-rwxr-xr-x    1 root     root           301 Jun 29  2018 boot.scr
...
-rwxr-xr-x    1 root     root       3572480 Jun 29  2018 zImage
И смотреть что там из файлов...
eMMC:

Код: Выделить всё

# mount -tvfat /dev/mmcblk1p1 /mnt
# ls -ls /mnt
total 6488
    40 -rwxr-xr-x    1 root     root         34736 Jan  9 21:09 imx6ul-14x14-evk.dtb
  6448 -rwxr-xr-x    1 root     root       6596224 Jan  9 21:08 zImage
SD-карта:

Код: Выделить всё

# mount -tvfat /dev/mmcblk0p1 /mnt
# ls -ls /mnt
total 6476
    34 -rwxr-xr-x    1 root     root         34736 Sep  6  2019 imx6ul-14x14-evk.dtb
  6442 -rwxr-xr-x    1 root     root       6596224 Sep  6  2019 zImage

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 12:20

Хочу заметить, что наш Buildroot генерирует следующие файлы:

Код: Выделить всё

simzov@ubuntu:~/buildroot-2017.02.7/output/images$ ls -ls
total 1234616
  6544 -rw-r--r-- 1 simzov simzov  16777216 Sep  6 08:57 boot.vfat
    36 -rw-r--r-- 1 simzov simzov     34736 Aug 27 09:02 imx6ul-14x14-evk.dtb
382648 -rw-r--r-- 1 simzov simzov 442260480 Sep  6 08:57 rootfs.ext2
     0 lrwxrwxrwx 1 simzov simzov        11 Sep  6 08:57 rootfs.ext4 -> rootfs.ext2
381264 -rw-r--r-- 1 simzov simzov 390410240 Sep  6 08:57 rootfs.tar
456476 -rw-r--r-- 1 simzov simzov 467426304 Sep  6 08:57 sdcard.img
   400 -rwxrwxrwx 1 simzov simzov    406600 Sep  5 16:57 u-boot.bin
   400 -rw-r--r-- 1 simzov simzov    406664 Sep  5 16:57 u-boot.img
   404 -rwxrwxrwx 1 simzov simzov    412672 Sep  5 16:57 u-boot.imx
  6444 -rw-r--r-- 1 simzov simzov   6596224 Aug 27 09:02 zImage
SPL файлов нет. По информации, которую мне удалось найти, Freescale для iMX6 не поддерживает SPL (первый ответ в теме).

Так же, наша микросхема eMMC "из коробки" содержит несколько разделов:

Код: Выделить всё

# ls /dev | grep mmcblk1
mmcblk1
mmcblk1boot0
mmcblk1boot1
mmcblk1p1
mmcblk1p2
mmcblk1rpmb


Разделы

Код: Выделить всё

mmcblk1p1
mmcblk1p2
созданы в результате записи образа. Изначально их нет.

simzov
Интересующийся
Сообщения: 8
Зарегистрирован: 04 сен 2019, 13:35
Контактная информация:

Re: Перенос ОС linux с SD карты на микросхему eMMC

Непрочитанное сообщение simzov » 06 сен 2019, 12:27

Olej писал(а):
kAndrew писал(а): При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.
Как в вашей модели определяется устройство или приоритетность загрузки?
Я видел, например, с ARM одноплатниках:
- DragonBoard 410c : выбор SD/eMMC определяется установкой одного из джамперов на плате;
- Orange Pi PC+ : если вставлена SD - грузится с SD, если нет - грузится с eMMC;

Как у вас?
С помощью DIP-переключателя.
Его описание в приложенном файле, 9 страница, DIP Switch Configuration.
Вложения
i.MX_6UL_EVK_QSG.pdf
(240.34 КБ) 111 скачиваний

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя