Raspberry Pi Zero(armv6l)安装deviceupdate-agent时postinst脚本执行失败求助
问题原因
你遇到的Illegal instruction错误(退出码132),本质是微软预编译的deviceupdate-agent及相关扩展是针对ARMv7/ARMv8架构编译的,而Raspberry Pi Zero采用的是ARMv6架构,不支持这些二进制文件里的指令集,导致执行时触发非法指令。
解决方案
临时绕过安装报错,完成包配置
先注释掉postinst脚本中报错的注册步骤,让dpkg完成配置:
- 编辑postinst脚本:
sudo nano /var/lib/dpkg/info/deviceupdate-agent.postinst - 找到第218行的如下命令,在行首添加
#注释掉:# $adu_bin_path -l 2 --extension-type updateContentHandler --extension-id "microsoft/apt:1" --register-extension $adu_extensions_sources_dir/$adu_apt_handler_file - 保存退出后,重新执行配置命令:
sudo dpkg --configure deviceupdate-agent
手动适配ARMv6架构的更新扩展
完成包配置后,官方的microsoft/apt:1扩展无法在ARMv6上运行,你需要:
- 从源码编译适配ARMv6的扩展:
- 安装编译依赖:
sudo apt install git build-essential cmake libcurl4-openssl-dev libssl-dev libsystemd-dev - 获取Azure Device Update for IoT Hub的源码,进入APT扩展目录,编译时指定ARMv6架构:
cd 源码目录/src/extensions/update-content-handlers/apt mkdir build && cd build cmake .. -DCMAKE_C_FLAGS="-march=armv6" -DCMAKE_CXX_FLAGS="-march=armv6" make
- 安装编译依赖:
- 注册编译好的扩展:
sudo /usr/bin/adu -l 2 --extension-type updateContentHandler --extension-id "microsoft/apt:1" --register-extension ./libadu_apt_handler.so
替代方案:使用源码编译完整的deviceupdate-agent
如果上述方法仍有问题,可以直接从源码编译整个agent,确保完全适配ARMv6:
- 安装编译依赖(同上)
- 进入agent源码目录编译:
cd 源码目录/src/agent mkdir build && cd build cmake .. -DCMAKE_C_FLAGS="-march=armv6" -DCMAKE_CXX_FLAGS="-march=armv6" make - 替换系统中的agent二进制文件:
sudo cp ./adu /usr/bin/adu
内容的提问来源于stack exchange,提问作者Yokto
相关产品推荐
相关产品推荐

