|
SoC的Linux内核编译方法
这里介绍如何编译SD Card的image。这里并没有太多的原理需要讲述,但是大多数刚刚接触到linux 嵌入式的朋友还是需要花些时间找编译方法。这里提供了为SoCFPGA编译内核的整个流程。
本人的编译环境:Ubuntu 12.10(说明:本人是使用root登陆执行所有命令的,所以我的命令不涉及到执行权限的问题,如果大家自己嫌每次都需要使用sudo很麻烦,也可以想办法使用root登陆,当然操作不当可能引起系统当机)
编译之前有三点工作需要做:1、 安装交叉编译链。 2、 安装git工具。 3、 下载内核源码。
交叉编译链在前面已经提过,这里直接说在linux 上安装的方法。安装前得从网上下载安装文件,我们选择linaro组织提供的arm-linux编译链,linaro也在定时更新。https://launchpad.net/linaro-toolchain-binaries/trunk/ 这里会列出每次发布出来的交叉编译下载地址。目前最新的版本是2013.10版。
在terminal 中输入
wget https://launchpad.net/linaro-too ... 13.10_linux.tar.bz2
复制代码
下载编译链。(这里下载的位置可以任意,最好是新建一个专门的文件夹,免得乱了,我这里使用 /blog/toolchain 目录作为范例)
完成后需要对文件解压,解压命令为:
tar jxvf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
复制代码
然后再终端中输入
export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-
复制代码
这样交叉编译链安装就算完成了。
接下来就是安装git工具了。git 是类似于svn 的版本控制工具了。他的开发者就是linux内核的发明者linus torvalds。关于git 的安装可以参考http://www.douban.com/note/263056199/ 这个链接的源码安装方法。安装完成后输入git --version 命令可以查看到 git version 1.x.x的信息说明安装成功了。(在ubuntu 环境下也可以使用apt-get install git 命令安装git 工具)
后面的工作就是从rocketboards的git 仓库中获取linux 的源码了。
git clone gits://git.rocketboards.org/linux-socfpga.git
cd linux-socfpga
git checkout -b kenel_3.12 origin/socfpga-3.12
复制代码
(这里kernel 3.12可以任意命令, origin/socfpga-3.12 表示远程版本信息,Altera 从3.7版本开始都有上传到git server上。用户可以用 git branch -r 查看远程的版本号,目前最新的版本已经到3.14)
这样内核源码就已经获取完成。
接下来就是内核编译了。依次执行下面的命令
export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-
复制代码
(前面有执行过此处可以不用再执行)
make ARCH=arm socfpga_defconfig
make ARCH=arm zImage LOADADDR=0x8000
复制代码
此时可以在内核的arch/arm/boot下看到刚编译出来的zImage文件。可以替换掉Boot SD card中的zImage文件后插入板上boot。
另外可以执行make dtbs 命令,会在arch/arm/boot/dts 目录中找到socfpga_cyclone5.dtb文件。将此文件更名为socfpga.dtb替换掉SD卡中的dtb文件也可以参与boot。
当然这里的dtb文件并不是完全符合DE1_SoC的板级描述,后面会介绍具体作些修改动作。
当然很多人对于dts文件的作用并不是那么清楚,后面也会根据frame_buffer的image编译和相关源码分析dts文件及在内核驱动中如何使用。
附:
如果有多次编译内核的需要,不每次打开电脑或者终端输入export 环境变量的方式比较麻烦,这里介绍每次打开终端自动添加环境变量的方法:
使用编辑器打开 /etc/profile,在文件末尾添加语句
export CROSS_COMPILE=arm-none-linux-gnueabi-
export ARCH=arm
export LOADADDR=0x8000
复制代码
这样在编译内核时候直接执行下面两条命令
make socfpga_defconfig
make zImage
复制代码
即可编译内核 |
|