|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——Altera SoC的Linux内核编译方法 ) P# Q6 c7 e, s& k, Y6 a
" x2 {% i, Z( z2 g/ u+ G
) H4 P8 H F6 A h- ]
- i$ }4 I- y8 c' V. z# P+ A6 l这里介绍如何编译SD Card的image。这里并没有太多的原理需要讲述,但是大多数刚刚接触到linux 嵌入式的朋友还是需要花些时间找编译方法。这里提供了为SoCFPGA编译内核的整个流程。- t. J2 w4 W1 O/ H' t3 w! ~
1 y7 o, [7 q0 N( r ]本人的编译环境:Ubuntu 12.10(说明:本人是使用root登陆执行所有命令的,所以我的命令不涉及到执行权限的问题,如果大家自己嫌每次都需要使用sudo很麻烦,也可以想办法使用root登陆,当然操作不当可能引起系统当机)7 H: B5 W% e9 r. F$ r
3 R8 S! s$ q8 x% x) d编译之前有三点工作需要做:1、 安装交叉编译链。 2、 安装git工具。 3、 下载内核源码。2 X5 W: O; }7 _6 k& n
+ C% h# H; z/ F5 Z9 I, v$ Y
交叉编译链在前面已经提过,这里直接说在linux 上安装的方法。安装前得从网上下载安装文件,我们选择linaro组织提供的ARM-linux编译链,linaro也在定时更新。https://launchpad.net/linaro-toolchain-binaries/trunk/ 这里会列出每次发布出来的交叉编译下载地址。目前最新的版本是2013.10版。5 T1 c( Y, {' i" N5 O* l+ ^, z
在terminal 中输入( Y) z, m# A/ F; M, j6 K
% c7 F8 Z8 u7 k+ C) l2 W5 |$ w6 k$ n
- s$ l" y/ M. ~. _2 P
5 R' X' {% h0 |1 k, A3 r下载编译链。(这里下载的位置可以任意,最好是新建一个专门的文件夹,免得乱了,我这里使用 /blog/toolchain 目录作为范例)# d+ f' q0 y. v2 {) O
完成后需要对文件解压,解压命令为:2 S8 @7 q$ G: }& K8 }: s
- tar jxvf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
6 b6 N. @! D8 K( Q8 E2 I" `$ C
# v6 K$ u) u1 z
/ o: x! e3 ?' v, M6 ]8 N) K9 K$ T$ D! d! x
然后再终端中输入
4 g. t- {2 U4 D! K( d5 D- export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-- u8 [ c7 }5 B1 S
! W, \: U3 V% h$ V9 z: H$ U
/ ]- J0 |( d3 u; v% U, Q" E$ @$ Z
f% e- F. n/ m% n2 F# F. J这样交叉编译链安装就算完成了。, R) \7 A% q) G% E f
, e. E& \, a }2 l7 _9 ]4 ~接下来就是安装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 工具)4 z1 a$ Z& U7 ]1 N. s# ?
$ a+ s& j2 X$ n& w) r1 [
后面的工作就是从rocketboards的git 仓库中获取linux 的源码了。
2 X4 e. v( P6 A, X3 e+ W- git clone gits://git.rocketboards.org/linux-socfpga.git: i. {" \8 C+ b5 U7 i; O
cd linux-socfpga
5 {7 w, T# `$ N+ H, rgit checkout -b kenel_3.12 origin/socfpga-3.12
" |) t+ C( @" x) \* g0 U* D+ r' v
( C2 K# i1 V4 r' L5 W
+ @. E) Z3 f7 i2 b5 c
/ C/ x: t% N- p2 w
# s! g$ d0 `6 L( C+ c(这里kernel 3.12可以任意命令, origin/socfpga-3.12 表示远程版本信息,Altera 从3.7版本开始都有上传到git server上。用户可以用 git branch -r 查看远程的版本号,目前最新的版本已经到3.14)
! s3 R: F. X y% P l3 |% M这样内核源码就已经获取完成。
" [+ t: e! S1 _) \% r3 s5 W* E- J0 b/ n% t
接下来就是内核编译了。依次执行下面的命令% A, y8 V# i3 t- t+ H- N
- export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-, j* O6 X. p. `8 h& u6 [8 z
% B$ v9 a) R' H6 e; x* b
[. [3 v5 F) T
+ g! h. S; S& z& e* m2 k(前面有执行过此处可以不用再执行)3 N" N3 }7 E- N) s; q, Q, p) X; `/ W) r1 v
- make ARCH=arm socfpga_defconfig
( O( A7 s- _0 I# ^: qmake ARCH=arm zImage LOADADDR=0x8000
6 Q( G* e6 y. T8 Z" M( B
) c1 C0 H5 e4 L# \9 p$ k % W4 w( N5 d4 w
3 ^# h$ e1 |2 L( k
9 z0 B0 N% p! ~% J( B此时可以在内核的arch/arm/boot下看到刚编译出来的zImage文件。可以替换掉Boot SD card中的zImage文件后插入板上boot。
8 p# R* r, z& ]- I4 ]! |另外可以执行make dtbs 命令,会在arch/arm/boot/dts 目录中找到socfpga_cyclone5.dtb文件。将此文件更名为socfpga.dtb替换掉SD卡中的dtb文件也可以参与boot。
/ [/ ?0 h0 G' D. X3 X当然这里的dtb文件并不是完全符合DE1_SoC的板级描述,后面会介绍具体作些修改动作。) w# A, `) W0 u3 c3 K3 A# l
当然很多人对于dts文件的作用并不是那么清楚,后面也会根据frame_buffer的image编译和相关源码分析dts文件及在内核驱动中如何使用。
6 d/ ]% Y" J& e- g8 B) D
$ l: c# b* [1 U) O) f$ S' ?+ O; l9 a6 I附:7 i i L6 X+ A& K& P- k' b
如果有多次编译内核的需要,不每次打开电脑或者终端输入export 环境变量的方式比较麻烦,这里介绍每次打开终端自动添加环境变量的方法:3 n) L6 K6 ^6 E9 A" h6 p/ x
使用编辑器打开 /etc/profile,在文件末尾添加语句
) g) z! |6 P# q3 o- export CROSS_COMPILE=arm-none-linux-gnueabi-
3 n8 h( V0 C: m- L- aexport ARCH=arm
( y4 u+ {2 h1 ^. e' C1 h7 lexport LOADADDR=0x8000, q4 F5 f g, I& ^( T
' H9 _, w: U5 P0 o/ {! O& E+ o& h; R3 `
/ E' P) b m& S
* z2 w0 Q9 z8 O
" u$ l7 |& [0 d9 Y( A7 G
这样在编译内核时候直接执行下面两条命令
0 K& Z! G* C% J7 q3 K- V# B: ^- make socfpga_defconfig& M' @& Z4 C; w' x
make zImage
1 G- c# p' l: x0 G3 f. N& p& X/ d' M* R$ l. @/ M4 ~# ?
3 C1 w( y1 _' p9 G& e% b
: X; t b( E' b: r" c2 K6 u) Z
, K* E0 j: c3 Y- B ?即可编译内核 7 y' _( z+ d4 i7 _) @2 N
|
|