imx8mp
evk 快速构建 ,使用 yocto
终端设置代理
安装依赖工具
sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xzutils zstd efitools
sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget zstd efitools
安装 repo 工具
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod +x repo
# 放到 /bin 或某个环境变量的目录里
imx-manifest 是 NXP 官方用于管理 i.MX Linux BSP(Board Support Package)源码的“入口仓库”。它本身不包含代码,而是通过多个 .xml manifest 文件来描述 所有需要拉取的子仓库,并用 repo 工具统一管理。
NXP 的 BSP 依赖几十个仓库,且版本组合高度固定,如果用 submodule 会非常难管理。
# 创建工作目录
mkdir imx-yocto-bsp
cd imx-yocto-bsp
# 可能需要代理
# 初始化 repo 仓库,获得依赖关系
repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-kirkstone -m imx-5.15.71-2.2.2.xml
# 拉取 yocto 工程源码,poky meta-imx kernel uboot
repo sync
bitbake core-image-minimal
烧镜像,
NXP 提供了 UUU 工具,
使用 UUU 工具,连接 USB 到 PC,
这种方式下载的内容,
emmc
mmcblk2
mmcblk2p1 挂载到 /run/media/Boot-mmcblk2p1 格式 fat,存放 Image ,dtb
启动流程
IMX8MP 内部 Rom Code,初始化栈,内部 OCRAM
Secondary Program Loader 已经是 u-boot 的代码了,做 4 件事
初始化必要的外设 (最起码能读存放 uboot 的介质)
在 boot 日志中可以看到两阶段启动。新版的 boot 命令做了很多嵌套,更健壮,并且没有设置 bootargs
可以设置好传递给内核的 bootatgs 后手动去从 mmc 中加载 kernel 与 dtb 并启动
/dev/mmcblk2p2 在 linux 启动后挂载到了根文件系统的 /run/media/Boot-mmcblk2p1 下,可以直接替换这里的 Image 和 dtb ,uboot 在启动后自动加载。
下一步,通过网络 tftp 加载 kernel 与 dtb,并挂载 nfs 根文件系统
ubuntu 安装 tftp 服务,
安装完成后修改配置文件,/etc/default/tftpd-hpa,设置 tftp 目录
从网络加载,在开发板上操作
或者设置为 bootcmd
安装 nfs 服务
添加作为 nfs 共享的文件夹
指定从 nfs 挂载根文件系统
设置 bootargs
sudo mount -o loop,offset=134217728 okmx8mp-c-linux-fs.sdcard /mnt/rootfs
一些启动方式
mmc 加载 kernel dtb 挂载 rootfs
mmc 加载 kernel dtb ,nfs 挂载 rootfs,调应用
构建最小的 linux
uboot 和 kernel 是两个程序,使用飞凌的 uboot ,引导一个最小的 linux ,调试一些外设,增加驱动。