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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x

      V! M2 z* V% F, ]好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。
    2 d- n6 Q. X3 N$ g6 F' e
    # a, _& i, ?; A7 t       但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~8 Y% e6 y: {. l/ w

    # t0 n' w# p" n1 w  G8 a" B       下载好后扔进虚拟机里面解压好, L; _! U5 i$ i% V9 w; a3 t

    ) e! ?2 d  `: U1 h7 d
    ! d5 R9 g/ Y: S+ X- ?0 R0 B% k# \% U4 N4 b" D% H3 L
            然后又要稍微改改代码了~
    0 J' u* e+ e( m4 Q; t9 v( h; `# r( ?- P. n! T$ \2 I. Z
            openrisc-3.1\arch\openrisc\boot\dts
    $ M: u5 u# E" [8 l% Y2 K& Q" ]7 T: q: p* a- e3 Y

    / ?9 J: R# o/ A5 K# R: B
    * ~7 _/ i9 M) e6 {        打开吧,文件名字就懒得修改了
    . H; k  s6 P$ p0 c; w1 ]$ d
    8 k: d. E% J5 [6 ?" E        这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog
    & o% [& @6 y9 W4 f0 A6 S, F
    # q- o: o! g8 ^9 v" t6 A) q8 j
    0 M+ I, C0 ?' ~& S! d
    ' {+ O( K# T9 }, j* E5 q        第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~9 D& L0 l* C) P7 P. X& L

    # J. `7 v, }9 C# ]; m
    " _; M% G$ b& @, |
    + O3 }4 F+ Z; A
    . I9 F2 X$ ~5 `7 Z( g1 B7 G, H        12行,我在wishbone上SDRAM的地址是0,这里@0
    : j1 h0 _1 r( R( K# [7 F% D( ~% \+ S! H. r$ c
            14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉
    4 U8 v  ^; Z% k7 h" U
      Q/ |8 V0 L' H6 V3 A# F) @
    8 N. a2 `( n  _, t( [  @/ q$ l* R2 a( ~" R
             23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M* n/ G3 ~! M1 C' B$ N9 A

    % g  b! z0 h' [
    3 j6 {# \2 C2 n5 r8 ?
    $ E  `% K, q  l4 C6 X/ y" f        38行,wishbone上UART的地址是0x90000000,所以这里@90000000( c  n& O, H6 F& b
    ) N( A, ^( j1 |
            对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。
    4 c7 w) b' {! r- J2 \
    5 C8 j1 {' k0 V% K        41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的9 u$ B; V2 Y  `# u4 j7 {2 ]) P

    / M1 H# M- N6 i8 N8 C # P: v- m5 W. x6 v+ q5 E

    8 L: I6 K1 ?" P7 H! |! x        中断号,我UART使用的是2号中断。0 s% t+ c/ s2 ]5 H. Y

    % X  D8 G: e4 Z0 t* V( Q        42行,UART的频率,我的是40M
    3 n0 ~; A% h  r, ?4 N% G" E# f5 I8 h6 o% S; N' x

    ( h  U" ~0 w* }+ {8 l, }8 `0 h) U& y
            再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。/ P0 a! W1 [8 W6 I8 Y

    . l: T0 w: D/ C# p% C
    # G3 u. [4 \/ h) z$ K+ |
    ' @% E; w0 u1 }3 n; G4 R1 v, e0 z        再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~: d& ^; T, L0 t! j7 t4 j0 k

    . q0 ?  y  V4 b: j8 U        Device-tree简单地就修改到这里了~
    4 \' ~6 ^, p* i/ }& V' |8 E8 ^4 k4 M
            然后就轮到目录openrisc-3.1\arch\openrisc\mm下
    $ Y) N! E  d+ W7 W4 }1 y
    . Z) g0 I. G0 I1 r
    3 N; X- ]$ r8 b1 P- Y" p
    ' q% a1 t& ?4 t7 x1 ?7 L0 L6 V$ L        Open 之,
    4 X) y# N9 M, r6 g9 J8 @+ \5 T# r/ K2 d! `8 r, s  ?

    $ M  u5 A& ?- b4 x. a1 {$ r
    7 F5 v0 V$ J9 R& l4 Q; Q         84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。
    & t+ l  c& o, s# H
    . I, N" k) y; k, w6 l7 _8 D9 X" d- C        往下点/ _1 m, ?6 Y9 w$ W

    * x: Q, O5 g7 _% N1 p  ?  u1 g
    $ A6 \+ g6 F: N) ]! {$ d
    6 l, C- c* i% u        111行,这里也加
    " x. Y" y" d6 s- l! ^& i& ^& U1 x' d: c7 B4 \. B
            OK!1 N0 ?; ?# a9 g0 g2 k$ ^0 o
    & j( v+ ]: ?. O) e  c
            继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件
    ( p0 F# |- j0 @% I5 k  `' h5 X* T- M
    : }1 t, g9 ]: }% g  O8 k
    $ q+ |4 l6 O3 t" m  I2 e7 }% `: T& @5 B* {
            在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此  C2 n8 P! N5 K( v

    $ P& K" T% n7 h6 h4 M# W        惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。) s8 R: f: ^" g

    ! C  C. V; [  w : V) f0 C. L# a' E
    2 W# O; I9 D8 o9 i/ u0 a9 R
            直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages, r0 p/ E  N1 m" n/ ]5 L
    . w( }9 {  V9 `* R3 K
            好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~3 i# j/ ]' `# ~+ G' [. ?* N
    " Z9 U% Y6 b( z+ V1 v& m9 B* n
    ( M& q" J$ h( |

    5 ^. r% X, k* p& T- D        cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-1 z/ p# k1 f5 q# L3 K; W

    ! r. e  X9 Q6 C) w, r) Q3 O * H" U2 i  L  J- U* C

    " k& ]; ]7 C+ ^6 V+ v' x        这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。+ U! [' M! i' D9 z

    " {. ^# Z: f- t        其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。1 N8 ~# `/ e) s+ \8 S
    4 i' b; p+ B( m0 Q& f% ]% c
    * n$ }- ~- o, O! E3 Z0 }9 X- F6 ]$ z
    5 D9 m$ {' ]( h0 g3 S8 Q( Z9 ~
            退出来就可以直接make' ~9 I" O8 g4 |. W# d4 q

    ( P; r5 s: _3 {3 H+ L! z4 k- R! b
    ; g/ r5 ^% n1 h3 v6 X6 n2 a' h8 v) d% ?+ M/ X$ G6 A1 C
            最后会生成vmlinux.bin文件,: d8 o( i* b' x' W3 V( \: ~4 v

      s3 [  H* U! _; y5 s- ~        然后就是用这个vmlinux.bin制作成u-boot识别的镜像。3 t) H: v: o: X4 Q# K& V0 g" N; H4 `& a

    # Y: G5 s9 ]4 i* x! X1 k7 n        首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件
    . ~' M0 |" o1 h  l
    * F; a# Y& @3 p4 G- \ / \+ j# Z7 p/ K5 B$ z0 O+ A! _

    0 M$ ]4 l; Z0 ]% s        然后打开terminal中,将这个mkimage复制到/usr/bin中
    0 P7 j! A, a# [1 u% H0 }
    ) x" S% Z3 i0 J
    & m  a) O. w3 u$ N% ^: S9 U9 j; y& R9 n" E  A, B
            测试mkimage' V0 v# n0 G6 C! ?) Q8 i+ Z

    2 H5 s& r: N. O  t/ X : m- ?# u$ z, w5 D
    + h$ g% y% c8 p/ x, A
            一切正常!!!!!!# U6 v5 O! O7 `- X  _3 E

    8 x/ {  x- h! B0 q       ! q9 a4 v6 P$ B3 r) L1 B
            然后在镜像出输入相关的命令6 l# N! J# U+ N

    + t1 l5 W0 i  [( A0 s. Z; R        mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage% B+ C$ R: E2 E3 j7 \7 ^
    2 W8 Y/ K& Y9 Q0 Z

    , |2 n- \6 l: X6 k, w
    ) d, f. I8 P) h% @; j1 Y. @3 l# }        这样就可以利用u-boot去download并启动linux镜像了。
    1 r4 F2 l: c! e4 ~/ n7 D" d2 M2 ?* o& E- k) E
            现在把制作好的u-boot镜像uImage单独拉出来放着。
    2 I2 ]+ O5 A/ h- q0 W
    ( C5 N# e5 ?2 G  H        然后在windows用一个叫做tftp32的程序来提供tftp网络服务器8 u3 V+ l& m& f- Y
    , t' f, g) P; P
    ( M- W% o: O( B$ n7 f6 P0 r' r
    1 V) {3 D0 f# U8 f3 Y5 A1 {' v3 X
            设置好本机IP和uImage路径,7 a7 A% P6 H5 X0 C" ?. l9 I
    3 L3 U4 Q9 E( S+ j; Z3 F$ V

    ( ^  @! w# h* x2 r8 ?, _/ i' k% H! i
            接下来就在u-boot上输出命令来load进uImage
    / ~) I" h9 G2 l' n5 D
    2 T0 ]1 k* n! U1 f: d2 L3 o 4 _4 a2 c  F. Z
    : f) `/ x1 u# H/ @" h' E5 U
            然后输出bootm,可以看到启动信息  g. ~* X' I2 j" x+ @5 t4 c( x
    ; Z% O+ |8 x  c6 Z4 a3 }7 C
    & P- u. D( j4 e- M" ^5 K% o5 J
    ( d3 V$ ^$ b' l" v/ b4 H" C
    ' X! b. o3 Q' j

    4 u4 K) Y: x; j7 ?  N1 p9 a7 O& _5 s1 d
    ) p/ F: F/ Z& i6 g2 @
            至此,基本上kernel是通的了。5 \) v- \6 B* q9 ?, a$ V1 y
    * ?$ N+ |0 L; y  @  O9 u* P

    ( g: b1 s: D0 z" {$ z$ m        由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel9 b) I/ w& @: I* N% f1 Y

    4 r' s7 ?5 W7 I8 o" b4 j        然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~
    6 N, T# ~6 u5 A6 p
    : R: D$ H, c9 ]4 |; X$ j) A( G        Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~  n; U! h  F& V
    % q+ o  g$ u7 g4 {/ B  R' K! k  Q( U
            介绍一下我现在在看的教材吧~4 D# M" B9 N0 r$ V( z/ I$ Q4 h  \
    & f' ^  a: |4 ]6 @- b1 Y. k6 j9 |2 ?! |
            《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~" i: T  W; R( z8 `  A7 X0 K* N: ?

    3 O5 M/ T- V5 ^; b# [2 |        《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······# p2 S/ i) m; v- v

    ( @" Y: m$ X) k1 f        《The_C_Programming_Language》,不断重复地看,加深C应用能力······& s' n( k3 ^  s

    ! B  }" H6 c2 c$ W9 g        《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······( a9 v" {+ K7 k; m2 P8 u7 S1 c

    / ~5 a* a1 _" Y5 u+ o& R, A3 M        《操作系统精髓与设计原理第5版》,补充地看操作系统概念······
    # K' C5 K. V2 s/ x. g2 ]' j8 E
    ) J# i+ y6 w# p2 Q2 g7 a        希望大家还有更好的建议和好书推荐推荐~
    1 Q" w' W, v5 G+ l$ `
    - t# e! z1 H: Q! R# w4 H0 c8 J) h. L. R0 c+ i

    # r% q$ |; _( ^

    该用户从未签到

    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 06:21 , Processed in 0.187500 second(s), 26 queries , Gzip On.

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

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

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