Найти в Дзене
Forlinx Embedded

Как добавить пользовательские файлы в образ Buildroot на OK3562 с Linux 5.10.198

В этой статье представлен метод включения файлов, программ, приложений, библиотек и т. д., необходимых для пользовательских продуктов, в исходный код и последующей компиляции их в образ. Это позволяет избежать необходимости отдельного копирования программ на плату разработки после прошивки образа. Пояснение пути размещения: Пользовательские программы можно скопировать в каталог /OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/usr/bin. Файлы конфигурации можно скопировать в каталог /OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/etc. Файлы библиотеки можно скопировать в каталог /OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/lib. Пользователи также могут создавать свои собственные папки в /OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/ каталог для хранения своих файлов. Возьмем пример копирования сжатого пакета. aarch64buildrootlinuxgnu_sdkbuildroot.tar.gz: (1) Скопируйте файл по указанному пути. Создайте каталог с именем test по указанном
Оглавление

1. Введение

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

2. Методы модификации

2.1 Метод 1: непосредственное добавление в исходный код для компиляции

Пояснение пути размещения:

Пользовательские программы можно скопировать в каталог

/OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/usr/bin.

Файлы конфигурации можно скопировать в каталог

/OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/etc.

Файлы библиотеки можно скопировать в каталог

/OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/lib.

Пользователи также могут создавать свои собственные папки в

/OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/ каталог для хранения своих файлов.

Возьмем пример копирования сжатого пакета.

aarch64buildrootlinuxgnu_sdkbuildroot.tar.gz:

(1) Скопируйте файл по указанному пути.

Создайте каталог с именем test по указанному пути.

/OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/ и поместите сжатый пакет aarch64buildrootlinuxgnu_sdkbuildroot.tar.gz в этот каталог.

(2) Скомпилируйте исходный код

Выполните команду полной компиляции ./build.sh all. После компиляции вы увидите, что тестовый каталог сгенерирован в OK3562linuxfs/rootfs, где находится сжатый пакет.

-2

(3) Проверка на плате разработки

После загрузки платы разработки со скомпилированным update.img обнаруживается, что тестовый каталог существует в файловой системе.

-3

В заключение можно сказать, что тест пройден успешно.

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

(4) Удаление добавленных файлов

При удалении обратите внимание, что помимо удаления файлов, добавленных в /OK3562linuxsource/buildroot/board/forlinx/ok3562/fsoverlay/, необходимо также проверить наличие оставшихся файлов в /OK3562linuxsource/buildroot/output. Например, при компиляции вышеупомянутого сжатого пакета
в /OK3562linuxsource/buildroot/output/OK3562_Linux/target/ также создаётся файл test/aarch64buildrootlinuxgnu_sdkbuildroot.tar.gz, который также необходимо удалить вручную.

После удаления требуется перекомпиляция.

2.2 Метод 2: монтирование rootfs.ext2

Если исходный код скомпилирован или вы хотите только временно добавить файлы в один образ, вы можете воспользоваться методом монтирования rootfs.ext2.

Путь к rootfs.ext2: OK3562linuxsource/buildroot/output/OK3562_Linux/images

(1) Смонтировать rootfs.ext2 и перенести в него файлы

forlinx@ubuntu:~/work/OK3562-linux-source$ cd buildroot/output/OK3562_Linux/images
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ ls
rootfs.cpio rootfs.cpio.gz rootfs.ext2 rootfs.ext4 rootfs.squashfs rootfs.tar
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ mkdir rootfs
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ sudo mount rootfs.ext2 rootfs
[sudo] forlinx пароль:
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ cd rootfs/
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images/rootfs$ ls
bin busybox.fragment dev и т. д. home info lib lib64 linuxrc lost+found media mnt oem opt proc root run sbin sys test tmp userdata usr var
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images/rootfs$ sudo cp /mnt/hgfs/share/aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz ./
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images/rootfs$ cd ..
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ sudo umount rootfs

В заключение, файлы можно добавлять непосредственно в скомпилированный образ.

Примечание: размер rootfs.ext2 по умолчанию составляет 1,7 ГБ. При использовании этого метода для добавления слишком больших файлов возникнет ошибка: cp: Ошибка записи './aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz' : Нет места на устройстве. Вы можете расширить rootfs.ext2, используя следующие команды перед добавлением файлов. Обратите внимание, что перед выполнением этих команд необходимо отмонтировать rootfs.ext2:

forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ dd if=/dev/zero bs=1M count=0 seek=2000 of=rootfs.ext2 // Команда не записывает никаких данных в rootfs.ext2, а просто расширяет размер файла до 2G.
0+0 записей в
0+0 записей выведено
Скопировано 0 байт, 0,000348683 с, 0,0 кБ/с
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ e2fsck -f rootfs.ext2
e2fsck 1.46.5 (30 декабря 2021 г.)
Проход 1: Проверка инодов, блоков и размеров
Шаг 2: Проверка структуры каталога
Шаг 3: Проверка структуры каталога
Проход 4: Проверка количества ссылок
Шаг 5: Проверка сводной информации о группе
rootfs: 9137/70128 файлов (0,1% несмежных), 249143/280320 блоков
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ resize2fs rootfs.ext2
resize2fs 1.46.5 (30 декабря 2021 г.)
Измените размер файловой системы rootfs.ext2 до 512 000 блоков (4 КБ на блок).
Файловая система rootfs.ext2 теперь состоит из 512 000 блоков (по 4 КБ на блок).

forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ ls -lh
Всего 3.5G
drwxrwxr-x 2 forlinx forlinx 4.0K 1 месяц 7 09:30 rootfs
-rw-r--r-- 1 forlinx forlinx 906M 1月 7 11:13 rootfs.cpio
-rw-r--r-- 1 forlinx forlinx 385M 1月 7 11:15 rootfs.cpio.gz
-rw-r--r-- 1 forlinx forlinx 2.0G 1月 7 11:21 rootfs.ext2
lrwxrwxrwx 1 forlinx forlinx 11 1 月 7 11:15 rootfs.ext4 -> rootfs.ext2
drwxrwxr-x 2 forlinx forlinx 4.0K 1 месяц 7 10:02 rootfs_old
-rw-r--r-- 1 forlinx forlinx 383M 1月 7 11:15 rootfs.squashfs
-rw-r--r-- 1 forlinx forlinx 920M 1月 7 11:16 rootfs.tar
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ sudo mount rootfs.ext2 rootfs
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ cd rootfs/
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images/rootfs$ sudo cp /mnt/hgfs/share/aarch64-buildroot-linux-gnu_sdk-buildroot.tar.gz ./
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images/rootfs$ cd ..
forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ sudo umount rootfs

(2) Обновите изображение

forlinx@ubuntu:~/work/OK3562-linux-source/buildroot/output/OK3562_Linux/images$ cd ../../../../
forlinx@ubuntu:~/work/OK3562-linux-source$ ./build.sh updateimg

(3) Проверка на плате разработки

Проверка платы разработки

-4

В заключение можно сказать, что тест пройден успешно.

Этот метод действителен только один раз. Если исходный код будет перекомпилирован позже, модификация завершится ошибкой и её потребуется выполнить заново.

Первоначально опубликовано на www.forlinx.net.