imx8mp

evk 快速构建 ,使用 yocto

终端设置代理

export http_proxy="http://Clash:[email protected]:7893"
export https_proxy="http://Clash:[email protected]:7893"

安装依赖工具

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

  • mmcblk2boot0

  • mmcblk2boot1

mmcblk2

  • mmcblk2p1 挂载到 /run/media/Boot-mmcblk2p1 格式 fat,存放 Image ,dtb

  • mmcblk2p2 /

启动流程

  • IMX8MP 内部 Rom Code,初始化栈,内部 OCRAM

  • 读取配置的 boot 模式

  • 搜索启动设备

  • 加载 SPL 到 OCRAM 并跳转

Secondary Program Loader 已经是 u-boot 的代码了,做 4 件事

  • 初始化时钟 CCM

  • 初始化 DDR (LPDDR4),关键

  • 初始化必要的外设 (最起码能读存放 uboot 的介质)

  • 加载 u-boot.bin 到 DDR 并跳转

在 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 ,调试一些外设,增加驱动。

最后更新于