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

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

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

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

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

Непрочитанное сообщение kAndrew » 04 сен 2019, 14:27

Добрый день, уважаемые форумчане.

Помогите пожалуйста советом как правильно перенести ОС Linux с SD карты на внутреннюю микросхему eMMC.

ОС собрана и успешно работает с SD карты.
При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.

информация о файловой системе в прикрепленном файле.
Вложения
cmd_output.txt
(4.23 КБ) 130 скачиваний

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

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

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

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?)

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

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

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

kAndrew писал(а):информация о файловой системе в прикрепленном файле.
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"

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

# lsblk
NAME         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
mmcblk0      179:0    0  14.7G  0 disk 
|-mmcblk0p1  179:1    0    16M  0 part 
`-mmcblk0p2  179:2    0  14.7G  0 part 
mmcblk1      179:16   0   3.6G  0 disk 
|-mmcblk1p1  179:17   0    16M  0 part 
`-mmcblk1p2  179:18   0 420.8M  0 part /
mmcblk1boot0 179:24   0    16M  1 disk 
mmcblk1boot1 179:32   0    16M  1 disk 
mmcblk1rpmb  179:40   0   128K  0 disk 

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

# mount | grep /dev/mmc
/dev/mmcblk1p2 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)

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

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

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

kAndrew писал(а): При попытке скопировать образ SD карты на внутреннюю eMMC ОС не загружается.
Меня смущает (может это и правильно?) что:
- копирование с SD на eMMC делалось побайтно командой dd ...
- сравнение начального (загрузочного, MBR) сектора на /dev/mmcblk0 и /dev/mmcblk1 даёт различие (в области где находится загрузчик MBR):

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

# hexdump -n512 /dev/mmcblk0
0000000 b8fa 1000 d08e 00bc b8b0 0000 d88e c08e
0000010 befb 7c00 00bf b906 0200 a4f3 21ea 0006
0000020 be00 07be 0438 0b75 c683 8110 fefe 7507
0000030 ebf3 b416 b002 bb01 7c00 80b2 748a 8b01
0000040 024c 13cd 00ea 007c eb00 00fe 0000 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
*
00001b0 0000 0000 0000 0000 b987 7385 0000 0580
00001c0 0105 0f0c 030c 4000 0000 8000 0000 0f00
00001d0 030d fe83 ffff c000 0000 a000 01d6 0000
00001e0 0000 0000 0000 0000 0000 0000 0000 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200

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

# hexdump -n512 /dev/mmcblk1
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
00001b0 0000 0000 0000 0000 0000 0000 0000 0580
00001c0 0105 0f0c 030c 4000 0000 8000 0000 0f00
00001d0 030d b383 383b c000 0000 2680 000d 0000
00001e0 0000 0000 0000 0000 0000 0000 0000 0000
00001f0 0000 0000 0000 0000 0000 0000 0000 aa55
0000200
Мне это непонятно...
Там вообще есть загрузчик?

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

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

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

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

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

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

Непрочитанное сообщение Olej » 04 сен 2019, 15:29

Olej писал(а): Мне это непонятно...
Там вообще есть загрузчик?
Не попробовать ли вам принудительно переписать 0 сектор MBR с SD на eMMC?
Что-то типа:

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

# dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=512 count=1 conv=fsync 

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

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

Непрочитанное сообщение Olej » 04 сен 2019, 15:43

Olej писал(а): Перенос делался побайтным копированием (там есть некоторые детали, которые пока не затрагиваем), типа такого:

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

# dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=1M status=progress conv=fsync count=418
...
# sync
Перед копированием (переносом) образов дисков между носителями нужно, часто, привести диски и их файловые системы в соответствие по размеру - нельзя без подготовки копировать диск размером 16Gb на диск размером 4Gb.
По поводу корректных изменений размеров дисковых разделов + их файловой системы ext2 (а это 2 разных вещи) - можете посмотреть в соседней теме: Orange Pi.

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

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

Непрочитанное сообщение Olej » 04 сен 2019, 15:52

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)!

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

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

Непрочитанное сообщение Olej » 04 сен 2019, 19:40

Важно!
Для того, что бы система грузилась и работала с eMMC я руками переключаю в UBOOT'е номер устройства, с которого производить загрузку.
Как это делалось?
Подробно...

P.S. Я как-то, сразу, упустил, что речь идёт о ARM архитектуре, и здесь нет BIOS для загрузки, и в начальную область любого носителя (SD, eMMC) должен быть правильно записан загрузчик U-boot.
(Мне, правда не очевидно и не понятно, с чего бы область загрузчика, предшествующая разделам носителя, будут различаться для SD и eMMC?).

По поводу записи U-boot в ARM на носители вот такие ссылки (может пригодиться дальше):
загрузчик
Сборка загрузчика UBOOT
How to make a bootable sunxi SD-card
A10 & A13 boots the SPL loader from block 8. This then loads actual u-boot from block 40 onwards, counted in 1KB blocks. Replace /dev/sdX with the device name of your media

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

dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
or if you prefer to install the components separately

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

dd if=spl/sunxi-spl.bin of=/dev/sdX bs=1024 seek=8
dd if=u-boot.img of=/dev/sdX bs=1024 seek=40
Это как образец для одной из возможных ARM архитектуры.

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

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

Непрочитанное сообщение Olej » 04 сен 2019, 21:39

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
И смотреть что там из файлов...

Ответить

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

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

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