树莓派 交叉编译 php,自己编译给树莓派RaspberryPi的交叉编译工具

说到交叉编译工具,真是血泪史。搞了快两天,才终于迂回搞定。老规矩,先放Script传送门,build/build-toolchain.sh

一开始我以为这东西用的人多,交叉编译工具应该不是事儿,去官网下一个就行了,可是我去GitHub一看,这toolchain最近的更新也是三年前,这……能用?先下载吧,同时各种搜,感觉我没有走错地方,大家就是用的这一款!

可是我忘了我是OSX。不出所料,在我的电脑上跑不了。而且看了下这个toolchain还是给ARMv6编的好吗,现在明明就是ARMv7了!这么跑性能不受影响吗?更让我无语的是板子上的gcc也是ARMv6的……😰编译个内核什么的那么慢,官方的toolchain又不能用,自己编译势在必行。

又是一通各种搜,搜到了个别人2014年编译的mac用toolchain,试了试,普通的程序没问题,编kernel编不过。搜到了个比较详细的在Mac上编译的blog,可惜也是几年前的,跟现在的环境不一样,各种出状况又goole解决,最后还是编译crosstool不成功。可能这一两年,不论是crosstool,OSX,还是GCC,都已经又改了不少吧。

最后,我放弃了,毕竟还是要做iOS开发的,不敢随便乱sudo,还是上虚拟机吧。竭尽全力把所有能删的都删了,看看剩余的18G空间(128G MBP你懂的),哭着做了个Debian的虚拟机……为了节约,GUI都不要,命令行的最小系统。后来还是吃亏在这上面了,编译到一半空间不够,临时扩展磁盘,fdisk,format,mount,ln -s😞所以,根据我经验,不管在哪里,请至少至少至少准备10G有效空间!!!(12G是我调整后整个虚拟机大小,最后还剩了2G;如果系统已经有了,那free space至少8G)

废话说完,正经操作其实不多,主要就是装一个神器crosstool-ng,配置好,然后交给它编译交叉编译工具就行了!具体如下:你看到的是非授权版本!爬虫凶猛,请尊重知识产权!

转载请注明出处:http://conanwhf.github.io/2016/01/14/rpi-toolchain/

虚拟机配置

基于最纯粹最小系统,改个vi,加个sudo账户,如果系统以前就用可以跳过。

sudo apt-get install -y vim

echo “deb ALL=(ALL) NOPASSWD: ALL” | sudo tee -a /etc/sudoers

环境准备

因为是新系统,要装的库实在太多,我一边编,一边google,无数次出错了就多装一个库再来,这些是最精简的要求了,一般的系统里应该很多都已经装了

sudo apt-get -y update

sudo apt-get install -y bison flex texinfo gawk automake subversion

sudo apt-get install -y gperf help2man make libtool libncurses5-dev

sudo apt-get install -y gcj-jdk python-dev g++

这个libtool我不知道为什么,明明装了却总说没装,于是我自己手动装了一遍。不过后来想想,可能应该装libtool-dev?没去验证

git clone git://git.savannah.gnu.org/libtool.git

cd libtool

./configure; make; make install

编译crosstool-nggit clone https://github.com/crosstool-ng/crosstool-ng.git

cd crosstool-ng

./bootstrap

./configure --prefix=/opt/crosstool-ng

make

make install

然后加环境变量export PATH=$PATH:/opt/crosstool-ng/bin

编译交叉编译工具(不能是root用户)

检查tools版本

编译过程中要用到很多库,有几个比较关键的库的版本需要提前看好,否则可能导致编译失败。这个是要在树莓派的终端看的,不是指编译环境。

Glibc版本:lld —v

GCC版本:gcc —v

目标板Kernel版本:uname -r。目前我用的最新版本是Linux-4.1.15

配置编译选项首先去一个随便什么地方(要有读写权限)建立一个文件夹作为当前目录,用来存放临时的配置文件mkdir toolchain

cd toolchain

crosstool-ng是有一些不同平台的default配置的,他们放在crosstool-ng/samples/$PLATFORM/crosstool.config。很幸运树莓派2B正好是有默认配置的,可以用:

ct-ng armv7-rpi2-linux-gnueabihf

来调用,然后就会自动保存为.config文件,这个跟kernel有点像。

默认的配置还是有些地方需要调整,我们要手动配置一下:

ct-ng menuconfig

这里面的界面就非常像Kernel的Config了。基于默认配置,需要修改的部分不多,重要的有以下几个:

Paths and misc options —>

[X] Try features marked as EXPERIMENTAL

(3) Number of parallel jobs //同时进行编译的线程,如果机器好点的话可以改大点加快速度

Toolchain options —>

(rpi2) Tuple’s vendor string //一个标识符,会出现在最终编译工具的文件名上

Operating System —>

Linux kernel version() //内核版本,之前记录下来的

C-library —>

glibc version () // Glibc版本

C compiler —>

gcc version () //GCC版本

Companion libraries —>

这里面有一些其他的库的版本选择,不太会影响编译成功与否,有需要可以改

最后看看还有什么自己的特殊需要,例如目标Path之类,改完以后保存

编译

一句话:

ct-ng build

然后等着吧!首先还会下载GCC之类的源码,所以准备好网络环境。如果没有出错的话,也要等个两三个钟头。完成之后,会在~/xtool(默认设置)里看到最终的交叉编译工具。拿去用吧!我测试了普通程序、内核、驱动,都跑得好好的,搞定收工!😄

有关Mac的几句话

关于Mac的OSX系统,多废话两句。在Mac上的crosstool-ng之所以用不了,一是因为很多工具没有,二是即使有也太过于陈旧,第三点最重要:Mac上的GCC等一套工具并不是基于GNU的,而是Apple自己弄的Clang。虽然我们有brew这样的神器,但GCC, grep, awk, libtool, automake……这么多关键的库都要重来,又不能影响系统,就算是写脚本做软链接也是相当浩大的工程。所以,如果不是对自己特别有信心,又特别爱折腾,我真心建议还是用虚拟机吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值