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

今天打算编译支持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 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

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

继续进行编译,成功!

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

时间: 2024-10-14 05:48:30

arn linux编译系统时错误的解决的相关文章

win7 64 下 VS2008 调试、退出时错误的解决

最近调试老程序的时候发现原来的VS2008会偶尔在调试C++程序的时候出现程序未响应的情况,开始还以为是个案,后来出现的频率越来越高完全影响心情啊!! 准备花时间解决一下这个问题.网上搜索没有发现任何有价值线索,于是决定用上绝招--安装盘修复,但结果依然是那样.准备用process monitor监测一下,发现信息太多基本不太可能一一人工分析. 在解决问题的时候还发现了一个问题.启动VS2008后,打开一个项目,不做任何修改点全部保存,然后关闭VS2008,此时VS2008会出现异常100%可重

MySQL里创建外键时错误的解决

--MySQL里创建外键时错误的解决--------------------------------2014/04/30在MySQL里创建外键时(Alter table xxx add constraint fk_xxx foreign key),提示错误,但只提示很简单的信息:ERROR 1005 (HY000): Can't create table '.\env_mon\#sql-698_6.frm' (errno: 150).根本起不到解决问题的作用.要看错误的详细提示,可以使用命令:(

用JDBC编程的执行时错误及其解决大全

用JDBC编程的执行时错误及其解决 用JDBC编程的执行时错误及其解决 源码: 1.java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver 1.1 错误信息: 1.2 错误描写叙述 1.3 错误解决方法 2.用户 'sa' 登录失败 2.1 错误信息: 2.2 错误描写叙述 2.3 错误解决方法 3.Invalid parameter binding(s) 3.1 错误信息: 3.2 错误描写叙

集成支付宝SDK时错误的解决办法

1.打开Demo中的错误 这是路径错误导致 解决办法:在Build Settings 中找到 Library Search Paths ,去掉其中的 /// 2.自己集成支付宝SDK时的错误 这个也是路径错误, 解决办法:在自己工程文件夹里建一个文件夹,随便起什么名字.把支付宝所需要的东西都拷贝进去,然后add files,然后找到TARGETS-Build Settings,在里面找到如下位置 把自己新建的文件夹拖动到这个框里面,再次运行就OK了,如果不行可以再多试几次 3.跳转后出现“系统繁

windows下编写的Shell脚本在Linux下运行错误的解决方法

出现这种错误的原因:CR/LF问题,在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令. 两种解决方法: 1.将格式转换为UNIX,“编辑->格式转换(CR/LF)->UNIX”,这样Linux下就能按unix的格式保存文件 2.在vim中,输入:set ff=unix,然后:wq,同样也是转换成unix的格式 cat

linux——查看系统日志错误并解决

http://www.cnblogs.com/milliard/p/5597435.html 国内:中科大源日志名称: System来源: volmgr日期: 2017/1/15 星期日 12:14:58事件 ID: 46任务类别: 无级别: 错误关键字: 经典用户: 暂缺计算机: WIN-QP5VIGL12L1描述:故障转储初始化未成功 ----------------错误 2017/1/15 星期日 12:14:54 volmgr 46 无 ----系统错误:故障转储初始化未成功,事件来源v

SENCHA用cmd创建app时错误的解决方法

SENCHA用cmd创建app时发生错误 提示 unable to locate support framework 之类的问题 可以输入 sencha -sdk 你sdk的目录 generate app APPNAME 你要放app的目录

windows系统正常运行转移到linux系统时出现错误

在windows系统正常运行转移到linux系统时,便出现了一下错误.这种操作系统转移引起的错误,一般可以通过一下的方式解决: 到项目目录中把这个jar放到自己程序的lib包下,若不可以正常运行就再放几个其他可能确实的jar. 加程序异常信息: Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error at com.sun.net.ssl.internal.ssl.RSAClientKeyExchange.<init

Linux 编译时出现类似error: stray &#39;\357&#39; in program的解决方法

原因: 在程序中打入了全角字符 具体分析产生原因: 在编程中,由于打字的快速,按下ctrl键后紧接着按下了space键,由于按下两个键的间隙比较短,导致系统误检测到ctrl + space信号,将输入法从半角切换到全角. 解决方法: 只需将定位的错误行号对应的代码删掉重新输入即可. Linux 编译时出现类似error: stray '\357' in program的解决方法