Linux交叉编译环境搭建和内核编译

(我这里是全程使用root用户安装的,有些步骤会形成默认安装路径的不一样,若对linux不熟练请谨慎使用root!)linux

安装交叉编译工具c++

a)要想在x86桌面平台对ARM架构的嵌入式CPU编译程序就须要用到交叉编译工具链,而交叉编译工具链通常都是在Linux环境下使用的,因此咱们就须要在Ubuntu下安装:git

注:本文使用的交叉编译工具链版本为 2012.03由嵌入式老师提供的,其中github

xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin是编译Linux内核须要的交叉编译器shell

xilinx-2012.03-83-arm-xilinx-gnueabi.bin是编译standalone应用程序须要的交叉编译器
vim


b)由于我安装了虚拟机工具,因此我能够直接在Windows平台下直接复制xilinx-2012.03-79-arm-xilinx-linux-gnueabi.bin并粘贴到虚拟机的用户桌面浏览器

c)接着我须要执行这个交叉编译工具安装包,和Windows平台安装程序不一样的是,咱们须要在Ubuntu的终端界面中进行命令行的安装启动。一样的咱们启动终端界面而后依次输入以下命令:bash


以下图所示,咱们在执行这个bin文件时会遇到一个64位操做系统的问题,并给出了一个解决此问题的网址:服务器


d)在浏览器中打开这个网址,咱们会看到问题的描述和如何解决:架构


e)而后咱们安装该说明,在命令行依次输入以下命令:

sudo apt-get update

在输入登陆密码后,Ubuntu便开始执行软件库更新操做:


接着输入:sudo apt-get install libgtk2.0-0:i386 libxtst6:i386 gtk2-engines-murrine:i386 \
lib32stdc++6 libxt6:i386 libdbus-glib-1-2:i386 libasound2:i386


f)而后Ubuntu就会自动去服务器上下载所需的软件和库文件并安装和设置:这步骤不贴图了……

g)以后再在同一终端下从新执行一遍bin文件,此次又提示了一个关于shell的错误并直接给出了解决办法,按照其提示,在终端中输入:.sudo dpkg-reconfigure -plow dash,在弹出的图形界面中选择No


h)再次执行bin文件,这是便能看到在Windows平台下最熟悉的图形向导安装界面弹出:


i)首先在欢迎界面中直接点Next继续:


j)接着选择赞成安装条款,并点Next继续:


k)重要提示这里直接点Next继续:


i)选择典型安装便可(字体蓝色高亮表示选中)并Next继续:


m)保持默认路径不变并记住此路径,后面配置的时候还会用到:


n)在PATH环境变量这里选择第二项,Next继续:


o)在建立快捷方式这里选择默认选项(第二项),Next继续:


p)最后点击Install开始安装交叉编译工具链:


q)此时能看到安装进度条显示

r)最后勾选上手指南选项,该指南会告诉咱们如何配置该交叉编译工具链,Next继续

s)点击Done完成交叉编译工具链的安装

t)同时上手向导指南也会出现,咱们已完成安装,须要对其进行一步的环境变量设置

这里的installdir指的就是交叉编译工具链的安装路径!

首先咱们找到该安装路径如图所示:


接着打开一个终端窗口,使用nano或vim两个经常使用的文本编辑器(根据我的喜爱),

nano .bashrc

在 .bashrc文件的最后一行,添加以下两行而后保存:

注意:这里添加的是安装路径,看好本身是安装在了root里仍是home里。


以后输入 source .bashrc

arm-xilinx-linux-gnueabi-g++ -v

u)当看到以下图所示的gcc version 4.6.3的版本号显示时,即表示交叉编译环境已经搭建成功!



哈哈哈哈!



内核源码获取

a)要从GitHub网站获取源码,就须要安装git工具。因此在Ubuntu下新开一个终端界面,而后输入sudo apt-get install git,输入密码后,Ubuntu会从服务器上检索该软件,并提出须要下载安装,输入y赞成后开始下载安装。

安装完成后接着在终端中输入 git clone https://github.com/Digilent/linux-digilent.git

接着git就会从GitHub网站上去下载由Digilent针对其Zynq产品维护的Linux内核源代码,下载完成后,咱们就能在当前目录下看到一个linux-digilent的目录,如图所示,这里面就是咱们一下子要编译的Linux内核源码。




配置并编译内核源码

如今开始编译并编译内核源码,首先咱们要对用户环境变量再编辑一次。新开一个终端界面,在 .bashrc文件的最后一行输入以下两段,保存:


接着在终端输入 source .bashrc

echo $CROSS_COMPILE

echo $ARCH

若是能看到终端分别输出arm-xilinx-linux-gnueabi-和arm,则表示交叉编译工具链前缀和目标编译平台已经生效,如图:


而后咱们就须要切换到内核源码所在目录配置内核,在终端输入

cd linux-digilent

make digilent_zed_defconfig

此时咱们能看到一个针对Zedboard的初始默认配置文件被写入到.config文件:

(这里遇到了一个错误待解决)

错误的缘由应该是下载的内核版本缺失了该文件,为此我找到了一个很是草率的解决办法……


我找到了目录下的另一个文件来进行内核编译


接着输入 make menuconfig

此时若是出现错误提示,就输入该命令来安装ncurses-dev程序包

sudo apt-get install ncurses-dev

而后咱们就进入到了linux内核的菜单配置界面,如图所示


咱们能够在菜单配置界面的左上角看到该配置是读取刚写入的 .config文件,而且编译平台是arm,和咱们在$ARCH里指定的同样,你能够根据本身须要来进行配置,这里选择保持默认的配置,用键盘切换到Exit回车退出。

完成内核编译前的最终配置:



接着在终端中输入以下命令:make 就能够看到开始编译内核,整个编译过程大概须要10到15分钟。

当看到以下输出时,便表示内核镜像文件已经编译完成,并保存在 arch/arm/boot目录下,其中Image文件是未压缩的内核镜像,zImage是压缩过的内核镜像:(不一样的系统文件名Image可能略有差别)


我的感受应该是编译成功了……(⊙o⊙)…