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

Posted mmseh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 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编译系统时错误的解决的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:AccessDeniedException。用户:arn:aws:iam::xxx:user/xxx 无权执行:lambda:CreateEventSourceMapping on reso

SQL 代码在在线编译器上运行良好,但在 Linux 终端中由 MariaDB 编译时失败(错误号:150)

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

linux编译安装时常见错误解决办法

Linux系统中,源码编译安装软件包编译过程有问题可以继续安装步骤吗?