arn linux编译系统时错误的解决
今天打算編譯支持orange pi開(kāi)發(fā)板的Raspbain Jessie系統(tǒng) 從github上拿下源碼,下載,編譯,一直比較順利
結(jié)果在編譯一半的時(shí)候報(bào)錯(cuò):
/second-stage: line 206: /bin/sleep: cannot execute binary file: Exec format error?
根據(jù)錯(cuò)誤提示信息,找到了該語(yǔ)句如下:
while kill -0 $1 2>/dev/nulldoi=$(( (i+1) %4 ))printf "\r$2 ${spin:$i:1}"sleep .1done?
簡(jiǎn)簡(jiǎn)單單一句sleep,怎么會(huì)格式錯(cuò)誤呢?單獨(dú)執(zhí)行也沒(méi)問(wèn)題啊? 繼續(xù)往上找,查到是在create_image腳本里調(diào)用了second-stage,調(diào)用語(yǔ)句如下:
# ******************************************************************************** # *** If running on ARM (OrangePI) USE THE LINE WITHOUT "qemu-arm-static" !!! **** # ******************************************************************************** #if ! chroot $odir /bin/bash /second-stage; then if ! chroot $odir /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/bash /second-stage; thenmv $odir/install.log . > /dev/null 2>&1echo "================================================"echo "ERROR on second-stage, instalation NOT FINISHED."echo "================================================"exit 1 fi?
原來(lái)是執(zhí)行了chroot后調(diào)用的,也就是說(shuō)實(shí)際調(diào)用的是
~/orangepi/OrangePiH3/output/linux-jessie/bin/sleep?
但是此處指定了是用qemu-arm-static命令調(diào)用的,怎么還出錯(cuò)?該命令到底是個(gè)什么用法? 于是做了以下測(cè)試:
sudo chroot ~/orangepi/OrangePiH3/output/linux-jessie\ /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/bash?
順利調(diào)用! 但是在該arm版的bash下面,卻始終無(wú)法調(diào)用/bin/sleep,仍是同樣的提示:
cannot execute binary file: Exec format error?
原來(lái)qemu-arm-static僅對(duì)當(dāng)前程序有效,并不會(huì)改變系統(tǒng)程序執(zhí)行環(huán)境,所以導(dǎo)致仍將arm版的/bin/sleep作為x86程序進(jìn)行了處理,也就是調(diào)用/bin/sleep也需要使用qemu-arm-static命令來(lái)調(diào)用,難道需要改腳本?那改動(dòng)的地方就不少了,有沒(méi)有便捷點(diǎn)的辦法?
于是google了下,在該文章:
Emulating ARM on Debian/Ubuntu
中,發(fā)現(xiàn)少了關(guān)鍵的一步:
#This can only be run as root (sudo don't work) sudo su echo ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm-static:' > /proc/sys/fs/binfmt_misc/register exit?
該語(yǔ)句意思是將qemu-arm-static注冊(cè)為arm可執(zhí)行文件的默認(rèn)解釋器! 執(zhí)行了這一步后,就無(wú)需指定qemu-arm-static作為解釋器,直接調(diào)用arm程序即可執(zhí)行
繼續(xù)進(jìn)行編譯,成功!
轉(zhuǎn)載于:https://www.cnblogs.com/mmseh/p/9062239.html
總結(jié)
以上是生活随笔為你收集整理的arn linux编译系统时错误的解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 梦到偷戒指什么预兆
- 下一篇: linux-shell——02