Ссылка:
https://docs.yoctoproject.org/ https://github.com/nxp-qoriq/yocto-sdk/tree/kirkstonei2c
pre install yocto
Для 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
Создаем пользователя от которого будем собирать в его каталоге:
useradd useryocto su - useryocto
Качаем бинарный файл для загрузки репы:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
PATH=${PATH}:~/bin
Создаем каталог yocto-sdk и скачиваем yocto:
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 нашей
cd sources rm -rf meta-qoriq git clone https://Какой-то_наш_гитлаб/yocto/meta-qoriq cd ..
Теперь нужно выполнить следующие (будет создан каталог) / в каталоге yokto-sdk
. ./setup-env -m ls1046ardb
Теперь нужно отредактировать файл build_ls1046ardb/conf/local.conf
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"
Первая сборка:
Первая сборка: bitbake fsl-image-networking Сборка образа под sd карту: wic create ls104x-uboot-bootpart --no-fstab-update -e fsl-image-networking
На потом:
Параметры ядра /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
Файлы:
~/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 - тут список пакетов котоый будут собраны в образ
Пример добавления новых файлов:
был добавлен архив с файлами(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"
--------------------
для тестов
для файл с пакетами выглядит вот так вот:
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
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.
Возможная проблема с загрукой системы:
Ошибка: [ 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
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
. ./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
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
Для очистки и пере сборки рецепта
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
серийник / запись в nand
rmmod at24 echo -n "bs04" | od -An -t x1 i2cset -y 0 0x54 0x00 0x62 0x73 0x30 0x34 i modprobe at24
