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

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

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

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

    [LV.1]初来乍到

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

    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 @

    该用户从未签到

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

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 08:00 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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