Arndale Octa Board Exynos5420开发板之系统(Linaro Ubuntu)内核移植

来源:互联网 发布:网络运维与管理 邮发 编辑:程序博客网 时间:2024/06/05 07:28

必须仔细看,请注意看::::这边文章讲述的内核移植是针对Arndale Octa Board Exynos5420开发板的可用系统之一(Linaro Ubuntu)而言的,请注意并不是针对Arndale Octa Board Exynos5420开发板原本就稍写在eMMC上的android 4.2.2系统的内核移植。如果做原android系统的内核移植的,请移步。

还有,关于系统的内核移植可以在开发板上进行,也可以在PC机上进行。这博文的内核编译是在PC机上,板上进行的编译移植稍微有些差别。


OK,开始我们的主题:在PC机上编译内核,并将内核移植到Arndale Octa Board Exynos5420开发板上。


Step1:材料及环境准备。

材料:

1.

一张已经制作好的Linaro Ubuntu系统并且能够正常的在Arndale Octa Board Exynos5420开发板上启动的SD卡。Linaro Ubunt系统SD卡的制作,请移步我的另一篇博文http://blog.csdn.net/jevons_zzf/article/details/41786173

2.

不同版本的内核文件。下载地址http://releases.linaro.org/14.09/components/kernel/linux-linaro-stable-lsk/,文件格式类似于linux-linaro-stable-3.14.19-2014.09.tar.bz2,其中3.14.19为内核版本号,2014.09为发行时间。

    页面如下:

   

环境:(主要就是安装针对arm的gcc交叉编译工具)

1.

PC机上安装交叉编译工具gcc。这里有一点需要说明一下,正常来说PC机上的Ubuntu系统自带有gcc编译工具,然而此自带gcc是    针对PC机的,简单说来就是使用自带gcc编译出来的东西只能应用在PC机上,而我们所针对的目标是Arndale Octa Board Exynos5420开发板,也即arm,所以我们需要在安装针对arm的交叉编译工具gcc,使其编译出来的东西能够应用在arm目标机上。 具体安装如下:终端输入命令sudo apt-get install gcc-arm-linux-gnueabif来安装,从命令我们就能看出,这是针对arm的gcc编译工具。

安装成功之后终端输入命令whereis arm-linux-gnueabihf-gcc来查看你的arm gcc编译工具的位置,如下图:这里请一定记住你arm gcc编译工具的路径,因为接下来都要用到。比如我安装好之后的arm gcc编译工具的路径为/usr/bin/arm-linux-gnueabihf-gcc。

当能够正常显示你的arm gcc编译工具的路径时,就表示安装已经成功了,接下来就是可以使用它来编译我们想要的东西了。


Step2:解压内核源码

将下载下来的内核压缩文件进行解压,获取内核的源码树。终端进入内核压缩文件所在目录,并执行命令sudo tar -xvf linux-linaro-stable-3.14.19-2014.09.tar.bz2 (我下载的内核为linux-linaro-stable-3.14.19-2014.09.tar.bz2),这一步稍微会花点时间,解压完成之后在相同目录下就会出现内核的源码文件目录linux-linaro-stable-3.14.19-2014.09,如下:

至此,我们的准备工作基本完成,总结一下就是:一张Linaro Ubuntu系统的SD卡,安装了ARM gcc交叉编译工具的Ubuntu系统PC机,不同于SD卡内核版本的内核源码。


Step3:查看SD卡Linaro Ubuntu系统的内核版本和以及其对应的加载地址入口地址等。

开发本选用SD卡启动,然后通过minicom进入到串口调试模式(如果不懂如何使用minicom进入调试模式的话,请自行百度搜狗)

1.

查看内核加载地址和入口地址,启动板子,进入minicom之后重新启动板子,你会看到如下界面:

命令行输入boot后回车启动系统:

在罗列出来的一系列启动信息中,在靠近一开始的位置查找内核的加载地址和入口地址(这一点也很重要),如下图:

加载地址Load Address: 20008000

入口地址Entry Point:      20008000

2.

查看内核版本号,当系统启动完毕之后命令输入uname -r,回车后,系统将输出对应的版本号,如图为3.14.7



接下来就是关于内核的编译和移植了 。

首先是内核编译:

Step4:(PC机上编译内核需要注意的一点是编译目标机和编译工具的选择)  

这里也先介绍一下编译内核常用的几条命令,给刚接触内核编译的伙伴带来点方便:

make mrproper:这个操作会将以前进行国的内核功能选择文件都删除掉,使内核源码回归为最初始的状态。一般在第一次编译内核时使用。

make clean:这个操作只是删除类似文件之类的编译过程生成的中间文件,不会删除设置文件。一般会在第二次或者往后的重新编译过程中使用。

make defconfig/make menuconfig/make xconfig/make gconfig:通过hua 图形化界面的形式供我们配置内核的功能,最后在根目录下生成.config文件,这份文件才是编译内核真正所需要的文件。

make oldconfig:通过使用已存在的.config文件,使用该文件内的设置值为默认值,只将新版本内核内的功能选项列出让用户选择,可以简化内核的挑选过程。

make/make uImage/bzImage:根据需要编译内核镜像文件

make modules:编译模块

make modules_install:安装模块,这个模块安装的默认路径是./lib/modules/x.x.x下,所以一般情况下,我们在安装的时候会另外用INSTALL_MOD_PATH来赋予其他的安装路径,防止默认路径下的安装最终会影响我们PC机的工作。

make install:将我们编译好的所有东西都提取出来并放在指定路径下。


在下面的编译过程中,我们用到的命令形式均是sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- XXXXX

解释一下这条命令格式。“ARCH=arm”是选择我们的目标机,为arm linux内核,符合我们的开发板,“CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf-”是选择我们的编译工具,这里的路径就是Step1中我们提到的安装好arm gcc编译工具之后必须记下来的gcc路径。如果不进行这两者的选择,你编译出来的内核镜像文件将无法应用在我们的开发板上。

开始编译:

1.

由于是第一次编译,我们进入内核根目录下执行sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- mrproper命令(清除掉内核源码中的残留文件),类似的如果是第二次编译,则执行如sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- clean下图:

2.

同样根目录下,执行sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- exynos_defconfig(这里的配置文件选择exynos_defconfig也是为生成.config文件,我们现在暂时不用menuconfig等来配置自己的内核功能,而是选用源码中本来就代用的针对exynos5420的最基础的默认配置,这份文件放在源码的./arch/arm/configs目录下,里面还有其他很多针对不同板子的默认配置,比如mini2440_defconfig等等)

最后一句话指明,配置已经写到.config文件中了。


3.

根目录下,终端执行命令sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- LOADADDR=0x20008000 uImage。(这里需要注意两点,一是LOADADDR=0x20008000表示编译生成的镜像文件的加载地址,这个地址要和在Step3中查看的原来的加载地址保持一致,二是生成uImage镜像文件,因为Linaro Ubuntu系统里的镜像文件是uImage格式的),然后就是漫长的等待了。

编译成功之后,你会看到如下信息:(显示arch/arm/boot/uImage镜像已经生成,同时它的加载地址和入口地址均是20008000),这个uImage镜像就是我们接下来要移植的文件。


4.移植内核文件uImage.

将系统SD卡带读卡器插入到电脑中,在弹出的boot界面中将uImage用我们在上面编译生成的uImage镜像文件取代(建议将弹出的boot界面中的uImage做好备份,然后再将我们生成的uImage镜像文件拷贝进去),如下图:


完成之后重新用SD卡启动开发板,查看现在的系统内核版本,如下图:(现在的内核版本已经成功变成3.14.19了)


5.编译模块并安装模块

这一步与内核的移植没有特别大的关系,但是新系统的使用却一定需要编译模块和安装模块,废话不多说。回到PC上,终端分别输入命令sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- modules和sudo make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=/home/zefeng/kernel/modulesDIR(这是我的模块安装路径),见图



谢谢!!!希望能对你有所帮助。

内核的配置和编译移植等是很繁琐的,问题也总是会有的,不过遇到问题的时候仔细看看终端上出现错误的提示,然后再慢慢解决。总会搞定的。     


0 0
原创粉丝点击