Mac OSX EI Capitan(10.11.5)上使用crosstool-ng 1.22.0 建立树莓派2B的编译环境

背景介绍


树莓派自带的编译工具是基于Linux的,在Mac OSX上是无法正常使用的,因此比较简单的方法就是使用crosstool-ng来建立交叉编译环境。

配置编译环境


1.安装HomeBrew,方便各种工具的安装

参考让Mac也能拥有apt-get类似的功能——Brew

2.使用HomeBrew安装crosstool-ng

3.链接Mac OSX上的installginstallMac OSX上没有ginstall

如果不执行命令,则会报错

4.使用HomeBrew安装expat

不执行此命令,我的电脑会出现crosstool-ng在配置expat的时候失败,但是两者使用的版本并不相同,另外貌似出错后,重试即可,不需要安装expat,但是稳妥起见,还是安装好了。
5.创建大小写区分的磁盘分区文件,并挂载(如果你系统创建的时候,系统分区以及区分大小写,则不必此项操作)

参考Mac OSX下执行crosstool-ng提示“Your file system ‘xxxx’  is *not* case-sensitive!”

6.在刚刚创建并挂载的大小写区分的磁盘上执行配置命令

7.修改刚刚命令生成在当前目录下的配置文件

找到

禁止使用静态链接(Mac OSX下,无法提供对于libc的静态链接,只能动态链接)

8.执行构建命令

构建中遇到的问题


如果构建出错,可以使用

后面的数字代表几个并行的任务,单个任务可以更方便的查看出错的信息,多任务并发会导致日志打印的非常混乱。

在构建(ct-ng build)的时候遇到任何问题,都应该查看当前构建目录下的build.log文件,这个文件中详细记录了构建的过程信息,详细的出错信息等。
由于crosstool-ng在构建过程中需要去服务器上下载源代码,难免出现文件下载不完整的情况,这种情况下,可以从build.log文件中看到如下的内容:

则说明下载的源代码出现了问题。最容易出现这个问题的是gcc.以gcc-5.2.0为例子,修正的方法如下:

简单解释一下代码,tarballs存储了从服务器上下载的全部源代码的压缩包,解压缩出现问题,因此必须删除,让crosstool-ng去重新下载,扩展名为.extracting文件为crosstool-ng的标记文件,用来标识这个包是不是已经被解压缩过,一旦这个文件存在crosstool-ng就认为对应的工具已经就绪了,就不会处理这个工具了,最后删除的是工具源代码的目录。

如果提示安装binutils的时候失败,如下所示:

查看build.log可以看到如下的内容:

这个BUG的原因是由于GCC的版本问题导致的,低于4.7版本的GCC无法理解这个语法,尽管Mac Osx已经使用最新的LLVM,但是遗憾的是,最新的LLVM并没有支持这个语法。解决方法如下:

找到如下代码

修改为:

如果出现了"fatal error: bracket nesting level exceeded maximum of 256",如下所示:

则修改方法如下:

在出现的界面中选择"Paths and misc options"项目
Crosstool-NG-PathAndMiscOptions

在第二级界面中不断下拉,找到"Extra host compiler flags",增加"-fbracket-depth=512",这个选项。

Crosstool-NG-PathAndMiscOptions-ExtraHostCompilerFlags

然后重新执行

如果出现错误:

这个是由于LLVM目前的版本还无法正确的理解部分GCC的汇编部分的写法,导致编译失败,而这部分的语法一般都是用在优化的时候出现错误,因此我们需要禁用这部分的优化,使用"Paths and misc options"->"Extra host compiler flags"增加 "-fno-unroll-loops"。如下图:
Crosstool-NG-PathAndMiscOptions-ExtraHostCompilerFlags-NoUnrollloops
如果出现如下错误:

这个问题是由于编译的时候,同时打开的文件数量超过了256导致的,修复方式为在shell中增大同时打开的文件数量限制到1024

然后在同一个shell中继续执行

如果出现如下错误,则直接忽略即可:

至于其他问题,貌似重试一下就可以解决了。

编译树莓派源代码


Ubuntu 16.04 (x64)树莓派B+(Raspberry Pi  B+)源代码编译

参考链接


发布者

《Mac OSX EI Capitan(10.11.5)上使用crosstool-ng 1.22.0 建立树莓派2B的编译环境》上有3条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注