yocto 编译nxp系统

检查 Yocto 编译出来的 .wic 镜像内容

查看分区信息

# 查看分区信息
fdisk -l core-image-*.wic

挂载 .wic 镜像分区

unzstd ./tmp/deploy/images/imx8mpevk/core-image-base-*.wic.zst
sudo losetup -Pf --show ./tmp/deploy/images/imx8mpevk/core-image-base-*.wic
sudo mkdir ./wicroot
sudo mount /dev/loop0p2 ./wicroot
ls ./wicroot/
ls ./wicroot/usr/bin/

# 卸载并释放 loop 设备
sudo umount ./wicroot
sudo losetup -d /dev/loop0

扩展rootfs分区边界

fdisk /dev/mmcblk2
# 输入 p查看当前分区,记下第2分区的 Start(起始扇区)数值
# 输入 d,然后输入 2 删除第2分区。
# 输入 n 新建分区,输入 p,编号输入 2
# 起始扇区(First sector):输入刚才记下的那个数字
# 结束扇区(Lastsector):直接按回车(默认使用全部剩余空间)。
# 如果提示 Do you want to remove the signature?,输入 N。
# 输入 w 保存退出。

# partprobe /dev/mmcblk2
resize2fs /dev/mmcblk2p2
# 自动扩展 /dev/mmcblk2 的第2分区到剩余空间,并扩展文件系统
# 注意:请确保已备份数据,且第2分区为ext4文件系统

#!/bin/bash
DEV=/dev/mmcblk2
PART=${DEV}p2

# 获取第2分区起始扇区
START=$(fdisk -l $DEV | awk '/^'"${DEV}p2"'/ {print $2}')
echo "第2分区起始扇区: $START"

# 自动重建分区表(无交互)
echo -e "d\n2\nn\np\n2\n$START\n\nN\nw\n" | fdisk $DEV

# 刷新分区表
partprobe $DEV

# 扩展文件系统
resize2fs $PART

echo "分区扩展完成。"

在yocto项目中运行简易的apt源服务器

# cd build/tmp/deploy/deb
python3 -m http.server 8080
cat <<EOF > /etc/apt/sources.list
deb [trusted=yes] http://10.46.10.110:8080/armv8a ./
deb [trusted=yes] http://10.46.10.110:8080/all ./
deb [trusted=yes] http://10.46.10.110:8080/armv8a-mx8mp ./
deb [trusted=yes] http://10.46.10.110:8080/imx8mpevk ./
EOF

netplan 不使用网桥

network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
optional: true
addresses:
- 192.168.1.10/24

eth1: {}

swp1:
addresses: [172.24.172.101/24]
optional: true
routes:
- to: 172.24.172.11/32
via: 0.0.0.0

swp2:
addresses: [172.24.172.102/24]
optional: true
routes:
- to: 172.24.172.12/32
via: 0.0.0.0

swp3:
addresses: [172.24.172.103/24]
optional: true
routes:
- to: 172.24.172.13/32
via: 0.0.0.0

swp4:
addresses: [172.24.172.104/24]
optional: true
routes:
- to: 172.24.172.14/32
via: 0.0.0.0
ip route add 172.24.172.11 dev swp1
ip route add 172.24.172.12 dev swp2
ip route add 172.24.172.13 dev swp3
ip route add 172.24.172.14 dev swp4

ptp配置

.conf

[global]
boundary_clock_jbod 1
network_transport L2
delay_mechanism P2P

[eth0]
# 默认使用 ptp0 (fec ptp),作为 Slave 端口同步外部时间

[swp1]
# 强制关联 SJA1105 的硬件时钟 (ptp1)
phc_index 1

[swp2]
phc_index 1

[swp3]
phc_index 1

[swp4]
phc_index 1

phc2sys -s eth0 -c swp1 -O 0 -m && ptp4l -2 -f ptp.cfg -m
# -w: 等待 ptp4l 同步后再开始
phc2sys -s eth0 -c swp1 -w -m

tcpdump -i swp1 ether proto 0x88f7 -n -e

core dump

ulimit -c unlimited
sysctl -w kernel.core_pattern=core

透传

ip link add name br0 type bridge
ip link set br0 up
ip link set eth0 master br0
ip link set swp1 master br0
ip link set swp2 master br0
ip link set swp3 master br0
ip link set swp4 master br0
ip addr delete 192.168.1.10/24 dev eth0
ip addr addr 192.168.1.10/24 dev br0

打开 静态ip ssh连接服务

vi /etc/ssh/sshd_config
# 打开下面两个选项
## UseDNS no
## GSSAPIAuthentication no

yocto常用指令

#%% 编译和清理
bitbake virtual/kernel
-c cleanall # 会删除下载的文件,慎用。
-c clean # 不会删除已下载的文件
bitbake u-boot-imx -c unpack -f # 强制重新解压 (有时候.git没有了就重新解压)

#%% 编译和部署
bitbake core-image-base # 系统镜像
bitbake u-boot-imx # 编译uboot(u-boot-imx 是配方名)
bitbake -c deploy u-boot-imx #部署 uboot(但是好像没有重新生成)
bitbake linux-imx # 编译内核

#%% 终端配置指定配方
bitbake-layers show-recipes | grep linux # 找出配方名
# 以 linux-imx 为例打开 devshell(会把你放到 $S,内核源目录)
bitbake -c devshell linux-imx

uboot 指令

mmc list # 查看存储设备
fatls mmc 2 # 查看mmc 设备2 fat格式
fatls mmc 2:1 # 查看mmc 设备2 第一个分区
ext4ls mmc 2:2 # 查看mmc 设备2的第二个分区 (已知是ext4格式)
ums 0 mmc 2:2 # 将mmc设备2的第二个分区暴露给pc

gpt分区

FB: flash gpt gpt_partition_table.img

在uboot中对emmc分区

mmc dev 2 # select emmc device
gpt write 0 # earse gpt