Рубрики
dev

наша yocto nxp ls1046

Ссылка:

https://docs.yoctoproject.org/
https://github.com/nxp-qoriq/yocto-sdk/tree/kirkstone
i2c

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 
"

config
repo
set_mac_ls1046

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