基于Intel板的Yocto Project中swupdate入门步骤咨询
完整Swupdate入门指南(Intel Core i7-64开发板 + Yocto Project)
首先,先解决你提到的Bootloader识别问题——Intel x86平台的开发板除了GRUB/U-Boot,还常用systemd-boot(旧称gummiboot),部分定制板可能用厂商自研的引导程序。先快速确认你的设备用的是哪一种:
步骤1:确认当前Bootloader类型
- 开机时留意引导阶段的提示:systemd-boot会显示极简的引导菜单,GRUB是带文字选项的菜单,U-Boot则会弹出
=>命令行提示符。 - 进入系统后也可以查EFI分区内容:
要是看到# 先找到EFI挂载点,一般是/boot/efi ls /boot/efi/EFI/systemd目录就是systemd-boot,grub目录就是GRUB;如果没有EFI分区,大概率是传统BIOS引导的GRUB。
确认Bootloader后,下面是从配置到测试的全流程:
步骤2:配置Yocto环境支持Swupdate
假设你已经能正常构建core-image-minimal,且已把meta-swupdate添加到bblayers.conf,接下来做这些配置:
修改local.conf
打开build/conf/local.conf,添加以下内容(根据你的Bootloader调整):# 启用Swupdate功能 IMAGE_FEATURES += "swupdate" # 指定Swupdate的配置文件路径(后面要创建) SWUPDATE_CONFIG = "${THISDIR}/swupdate.cfg" # 可选:启用网络更新支持(HTTP/HTTPS) SWUPDATE_FEATURES += "network" # 根据Bootloader设置:GRUB填grub,systemd-boot填systemd-boot SWUPDATE_BOOTLOADER = "systemd-boot"创建Swupdate配置文件
在build/conf/下新建swupdate.cfg,根据你的分区结构调整,给个x86 EFI环境的示例:software = { version = "1.0"; # 硬件兼容标识,确保更新包只在你的开发板上运行 hardware-compatibility: [ "intel-corei7-64" ]; images: ( { # 根文件系统镜像 filename = "core-image-minimal-intel-corei7-64.ext4"; device = "/dev/sda2"; type = "raw"; }, { # 内核文件 filename = "vmlinuz"; device = "/boot/vmlinuz"; type = "kernel"; }, { # initramfs文件 filename = "initrd.img"; device = "/boot/initrd.img"; type = "initramfs"; } ); }注意:
device字段要和你开发板的实际分区路径一致,用lsblk可以查看分区信息。检查依赖层
确保bblayers.conf里包含了必要的层,比如网络更新需要meta-networking:BBLAYERS ?= " \ /path/to/your/poky/meta \ /path/to/your/poky/meta-poky \ /path/to/your/poky/meta-yocto-bsp \ /path/to/your/meta-intel \ /path/to/your/meta-swupdate \ /path/to/your/poky/meta-networking \ "
步骤3:构建Swupdate镜像和更新包
- 先确保基础镜像是最新的(可选,但建议做):
bitbake core-image-minimal - 构建Swupdate更新包:
构建完成后,更新包会在bitbake core-image-minimal -c swupdatetmp/deploy/images/intel-corei7-64/目录下,文件名类似core-image-minimal-intel-corei7-64.swu
步骤4:部署更新到开发板
方式1:本地USB更新
- 把
.swu文件复制到USB存储设备,插到开发板上 - 挂载USB:
mount /dev/sdb1 /mnt/usb - 执行更新命令:
swupdate -i /mnt/usb/core-image-minimal-intel-corei7-64.swu -p intel-corei7-64-p后面的参数要和swupdate.cfg里的hardware-compatibility一致。
方式2:网络HTTP更新
- 在你的电脑上开个简易HTTP服务器:
cd tmp/deploy/images/intel-corei7-64/ python3 -m http.server 8000 - 在开发板上执行(替换成你的电脑IP):
swupdate -u http://192.168.1.100:8000/core-image-minimal-intel-corei7-64.swu -p intel-corei7-64
步骤5:验证更新
更新完成后重启开发板:
reboot
登录后可以通过查看系统版本确认更新生效:
cat /etc/os-release
常见坑点排查
- Bootloader配置错误会导致引导更新失败,务必先确认Bootloader类型再设置
SWUPDATE_BOOTLOADER - 更新失败可以看日志:用
journalctl -u swupdate.service(systemd环境)或者直接看命令行输出找问题 - 分区路径一定要对应,用
lsblk或者fdisk -l确认设备路径
内容的提问来源于stack exchange,提问作者md.jamal
相关产品推荐
相关产品推荐

