Порядок действий для сборки и загрузки Yocto в NAND:
1) Добавить параметры NAND. Проверить физические параметры NAND можно через uboot командой nand info
/adk_yocto/sources/meta-adakta/conf/machine/adakta_nano6ull.conf
MKUBIFS_ARGS = "--min-io-size 2048 --leb-size 126976 --max-leb-cnt 776" UBINIZE_ARGS = "--min-io-size 2048 --peb-size 131072 --sub-page-size 2048"
2) Включить сборку образа ubifs
adk_yocto/sources/meta-freescale/conf/machine/include/imx-base.inc
SOC_DEFAULT_IMAGE_FSTYPES = "sdcard.gz ubifs"
3) Создать дистрибутив и добавить в него сборку необходимых утилит (mtd-utils mtd-utils-ubifs imx-kobs)
/adk_yocto/sources/meta-adakta/recipes-stand/distrib/ull-test-image.bb
DESCRIPTION = "Test image for ADAKTA-mx6ull" IMAGE_INSTALL = "packagegroup-core-boot libstdc++ packagegroup-core-x11 ${CORE_IMAGE_EXTRA_INSTALL} \ packagegroup-xfce-base \ kernel-modules \ " REQUIRED_DISTRO_FEATURES = "x11" IMAGE_LINGUAS = " " #Данные параметры влияют на размер полученного образа, выбирайте с учетом размера используемой SD карты или NAND #IMAGE_ROOTFS_EXTRA_SPACE = "1048576" #IMAGE_OVERHEAD_FACTOR = "1.5" #IMAGE_ROOTFS_SIZE = "1000000" export IMAGE_BASENAME = "ull-test-image" #First include a base image to base things off inherit core-image gettext autotools IMAGE_FEATURES +="ssh-server-openssh" #Now add the multilib packages we want to install CORE_IMAGE_EXTRA_INSTALL += "nano lsof proftpd iptables ntp cronie tzdata mtd-utils mtd-utils-ubifs imx-kobs"
4) Включить в ядре поддержку MTD, UBI и UBIFS
/adk_yocto/sources/meta-adakta/recipes-kernel/linux-nano6ull/linux-nano6ull-4.1.15/defconfig
CONFIG_MTDIDS_DEFAULT="nand0=gpmi-nand" CONFIG_MTDPARTS_DEFAULT="mtdparts=gpmi-nand:-(ubi)" CONFIG_MTD_UBI=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 CONFIG_MTD_UBI_FASTMAP=y CONFIG_MTD_UBI_GLUEBI=y CONFIG_MTD_UBI_BLOCK=y CONFIG_MTD_NAND_ECC=y CONFIG_MTD_NAND=y CONFIG_MTD_NAND_IDS=y CONFIG_MTD_NAND_GPMI_NAND=y CONFIG_MTD_NAND_MXC=y CONFIG_UBIFS_FS=y
5) Запустить сборку дистрибутива ull-test-image (bitbake ull-test-image)
6) Записать полученный образ (ull-test-image-adakta_nano6ull.sdcard.gz) на SD карту.
7) Запустить систему с SD карты и скопировать полученный образ (ubifs) на файловую систему, например в /home/root/ull-test-image-adakta_nano6ull-20180712135145.rootfs.ubifs
8) Запустить uboot
8.1) Установить переменное окружение
setenv mtdparts "mtdparts=gpmi-nand:-(ubi)" setenv BD_BOOT_IMAGE_KERNEL "/boot/zImage" setenv BD_BOOT_IMAGE_FDT "/boot/devicetree-zImage-adakta_nano6ull.dtb" setenv bootnand 'if ubi part ubi && ubi check rootfs && sleep 1 && ubifsmount ubi0:rootfs; then ubifsload ${loadaddr} $BD_BOOT_IMAGE_KERNEL && ubifsload ${fdt_addr} $BD_BOOT_IMAGE_FDT && fdt addr ${fdt_addr} ${filesize} && bootz ${loadaddr} - ${fdt_addr}; echo FAIL; else echo OK; fi' setenv bootargs "console=ttymxc0,115200 vmalloc=400M consoleblank=0 mtdparts=gpmi-nand:-(ubi) rw rootwait rootfstype=ubifs root=ubi0:rootfs ubi.mtd=0" saveenv
8.2) Отформатировать и разбить NAND
nand erase.chip ubi part ubi ubi create rootfs
8.3) Скопировать ubifs образ c SD карты в память
load mmc 0:2 $loadaddr /home/root/ull-test-image-adakta_nano6ull-20180706122101.rootfs.ubifs
8.4) Записать ubifs образ в NAND
ubi write $loadaddr rootfs $filesize
9) Запустить загрузку с NAND
run bootnand