TA的每日心情 | 怒 2019-11-20 15:22 |
|---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
+ {9 V& W4 w/ V& I3 _' j好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。
( S, d7 W/ K4 {% n, d" a
, c$ K. X; V, x" L 但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~
/ F* F0 |' X, y
9 U6 e7 b& r4 p. S8 d7 W" t% K 下载好后扔进虚拟机里面解压好
) L2 f5 f9 Z9 i, X' X* B
: d! A6 M$ v) S! \! s1 O
$ L- j- T X6 j% [
$ d( X0 K m+ C2 y 然后又要稍微改改代码了~7 {+ ]/ o+ e2 ^% z
1 B# s2 |9 E0 P# E* u0 V t
openrisc-3.1\arch\openrisc\boot\dts
4 p+ G- V7 c2 [1 M) n/ N* W' @
[. A- j$ S: K, H
6 _: A+ h- J" Y" X/ N
& N" d. G8 w6 v d* @3 e0 z5 w 打开吧,文件名字就懒得修改了) @: O, Y8 p& d0 D& E
. {/ m1 Q' L3 I6 o, f0 n8 g
这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog
, F1 A6 c2 K. \; K9 Y% I
9 R9 S: U3 [) D$ x x, E
4 n) i- ~( k6 D% ]4 ^
0 S2 d9 n9 k( n1 I* e$ _ 第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~& ~+ F/ Z T6 [) V
0 y% ]3 ~3 I H* ~ O
" ?; ^9 Y% L8 c1 B; _; K; E! \, T' _0 [' q' t, {- ?' u# E
& Y# e/ x+ z" j0 p; ] 12行,我在wishbone上SDRAM的地址是0,这里@0
' H' h) U* `) {8 J- T/ P I
5 Q8 m3 D, J$ K0 X- j, A* x g8 \% _7 V 14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉% }+ Z" s L* _
& S* }- z3 Q- P8 O
6 l* \& Z/ ~6 S& b# _
# b8 Q v' N0 V( S 23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M
$ D4 L2 t% m6 m' A# Q
3 \9 f3 h( F: _1 t
+ i$ L' @: H) I/ C* _# m9 H. X
- k/ s) q: Y" L. G/ M 38行,wishbone上UART的地址是0x90000000,所以这里@90000000
6 F) ^. v( T! Z y7 I! z4 u5 Q" V6 n3 |. Y# Z
对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。4 Q& D5 k/ s2 h$ w" p: U
( a9 t, i: x; | 41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的* M% r! s, G/ B2 e7 m
5 ~% s: U( e- u& x1 X4 }
: `4 I1 M: w) k" `% w$ G% `) i
( x) A; B9 f" l p5 d( S, ~
中断号,我UART使用的是2号中断。
8 W+ |* c1 R( d" ?' Q2 t/ O* o. `3 U) f+ h! ^1 c/ n
42行,UART的频率,我的是40M
4 O2 ?" o" m- s) r& n% K1 E3 ?% H, u5 p2 @4 k& f, R2 e
Q5 L! F! l0 Z! N
! q$ B6 n6 l7 @2 w( Y 再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。
G( f1 W+ s3 L! z+ n$ g" X0 J, K `- A) v
( R0 J: l3 W4 X1 l9 T* U
( K. G% b7 L" @- J! {. `/ \ 再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~1 E, ^: `; x3 c/ y3 p7 C
! h8 R9 F" J) a( F
Device-tree简单地就修改到这里了~3 M( O% E9 i; v- l. c2 f, K9 N! g0 {4 `
. S! ?- o" @ |$ U% L# T, o0 G/ k
然后就轮到目录openrisc-3.1\arch\openrisc\mm下* L& `, s1 J+ l& e6 {
* p8 a! R. q8 o `3 M1 J' ~
3 F9 X6 H, b% F+ `4 e, L. u* H c# G
Open 之,. u3 K+ o! [ I
4 G5 r1 H6 _8 x& S
' C) R9 B! h. _/ T6 U; h V
7 P6 V: E! F( p3 b7 w2 W2 T
84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。
) N F5 }8 X/ }' C
z" k; E* C5 i$ M 往下点
8 r- f. ^! ~& L' D5 V( {) r8 m6 p- N& l& e7 e7 ?2 N
! m2 x" j# {! h
' A# p1 `- }: {; u4 u3 m7 h# p 111行,这里也加# X/ ]. T) \8 z8 R
! W' z4 m9 ]" U# \ OK!
6 F+ r e+ U! n1 Z7 k! T
0 m. n2 g% d) H4 m 继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件 t) Z3 D5 j! i) C* j
v6 ^5 `: Z3 e
]0 ]+ t4 g: |" N7 ]9 J5 Q6 |2 |1 x" @( w$ N9 [! p& k# l* l
在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此
5 I5 M9 k. f* W6 |; U
2 j; W+ V" j: P$ p4 I P8 ^ 惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。
f/ H* K, y& e* D" n. {7 d! s2 V- J. n8 }
4 W1 Z! k0 k: p4 h: j
% h9 h* h5 k. D7 A5 @
直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages6 K9 l. ?, y$ e) Z/ ^2 P5 S. T
' k' ]% G/ P: f. S% n
好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~
! e/ c4 b" G9 L3 \* e$ r
2 E5 L: X" m {2 Q5 ~1 }4 ] E
2 i8 p6 A: b8 u8 C0 d: p" [* J% a: M
cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-+ v0 _& ]+ G- H! v% I0 M' D
1 B' @, V) N6 b0 L+ `8 F
( ], ?; N/ W/ G; e$ o D) u
& N* o. B* l p" v 这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。
, U# g! _6 J: U' W' D
+ M" E8 y' ], U7 M6 r) k& M1 y 其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。* z) D3 [ p# X/ i+ s
% K) U. Y0 j. z
4 {: G' d2 s5 e
! {- n: R W! K- I
退出来就可以直接make1 K' B3 a x) I' f% i
" J: w. F1 d5 O6 w. ~2 N
' @( [0 B1 e/ C/ b$ T' i2 ^5 ?
& W3 F" K" c$ b$ ~! h" K 最后会生成vmlinux.bin文件,
1 p% C8 c5 w7 H V; u, ?( s$ d& u7 g! r& n
然后就是用这个vmlinux.bin制作成u-boot识别的镜像。
3 }- u% E' D- T# {4 T t5 V* `# c0 }
首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件: H, R* }1 x1 z) t0 Q' W( L
4 I$ | f. N4 l4 p& N" S3 l! D
l0 v' \2 ]. p% k+ \3 V. n5 ]1 v, k" s/ @
然后打开terminal中,将这个mkimage复制到/usr/bin中
; h- w) G2 G8 Z1 C( A
2 j! M. b# s5 H* e# H
! ?4 `1 |9 B! m2 c+ i
6 g! \1 a+ f3 v P4 U3 Q 测试mkimage/ R) ~, I: K- y$ {4 @
2 }! Q# G2 Z% U; q
/ U B5 [ Z& I s2 F
( F: t0 ^! i6 f 一切正常!!!!!!
6 B# [. J& H" w) I. y0 j5 R8 z6 {% ~# o" \4 M6 d& m$ ^( g
# [$ Q$ F/ ~ ` 然后在镜像出输入相关的命令! t. d9 f5 l7 K6 V" V
$ c9 E" v( I: N$ p5 J& i mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage
6 o9 I; ]; h2 L/ M- }9 v! {" k4 S" @. G" c/ ?1 S- v6 K: p: |
) @' f( Z$ W1 F: w% _* a& ^9 \; w
/ W* u- m. I* C. m( ~: j3 r& g% } 这样就可以利用u-boot去download并启动linux镜像了。5 p" h2 D9 d4 a/ e
) S8 R7 A# C3 D
现在把制作好的u-boot镜像uImage单独拉出来放着。' m1 t$ _* q+ M. l& M. K
/ m7 X. P& j; ~& ]) ^: T
然后在windows用一个叫做tftp32的程序来提供tftp网络服务器# N: b) E- J- O# j9 q8 H$ h$ D9 g* g
1 H. l2 t* K0 j ?
. d0 S/ V1 j1 x6 ]
; z6 L7 H- e: R5 {1 H( o; b r 设置好本机IP和uImage路径,
1 Q5 _9 ^; ]. d: f1 b7 i. t! v
- P$ L; K) _2 M6 b& ~
7 f2 Z' y$ J. l- H
+ x; x. V- M7 `) ~6 N
接下来就在u-boot上输出命令来load进uImage
1 M% J$ O% Q, D( ^ h, b2 E* ^3 E
+ r" S2 C) e' V( ?. \% D+ t! s, h/ F9 m" Z5 g! }8 k
然后输出bootm,可以看到启动信息
7 q7 w( B( K% h
8 t) M5 Z) C: O6 e( b; }1 Q
& w1 @, e# }# g- H
2 W5 k! N- \- j$ j
% C7 s+ J3 Y& g, y4 u3 Y& i
5 J% _2 Z! m6 j0 K% e
9 k) O' p3 L) e( D5 ]8 }( o" P( f7 v
至此,基本上kernel是通的了。9 ]% y/ d' N& Y) M$ l
/ k7 x; S2 A" s- I" O) \ Y0 y' F/ v& r2 F7 ]( ?9 \
由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel3 `6 A4 x- N# h" i E) e% L! @5 w0 j4 [
# m! Z0 s0 g# U/ E& X: f0 z
然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~6 d, ]7 q4 e5 d4 W( P
/ ~( [: K9 B" H& M& }& O
Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~7 v/ w7 j) I3 r3 L% j1 K- l
, q. p& D' M; W8 [# T Z' X# J/ P
介绍一下我现在在看的教材吧~0 ?2 I* {' Z7 l3 F/ z: `2 k
5 r8 u) X' E) ^7 K$ i! }8 I2 J! S( L5 k M 《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~' G7 @1 Q' Z( b) S8 ^0 I: b8 e
5 G, H. g' q& l8 u( U* e8 a+ N 《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······) L8 y' Q) ~* L
) |, N3 a. B) x; Q9 T9 B/ O2 G; ?# F 《The_C_Programming_Language》,不断重复地看,加深C应用能力······
- \5 M5 s" Y0 N9 j" ?1 V' o. v! Y
. \, X* G U" ]4 K4 A5 C" [/ _8 s. R; q ] 《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······
( a- |& p0 j6 n0 u: u8 u+ m: A5 C9 A& [
《操作系统精髓与设计原理第5版》,补充地看操作系统概念······/ g- x# D1 ]6 f6 H
8 F" `7 D2 M4 e2 R# |0 h 希望大家还有更好的建议和好书推荐推荐~
) l8 J! o7 o. W+ Y6 d+ [% a2 b3 B+ O8 b
% |4 U3 k5 G! z b
p& k* _/ u- E) j& o6 @ |
|