Ссылка:
1 2 |
https://docs.yoctoproject.org/ https://github.com/nxp-qoriq/yocto-sdk/tree/kirkstone |
pre install yocto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Для debian/ubuntu установить пакеты apt install vim sudo gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pyelftools python3-pexpect xz-utils debianutils iputils-ping libsdl1.2-dev xterm Версия python 3+ по умолчанию: update-alternatives --list python - проверяем update-alternatives --install /usr/bin/python python /usr/bin/python3.9 1 Для любителей поставить русскую local нужно добавить еще local en_US.UTF-8: 0. vim /etc/locale.gen ------------------- en_US.UTF-8 <---------- найти и раскоментить ------------------ 1. Перечитать local: locale-gen На этом все, теперь у вас должна появится local en_US.UTF-8 |
Создаем пользователя от которого будем собирать в его каталоге:
1 2 |
useradd useryocto su - useryocto |
Качаем бинарный файл для загрузки репы:
1 2 3 4 |
mkdir ~/bin curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo PATH=${PATH}:~/bin |
Создаем каталог yocto-sdk и скачиваем yocto:
1 2 3 4 |
mkdir yocto-sdk cd yocto-sdk repo init -u https://github.com/nxp-qoriq/yocto-sdk -b kirkstone repo sync --force-sync |
Теперь тебе надо в папке sources подменить meta-qoriq нашей
1 2 3 4 |
cd sources rm -rf meta-qoriq git clone https://Какой-то_наш_гитлаб/yocto/meta-qoriq cd .. |
Теперь нужно выполнить следующие (будет создан каталог) / в каталоге yokto-sdk
1 |
. ./setup-env -m ls1046ardb |
Теперь нужно отредактировать файл build_ls1046ardb/conf/local.conf
1 2 3 4 5 6 7 8 9 |
vim build_ls1046ardb/conf/local.conf В конец файла добавить: DISTRO_FEATURES:append = " systemd " DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit" VIRTUAL-RUNTIME_init_manager = "systemd" VIRTUAL-RUNTIME_initscripts = "systemd-compat-units" GLIBC_GENERATE_LOCALES = "en_US.UTF-8 ru_RU.UTF-8" IMAGE_LINGUAS = "en-us ru-ru" |
Первая сборка:
1 2 3 4 5 |
Первая сборка: bitbake fsl-image-networking Сборка образа под sd карту: wic create ls104x-uboot-bootpart --no-fstab-update -e fsl-image-networking |
На потом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Параметры ядра /proc/cmdlist uboot setenv bootargs "console=ttyS0,115200 debug ignore_loglevel printk.synchronous=1 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16)" saveenv setenv othbootargs "debug ignore_loglevel printk.synchronous=1" saveenv orig boot_script: distroboot=\ 'sf probe;'\ 'env exists dtb || setenv dtb fsl-ls1046a-rdb-sdk.dtb;'\ 'env exists kernel_image || setenv kernel_image Image;'\ 'env exists devpart_boot || setenv devpart_boot 1;'\ 'env exists devpart_root || setenv devpart_root 2;'\ 'part uuid $devtype $devnum:$devpart_root partuuidr;'\ 'setenv bootargs console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=$partuuidr rw rootwait $othbootargs;'\ 'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image;'\ 'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb;'\ 'env exists secureboot && echo validating secureboot && run secureboot_validate;'\ 'booti $kernel_addr_r - $fdt_addr_r' boot_script fix: distroboot= 'sf probe; 'env exists dtb || setenv dtb fsl-ls1046a-rdb-sdk.dtb; 'env exists kernel_image || setenv kernel_image Image; 'env exists devpart_boot || setenv devpart_boot 1; 'env exists devpart_root || setenv devpart_root 2; 'part uuid $devtype $devnum:$devpart_root partuuidr; 'setenv bootargs console=ttyS0,115200 earlycon=uart8250,mmio,0x21c0500 root=PARTUUID=$partuuidr rw rootwait $othbootargs; 'load $devtype $devnum:$devpart_boot $kernel_addr_r $kernel_image; 'load $devtype $devnum:$devpart_boot $fdt_addr_r $dtb; 'env exists secureboot && echo validating secureboot && run secureboot_validate; 'booti $kernel_addr_r - $fdt_addr_r Сборка: mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "script" -d boot.script ls1046ardb_boot.scr uboot: setenv othbootargs "debug ignore_loglevel printk.synchronous=1" saveenv |
Файлы:
1 2 3 4 5 6 |
~/yocto-sdk/sources/meta-qoriq/recipes-support/bwt-tools/files - тут наши файлы wx и т.д ~/yocto-sdk/sources/meta-qoriq/recipes-support/bwt-tools/bwt-tools.bb - Вот этим рецептом вкарячивает ~/yocto-sdk/sources/meta-qoriq/recipes-fsl/packagegroups/packagegroup-nnz-tests.bb - тут список пакетов котоый будут собраны в образ |
Пример добавления новых файлов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
был добавлен архив с файлами(bwt и linux-kernel) для сборки ~/yocto-sdk/sources/meta-qoriq/recipes-support/bwt-tools/bwt-tools.bb tar -cvzf addrus.tar.gz addrus file://addrus.tar.gz \ cp -r ${S}/addrus/* -t ${D}/opt/ -------------------- LICENSE = "CLOSED" SRC_URI = " \ file://bwt-tools.tar.gz \ file://nxp_script.tar.gz \ file://bwt-logging-tools.tar.gz \ file://addrus.tar.gz \ " SRC_URI[sha256sum] = "f0f577a9cb50b9d5fdbe711fcc383da841c1762cd0d49930608184de39a38977" SRCREV = "81f14a00f1dd48e7b0138916224940ddb38cc765" S = "${WORKDIR}" INSANE_SKIP:${PN}:append = "already-stripped arch" RDEPENDS:${PN}="bash libftdi libpci python3 python3-core dbus-lib openssl libcrypto libudev libnl-genl libnl-route libnl libssl libusb1 libelf" do_install() { #${sysconfdir} = /etc #${bindir} = /usr/bin #${libdir} = /usr/lib #${localstatedir} = /var install -d ${D}${bindir} install -d ${D}/opt/bwt cp -r ${S}/bwt-tools/opt/* -t ${D}/opt/ cp -r ${S}/bwt-logging-tools/opt/* -t ${D}/opt/ cp -r ${S}/addrus/* -t ${D}/opt/ install -d ${D}/etc cp -r ${S}/bwt-tools/etc/* -t ${D}/etc/ cp -r ${S}/bwt-logging-tools/etc/* -t ${D}/etc/ install -d ${D}/lib/systemd/system install -d ${D}/lib/systemd/system-preset cp -r ${S}/bwt-logging-tools/lib/* -t ${D}/lib/ install -d ${D}/lib/firmware/bwt install -d ${D}${libdir}/engines-1.1 cp -r ${S}/bwt-tools${libdir}/* -t ${D}${libdir}/ install -d ${D}/usr/share/ifupdown2/addons install -m 644 -D ${S}/bwt-tools/usr/share/ifupdown2/addons/hydra.py ${D}/usr/share/ifupdown2/addons/hydra.py install -m 644 -D ${S}/bwt-tools/opt/bwt/bh2b/firmware/fw/bh2b_fw_sivers.bin ${D}/lib/firmware/bwt/bh2b_fw.bin install -d ${D}/etc/modprobe.d install -d ${D}/home/root install -m 644 -D ${S}/nxp_script/bh2.conf ${D}/etc/modprobe.d/bh2.conf install -m 644 -D ${S}/nxp_script/hint.txt ${D}/home/root/hint.txt install -m 644 -D ${S}/nxp_script/00_fm1-mac3.network ${D}/etc/systemd/network/00_fm1-mac3.network install -m 644 -D ${S}/nxp_script/set_mac.service ${D}/etc/systemd/system/set_mac.service install -m 744 -D ${S}/nxp_script/cpu_test.sh ${D}/usr/bin/cpu_test install -m 744 -D ${S}/nxp_script/wx.sh ${D}/usr/bin/wx install -m 744 -D ${S}/nxp_script/set_mac ${D}/usr/bin/set_mac } FILES:${PN} += "/opt /etc /lib /home /usr/lib /usr/bin /usr/share" INHIBIT_PACKAGE_STRIP = "1" INHIBIT_PACKAGE_DEBUG_SPLIT = "1" inherit systemd SYSTEMD_SERVICE:${PN} = "set_mac.service" -------------------- |
для тестов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
для файл с пакетами выглядит вот так вот: cat ~/yocto-sdk/sources/meta-qoriq/recipes-fsl/packagegroups/packagegroup-nnz-tests.bb # Copyright (C) 2015 Freescale Semiconductor # Released under the MIT license (see COPYING.MIT for the terms) SUMMARY = "nnz Package group for tests" LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup PACKAGES = "${PN}" RDEPENDS:${PN} = " \ lsof \ gdb \ make \ gcc \ cmake \ strace \ mc \ openssh-sftp \ ssh \ nano \ kernel-dev \ linux-libc-headers-dev \ git \ gawk \ kernel-module-bh2 \ bwt-tools \ distro-bootscr \ cryptodev-module \ wpa-supplicant \ iperf3 \ hostapd \ tcpdump \ vim \ ifupdown \ minicom \ screen \ tmux \ dhcpcd \ glibc-utils \ localedef \ p7zip \ htop \ lmsensors \ tzdata \ ntp \ batctl \ batman-adv \ i2c-tools \ iproute2-ss \ init-ifupdown \ fmlib \ fm-ucode \ bmon \ openvswitch \ lsof \ binutils \ zip \ flex \ bison \ findutils \ xz \ curl \ net-snmp \ net-snmp-server-snmpd \ " |
WIC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
wic create ls104x-uboot-bootpart --no-fstab-update -e fsl-image-networking Объяснение ключевых компонентов команды: wic: wic - это утилита в Yocto Project, предназначенная для создания образов дисков на основе инструкций в .wks файлах (WIC Kickstart файлов). create: create - это команда, указывающая утилите wic создать образ. ls104x-uboot-bootpart: Это имя файла .wks (WIC Kickstart), который содержит инструкции о том, как создать образ. Этот файл определяет, как должны быть разметаны разделы на диске, какие файлы должны быть включены в каждый раздел и т.д. --no-fstab-update: Эта опция указывает wic не обновлять файл fstab в создаваемом образе. Обычно wic обновляет fstab для соответствия новому разделу, но эта опция отключает это поведение. -e fsl-image-networking: Эта опция указывает wic, какой образ файловой системы использовать. В данном случае, fsl-image-networking - это имя образа, который был ранее собран с помощью BitBake. Этот образ будет использован для создания файловой системы в соответствии с инструкциями в файле ls104x-uboot-bootpart.wks. |
Возможная проблема с загрукой системы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Ошибка: [ 5.578153] EXT4-fs (mmcblk0p2): recovery complete [ 5.583890] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none. [ 5.593662] VFS: Mounted root (ext4 filesystem) on device 179:2. [ 5.602973] devtmpfs: mounted [ 5.607624] Freeing unused kernel memory: 6912K [ 5.612259] Run /sbin/init as init process can't run '/etc/init.d/rcS': No such file or directory Проверяем: root@(none):/# ls /lib/systemd/systemd /lib/systemd/systemd root@(none):/# ls -l /lib/systemd/systemd -rwxr-xr-x 1 root root 88216 Mar 9 2018 /lib/systemd/systemd root@(none):/# ls -l /sbin/init lrwxrwxrwx 1 root root 12 Mar 9 2018 /sbin/init -> /bin/busybox А вот и проблема " /sbin/init -> /bin/busybox": Пробуем решить root@(none):/# find /etc -name '*sysv*' -delete root@(none):/# ln -sf /lib/systemd/systemd /sbin/init root@(none):/# ls -l /sbin/init lrwxrwxrwx 1 root root 20 Jan 1 00:22 /sbin/init -> /lib/systemd/systemd Перезагружаемся и грузимся в систему. |
Пытки обновить с kirkstone
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cd source git clone -b kirkstone https://github.com/OSSystems/meta-browser.git git clone -b kirkstone https://github.com/kraj/meta-clang git clone -b kirkstone git://git.yoctoproject.org/meta-cloud-services git clone -b kirkstone git://git.yoctoproject.org/meta-freescale git clone -b kirkstone https://github.com/Freescale/meta-freescale-distro.git git clone -b kirkstone git://git.openembedded.org/meta-openembedded git clone -b kirkstone https://git.yoctoproject.org/meta-security git clone -b kirkstone git://git.yoctoproject.org/meta-selinux git clone -b kirkstone https://github.com/meta-debian/meta-debian.git poky/meta-debian git clone -b kirkstone https://github.com/meta-debian/meta-debian.git git clone -b kirkstone git://git.yoctoproject.org/meta-virtualization cat ./poky/meta-debian/scripts/install-deps.sh sudo ./poky/meta-debian/scripts/install-deps.sh |
fix
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
. ./setup-env -m ls1046ardb vim /home/aptyocto/yocto-sdk/build_ls1046ardb/conf/local.conf ------------------------------------------------------------- MACHINE ??= 'ls1046ardb' DISTRO ?= 'fsl-qoriq' PACKAGE_CLASSES ?= "package_deb" EXTRA_IMAGE_FEATURES ?= "debug-tweaks" USER_CLASSES ?= "buildstats" PATCHRESOLVE = "noop" BB_DISKMON_DIRS ??= "\ STOPTASKS,${TMPDIR},1G,100K \ STOPTASKS,${DL_DIR},1G,100K \ STOPTASKS,${SSTATE_DIR},1G,100K \ STOPTASKS,/tmp,100M,100K \ HALT,${TMPDIR},100M,1K \ HALT,${DL_DIR},100M,1K \ HALT,${SSTATE_DIR},100M,1K \ HALT,/tmp,10M,1K" PACKAGECONFIG:append:pn-qemu-system-native = " sdl" CONF_VERSION = "2" # Parallelism Options BB_NUMBER_THREADS = "6" PARALLEL_MAKE = "-j 6" DL_DIR = "/home/aptyocto/yocto-sdk/downloads" SSTATE_DIR = "/home/aptyocto/yocto-sdk/sstate-cache" INITRAMFS_IMAGE = "core-image-minimal" ACCEPT_FSL_EULA = "1" DISTRO_FEATURES:append = " systemd package-management" DISTRO_FEATURES_BACKFILL_CONSIDERED:append = " sysvinit" VIRTUAL-RUNTIME_init_manager = "systemd" VIRTUAL-RUNTIME_initscripts = "systemd-compat-units" GLIBC_GENERATE_LOCALES = "en_US.UTF-8 ru_RU.UTF-8" IMAGE_LINGUAS = "en-us ru-ru" IMAGE_INSTALL:append = " systemd systemd-compat-units systemd-analyze apt gnupg dpkg" ------------------------------------------------------------- Пересобираем: Очистите предыдущую сборку (по желанию): bitbake -c cleanall fsl-image-networking Запустите сборку образа: bitbake fsl-image-networking wic create ls104x-uboot-bootpart --no-fstab-update -e fsl-image-networking |
Рецепт postgresql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
cat > sources/meta-openembedded/meta-oe/recipes-dbs/postgresql/postgresql_14.5.bb << "EOF" require postgresql.inc LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=75af6e3eeec4a06cdd2e578673236fc3" SRC_URI += "\ file://not-check-libperl.patch \ file://0001-Add-support-for-RISC-V.patch \ file://0001-Improve-reproducibility.patch \ file://0001-configure.ac-bypass-autoconf-2.69-version-check.patch \ file://remove_duplicate.patch \ file://0001-config_info.c-not-expose-build-info.patch \ " SRC_URI[sha256sum] = "d4f72cb5fb857c9a9f75ec8cf091a1771272802f2178f0b2e65b7b6ff64f4a30" CVE_CHECK_IGNORE += "\ CVE-2017-8806 \ " inherit systemd SYSTEMD_SERVICE_${PN} = "postgresql.service" do_install:append() { install -D -m 0644 ${WORKDIR}/postgresql.service ${D}${systemd_system_unitdir}/postgresql.service } INITSCRIPT_PACKAGES = "${PN}" INITSCRIPT_NAME = "postgresql" INITSCRIPT_PARAMS = "defaults 99" pkg_postinst:${PN}() { if [ -z "$D" ]; then if [ ! -d /var/lib/postgresql/data ]; then mkdir -p /var/lib/postgresql/data chown 28:28 /var/lib/postgresql/data chmod 700 /var/lib/postgresql/data fi su -s /bin/bash postgres -c "pg_ctl init -D /var/lib/postgresql/data" fi } EOF cat > postgresql.service << "EOF" [Unit] Description=PostgreSQL database server After=network.target [Service] Type=forking User=postgres Group=postgres # Port number for server to listen on Environment=PGPORT=5432 # Location of database directory Environment=PGDATA=/var/lib/postgresql/data # Disable OOM kill on the postmaster OOMScoreAdjust=-17 ExecStart=/usr/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300 ExecStop=/usr/bin/pg_ctl stop -D ${PGDATA} -s -m fast ExecReload=/usr/bin/pg_ctl reload -D ${PGDATA} -s # Give a reasonable amount of time for the server to start up/shut down TimeoutSec=300 [Install] WantedBy=multi-user.target EOF |
Для очистки и пере сборки рецепта
1 2 3 4 5 6 7 8 9 10 |
bitbake -c clean postgresql bitbake postgresql bitbake -c clean wx bitbake wx bitbake fsl-image-networking wic create ls104x-uboot-bootpart --no-fstab-update -e fsl-image-networking |