码迷,mamicode.com
首页 > 系统相关 > 详细

arn linux编译系统时错误的解决

时间:2018-05-20 00:48:00      阅读:644      评论:0      收藏:0      [点我收藏+]

标签:debian   ESS   google   color   ash   running   无法   reg   tput   

今天打算编译支持orange pi开发板的Raspbain Jessie系统 从github上拿下源码,下载,编译,一直比较顺利

结果在编译一半的时候报错:

/second-stage: line 206: /bin/sleep: cannot execute binary file: Exec format error

 

根据错误提示信息,找到了该语句如下:

    while kill -0 $1 2>/dev/null
    do
      i=$(( (i+1) %4 ))
      printf "\r$2 ${spin:$i:1}"
      sleep .1
    done

 

简简单单一句sleep,怎么会格式错误呢?单独执行也没问题啊? 继续往上找,查到是在create_image脚本里调用了second-stage,调用语句如下:

# ********************************************************************************
# *** 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; then
    mv $odir/install.log . > /dev/null 2>&1
    echo "================================================"
    echo "ERROR on second-stage, instalation NOT FINISHED."
    echo "================================================"
    exit 1
fi

 

原来是执行了chroot后调用的,也就是说实际调用的是

~/orangepi/OrangePiH3/output/linux-jessie/bin/sleep

 

但是此处指定了是用qemu-arm-static命令调用的,怎么还出错?该命令到底是个什么用法? 于是做了以下测试:

sudo chroot ~/orangepi/OrangePiH3/output/linux-jessie/usr/bin/qemu-arm-static -cpu cortex-a9 /bin/bash

 

顺利调用! 但是在该arm版的bash下面,却始终无法调用/bin/sleep,仍是同样的提示:

 cannot execute binary file: Exec format error

 

原来qemu-arm-static仅对当前程序有效,并不会改变系统程序执行环境,所以导致仍将arm版的/bin/sleep作为x86程序进行了处理,也就是调用/bin/sleep也需要使用qemu-arm-static命令来调用,难道需要改脚本?那改动的地方就不少了,有没有便捷点的办法?

于是google了下,在该文章:

Emulating ARM on Debian/Ubuntu

中,发现少了关键的一步:

#This can only be run as root (sudo dont 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

 

该语句意思是将qemu-arm-static注册为arm可执行文件的默认解释器! 执行了这一步后,就无需指定qemu-arm-static作为解释器,直接调用arm程序即可执行

继续进行编译,成功!

arn linux编译系统时错误的解决

标签:debian   ESS   google   color   ash   running   无法   reg   tput   

原文地址:https://www.cnblogs.com/mmseh/p/9062239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!