找回密码
 注册
关于网站域名变更的通知
查看: 645|回复: 3
打印 上一主题 下一主题

linux学习之路_or1200移植linux(续)

[复制链接]
  • TA的每日心情

    2019-11-20 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-7-16 10:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    0 n" A& N9 d& K$ ]& F, k9 s% h7 J
    好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。7 ~% \  ^8 R: `( C
    5 l6 l5 q+ }9 c' v
           但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~/ r0 G# i: P! |* E; }
    4 M+ S. ~- Q7 R- S9 b8 m
           下载好后扔进虚拟机里面解压好- @2 {' T0 K# l+ r; l: N

    7 @1 t8 I# y" [4 n8 s
    5 l! E4 _, c# r( A: ^* M
    : V7 o( H9 ]; T7 p        然后又要稍微改改代码了~
    ' D3 ]) _( Y  C  r* q5 `& D
    8 C  `" R; Y6 E+ p% q* L9 {+ q        openrisc-3.1\arch\openrisc\boot\dts" I# m0 L: v" r! z" _( s* s
    0 y: n+ }" d% V4 s& R, }

    % r1 |4 e* y5 b; d
    + U; Z5 w5 f0 n( t% {' A0 S* |        打开吧,文件名字就懒得修改了' i" ]" O7 T  y
    # n, W# z" v4 K1 Z
            这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog
    6 h' m8 @4 o, E8 a/ _! g: y/ `" S" _1 \  \, K
    " L! ~+ u* p7 p6 E0 ?
    7 z, z2 `8 _! p
            第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~
    7 N3 ?1 J0 ^! o7 k7 ]; S8 a% Q
    & G5 {7 U8 {- S$ q # i5 t1 f6 ~6 r7 a* ]

    ! i. X1 E, g% b
    + r  ~2 [! {/ Y0 i, s; X        12行,我在wishbone上SDRAM的地址是0,这里@0
    - n- k5 u& N# `4 I( j! J7 o) e0 o+ o3 E, \; t
            14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉
    " {: C9 c8 c- a6 d3 j9 u# ~' t
    % T2 y7 z! [$ A- A- j   p& K" f! v+ q( l, g* `

    3 ?9 i# Y  I9 J; e! z         23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M) {7 V5 e1 ~# a! D1 X
    - [2 R) {5 K* e& @2 o6 d$ U4 X3 c

    2 r/ T% P* K+ \1 R
    : `& Y' o' e1 m" e! {# u0 ~6 i% c        38行,wishbone上UART的地址是0x90000000,所以这里@90000000
    # ~/ v0 D6 o2 q  Y7 Q. W% b2 R% @) k9 @( N
            对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。
    ) z9 u8 I& \% \0 K7 p. S+ P! X7 L) g
    # F2 n& w+ O7 r! d. n        41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的
    1 Y# L0 f) A6 J( ~
    ! J: G' W1 S5 S. g
    " i, D2 q2 |7 U& d8 y# K- F
    ) z- H( O& Q6 ]4 b# B) R/ r        中断号,我UART使用的是2号中断。
    . M  K" x% g7 }& b- C) S& b
    , B- E1 h0 H- v: @        42行,UART的频率,我的是40M/ A0 k: O" s+ M- q8 j5 S
    " a9 [- j  {$ h

    & I, G! R5 n4 m! w+ i% H
    & r/ S1 b) z; i: X. g) J        再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。# ~6 b+ j* T7 w' @8 x8 Q& Q& D
    5 N$ E  d/ F2 H$ M. h! U

    ) ?0 R% I- U! D! ?$ G0 C
    , w* a' }2 A& g" c7 g& c        再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~
    2 V' I0 ?; O" h0 E& A. o& p3 [! ?7 Q3 n2 _" C) S
            Device-tree简单地就修改到这里了~! G$ U* K7 C( c" h

    . g2 B/ R& A! I. G        然后就轮到目录openrisc-3.1\arch\openrisc\mm下
    6 G4 C: e& \4 A& _, ]0 x1 R+ y0 o& u0 j8 A' w) U
    " x+ J  b7 A  M# m$ S2 P3 l- ^
    2 f, J. Y" Q( M: E( J/ x( m
            Open 之,  v' t' ^2 T- W' x. [

      S+ Q+ E: Q: D) l( J# [$ H) l8 E1 N
    $ [0 _9 b2 x. Q0 y; \  R6 r" ~% N7 C) _' j9 b0 P
             84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。: \+ t# ~( Q/ d* S/ e
    - T0 c" c/ h8 y0 E
            往下点" ]% s, Z0 A% z# i! I1 t
    ) A6 F* J6 u9 ^2 o0 c

    3 k$ E% V5 {9 Z; P
    8 t6 R' @, w  W7 Z( D+ N) \( R4 m0 S        111行,这里也加) R% ]0 z' _7 o5 F7 Z
    ! R' ~2 t0 _  L* ~
            OK!' R2 C$ e( b5 _7 ~
    7 E2 g5 r0 ?' `- Q; {2 Y+ Z, q
            继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件
    7 C. f  R8 @% [7 V, [% W
    & c0 ?# c* Y$ u& r7 H$ A/ o
    / _) _' S2 [. s0 A) h1 {, \6 K3 m. p/ L3 c
            在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此( z4 `* B4 l0 O& u
    ; c8 _' {- H* b/ X$ s
            惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。- r0 h- ?. ^2 E# S! I7 A' {
    - y2 y/ c; _8 f2 h; f$ F3 w
    $ u/ n( L; O! M! G# R
    - y' ~; Y4 a0 t
            直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages
    5 w) b( Z+ g9 b3 H' W. G
    ) k# n4 m/ X# n        好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~' k* F+ @& f8 n8 a( d5 _  E4 T& ^
    1 b8 p9 s: Q; i
    , B* [2 V, q/ z6 }9 z9 n) \" g

    % K% q$ a# q, b3 D/ S/ k+ C        cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-1 [& W1 r: Q5 b  _
    8 k' D* C& Z. h6 S% W

    1 a; f" Q/ \+ E" o' L$ b3 C0 x' b: x" N, I; e
            这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。
    2 R# T  Q% x4 \7 C( O. O% Y& K: U+ s. r. G! ]) C4 e
            其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。
    * }4 K+ ?# F; [. o! ^4 |2 ]! N; L9 j9 q0 o; y' Z/ ~  ~
    ! H- ]5 ~% Z" h/ w8 u# o
    / x% b" p& r* p* I4 {# t
            退出来就可以直接make
    0 M1 D1 E8 z# S6 f2 r& _
    5 x- y* u3 |7 o7 p8 t+ A
    4 {; z7 Z4 ]1 P, ?2 Y
    0 r/ h! c- W4 H& j$ {        最后会生成vmlinux.bin文件,
    1 |# B' l+ Q) b( t9 y( S" ^3 {9 i# f: A2 r* h
            然后就是用这个vmlinux.bin制作成u-boot识别的镜像。' Y. C; w: l* i1 L  V

    : K% i: P" l& g9 e7 U1 G( q        首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件2 ~. I8 i* T$ o/ U( l
    ! G" Y1 H- ?2 M- a& A. [$ y% ^

    $ c" f$ `/ }# ~: \. l) p
    7 s0 v  \9 m; G1 @  @! d        然后打开terminal中,将这个mkimage复制到/usr/bin中3 O( s0 Q$ M, r9 q; M
    + S; I3 G- `4 k( e1 r, [+ _
    & T" s5 X% g, J% Y) @) n* n: [
    * h  n$ u* }7 H/ e; i
            测试mkimage! x; r0 F7 O! e" ]
    9 u- Z; l! Z6 b+ A: d! o3 _

    6 [$ i: @, V" d" |  U7 e
    ! m. [- X9 T7 K. d        一切正常!!!!!!% C" S# ]6 J) z* ?; N: D2 r; C

    : P/ |4 R' k5 T$ I       6 r  y# _$ E1 h
            然后在镜像出输入相关的命令
    - P5 c  f: {6 W1 g/ t3 O
    " s+ L8 d$ i: E        mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage# {) c  r9 O2 z( T, B3 K
    2 v* Y9 Z1 M1 E0 @
    - z  A4 ^% [% B0 e

    6 b! F  q- O5 y& T        这样就可以利用u-boot去download并启动linux镜像了。
    1 v( ]* Z! k3 Y! J$ ^# Y8 _4 g1 }/ p# Z7 q  S. W( {# e
            现在把制作好的u-boot镜像uImage单独拉出来放着。
    " n7 ]) P/ I9 x) a8 K- D3 \4 j( W7 c7 y  O' i& g$ y
            然后在windows用一个叫做tftp32的程序来提供tftp网络服务器% M5 B, c* X0 b+ n8 s6 {3 W

    ) m% B$ G) S8 v% m
    % e( S  |( j2 u& B$ Q
    * u8 p: c$ t% [9 z6 t* n$ o1 o: m        设置好本机IP和uImage路径,
    % y2 Y+ ~' A9 d# E" E, n5 C6 z4 Y9 P& W( m! Z: _0 K

    3 u* {5 M3 _0 G6 Q* u
    : H+ ~0 L6 i; x3 _! ]* O: B: j" \        接下来就在u-boot上输出命令来load进uImage7 ^+ O2 P7 Z( {/ L3 m

    ! z; V" |0 x1 M& ^/ d6 A
    4 Z- N2 H+ E: l6 T( ]& W' d9 Z4 ?0 Z' Z+ P, G8 `
            然后输出bootm,可以看到启动信息) |$ `# S% d$ X6 @3 ]
    8 L3 |+ x9 [2 n0 m0 @- _8 d
    ( z2 C8 Z5 S" X, {
    % K7 @9 U/ X* n2 M

    + s( y' ]( L9 c2 h# J& E
      Q# {1 _% n5 E. W7 e, z* c7 N$ J5 ]5 {& ^- c- k+ B# A

    9 j1 D! \: ]5 d, S- g: w: c        至此,基本上kernel是通的了。
    9 R' {" }+ m- O( g2 S+ y4 s$ z6 t# C# e

    % w+ ^9 f. b4 U- w$ Q  P2 J        由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel
    3 ^0 N$ s, c% j) Y7 ~# Q% z/ l4 S7 r9 ^
            然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~
    ( L) J6 j/ l" y1 d5 ^
    ( B! N% Y6 U5 b- {8 X! O        Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~) d! @4 P) @; c$ ~

    5 q* X6 v+ p0 i; L5 K9 B        介绍一下我现在在看的教材吧~5 ?& m% X: I# E& h5 B

    2 M* d/ m9 k0 ?0 x1 I' Y        《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~+ f7 I$ O: w1 R, _
    2 N2 ~1 K- W$ K: g
            《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······1 e  @2 h2 i$ v! y) u
    ! T( V) L$ Z1 N- e8 I4 Z. v# n
            《The_C_Programming_Language》,不断重复地看,加深C应用能力······
    : j' E5 @( `3 J0 m0 M6 h8 }6 s* w. j8 ]  D* b, z
            《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······( D- [( T3 i. X

    1 C" e  l; l3 v6 [+ m% ~        《操作系统精髓与设计原理第5版》,补充地看操作系统概念······6 N1 }( C# n- M& M" [  _5 k1 `: g

    $ s* b! _4 S! \$ u: D& x        希望大家还有更好的建议和好书推荐推荐~; @' a( y8 T4 g9 h" _' w

    ; c& J: }/ H3 a+ J* S% d0 w$ n. H, [

    8 [: p' ?: s. T5 R2 h

    该用户从未签到

    2#
    发表于 2021-7-16 13:40 | 只看该作者
    or1200移植linux

    该用户从未签到

    3#
    发表于 2021-7-16 13:41 | 只看该作者
    or1200移植linux

    该用户从未签到

    4#
    发表于 2021-7-16 13:43 | 只看该作者
    or1200移植linux
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-24 15:20 , Processed in 0.218750 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表