Ubuntu14.04.1安装arm-gcc交叉编译Linux内核心得

这篇内容人家写了好久的,转载请注明出处!!

像有网友骂的那样,Ubnuntu越做越远离Linux的可定制性。交叉编译本来挺简单的事儿因为它的原因搞得异常复杂!

Ubuntu默认不支持root登录。安装时候的第一个用户有超级用户的权限,但执行命令前要先追加sodu转换为超级用户身份。一切问题由它引起。我一直没能配好环境变量,最后索性把跟环境变量有关的步骤都跳了过去才编译成功!

0.vmWare的一个注意事项

Ubuntu kylin 14.04.1安装时有个巨大的bug,要找网络。但是这个时候网络还没配置呢!所以实机安装的时候,要拔网线;虚拟机安装的时候,先不追加网卡,就能把这一步跳过去。等安装完成后再追加网卡。

 

1.准备阶段

1.1 追加用户laowang

sodu adduser laowang

出现UNIX提示的时候输入密码,再次确认。后面的各种名字神马的都可以不填

1.2 赋予laowang超级用户权限

usermod -g sudo laowang

注意 这条命令实际上是将laowang加入sudo组中。sudo组就是Ubuntu14里的超级用户组。

 

2.安装GCC

2.1 安装通用版GCC

通用gcc的名字是 arm-linux-gcc

2.1.1 下载

地址:http://www.friendlyarm.net/dl.php?file=arm-linux-gcc-4.4.3.tgz

2.1.2 解压缩.安装

sudo tar -vzxf arm-linux-gcc-4.4.3.tgz

其实就是解压缩就是了。因为整个过程经常发生权限不够用的情况,索性全部用sudo执行。

2.1.3 做link

sudo ln -s /opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-* /usr/bin/

本人的方法跟网上其他人的不同就在这里。因为我不设置环境变量(其实是因为设不上= =)。其实说穿了一文不值:既然环境变量设不上,那我就把你加到已经存在的环境变量里好了。

ln是Linux下做链接的命令,-s是系统文件。 第一个路径是刚才gcc解压缩出来的默认路径,第二个是通常应用软件的安装路径。编译过程中不止用到一个gcc,所以要把arm-linux-开头的都链过去。

链接做好之后,有一个小办法进行测试:arm-linux-gcc -v, 如果能正常显示版本号,则链接成功;如果报找不到命令,请不要往下看了,自己再自行搜索其他解决方案。

2.2 安装Ubuntu自带的gcc【可选】

这个gcc的名字是 arm-linux-gnueabihf-

sudo apt-get install gcc-arm-linux-gnueabihf

在网上还能搜到这样的方案,但语焉不详。如果你被这个命令带沟里了的话,没必要去重做我这里的2.1的。其实这个gcc也是可以用的,只不过后面的步骤需要一点点小改动而已。

 

3.编译Linux内核

3.1 下载

地址:https://www.kernel.org/

3.2 解压缩

sudo tar -vxf linux-3.18.4.tar.xz

如果你不知道替换掉对应的不同版本的话,就别干程序员这行了。还有执行完这条命令后,记得进到解出的那个folder里。

3.3 内核配置文件

这一步非常容易被网上那些方法带进沟里!这也是我写这篇东西的主要目的。

我的方法是不需要配置环境变量的,所以这一步以及下一步你是找不到export 命令的。而且,我也没有修改Makefile文件。

3.3.1 make XXX_defconfig 【可选】

sudo make ARCH=arm at91x40_defconfig

加粗部分一定要加!因为不设环境变量,所以不加这个参数的话就会生成x86的配置文件,导致接下来编译通不过。

斜体部分是默认配置的模板,你可以替换成自己的配置。内核里默认支持了好多种模板,都放在/arch/arm/configs/下面,以_defconfig结尾。如果不加粗体部分的参数的话,会报Make失败,因为在/arch/x86/下找不到模板。如果找不到模板的话,可以不用这种方法生成配置文件。网上还有让执行命令 cp /arch/arm/configs/XXX_defconfig ./.config的。这么做有一个坏处,因为模板里的东西是比较少的,所以Make的时候要先要求你把没配置的内容追加上,属实麻烦,不推荐。

3.3.2 make menuconfig 【可选】

sudo make ARCH=arm menuconfig

加粗部分一定要加!否则还是会进入x86的配置画面。至于具体怎么配置,就看具体需要了。只为能通过编译的话,全部默认也是可以的。其中有一项【Cross-compiler tool prefix】要你填交叉编译器的名字。在我的方法里,这项是可以不填的!如果非要填,请向上去找这个颜色的部分,千万别多加,也别少加。设置完成后保存退出就好了。

Ubuntu14.04.1下,直接执行这条命令是会失败的!哈哈!

需要先装一个包:

sudo apt-get install libncurses5-dev

3.3.3 make config【可选】

sudo make ARCH=arm config

没啥好说的。纯命令行界面。如果不是3.3.2执行不了,正常不会有人这么自虐的。

3.3.1~3.3.3不是必须一起执行的,当你执行了其中的一步或者几步之后,发现目录下已经生成了.config文件的时候,就可以进行下一步了。当然这个文件可能是错的,现象就是接下来编译失败。那时你需要删除.config,重新进行上面的步骤(之一)。

3.4 编译

sudo make ARCH=arm CROSS_COMPILE=arm-linux-

加粗的部分必须要加。CROSS_COMPILE=是指明编译器的名字。如果你安装的是步骤2.1版的gcc,就直接执行这条命令就可以了;如果是步骤2.2版的,请替换成arm-linux-gnueabihf-

编译压缩镜像的命令是

sudo make ARCH=arm CROSS_COMPILE=arm-linux- bzImage,据说是因为某个版本以后,不支持zImage了。

 

以上。

有问题问,没问题直接收藏,转载请注明出处,不知道我说啥的直接略过。留没意义的废话我会发飙哦!

已有3条评论

  1. 偶八会转载的 看八懂~

  2. linux高手呀。我从来都是遇到问题才来找答案的,嘻嘻

    1. 我也是在搜到的各种资料说得一知半解碰了满头包之后才写了这篇东西,希望能帮到人。

你好,新朋友。留言前请先填写昵称邮箱