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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    / ^; _' x' ]0 A' W* K; V' S6 h
    好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。6 x! j* M6 p/ P7 @- i' L
    * x8 x% a3 d3 ]
           但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~
    / t3 g1 s2 u, p7 a, k4 R+ u# G, q, D- u) l4 i
           下载好后扔进虚拟机里面解压好3 S" u( g+ b5 d& y% i( v1 ]
    * v9 W6 u& x/ W2 d* K' j" \" S& z

    , k# C* r* U. D8 J; S: f* j* T3 x& k9 E
            然后又要稍微改改代码了~
    3 P' r% \& M; \1 E) L2 i* |6 Q8 B8 q$ \2 I; K- J1 H: W* ^, f
            openrisc-3.1\arch\openrisc\boot\dts
    ; O+ S5 z! E+ `1 L/ D5 n8 `5 }
    . v  n2 K+ m9 y( X6 `
    - G1 s/ [' k. G  e5 D- }; Y) ^7 k. e3 g  A% t: \8 x. j2 K5 Y
            打开吧,文件名字就懒得修改了
    ) d5 _4 O& Y: X, v3 N6 y0 ^( C
    & d  m2 `. H' r) R, I        这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog( ~1 D5 M" j0 B7 P9 j9 ~/ I
    6 `" R7 }2 B+ l5 D
    9 [/ Z& m# f: |: c$ b0 z
    # l6 T' [/ J& R2 D* Z0 R' g
            第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~6 I0 d* k+ v& D/ A
    " {5 p& v; E' @5 P

    " M& E/ l% G2 L) T" }" u0 _
    6 p% q& J* U2 W2 m/ ]$ p+ s& C1 Z! H! y  J. J9 e0 J5 [
            12行,我在wishbone上SDRAM的地址是0,这里@0
    - W; r2 ?& ]1 l6 X7 [
      j6 J7 O5 v: u! b6 k        14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉
    & R% u, L- s* u1 e# k3 _: `3 x. Y6 ]3 R( T5 F9 z, G
    1 X' |& o* l' M
    * Y4 U7 J: a7 G2 W
             23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M
    ' B! |3 p/ v' ]5 {1 Z) y% l0 p1 |* U
    : }1 n) w0 @9 J9 g
    7 |. |* v. C2 j* G; P
            38行,wishbone上UART的地址是0x90000000,所以这里@90000000
    7 N# O* w5 n7 i  _1 z1 J; R
    : i! b+ n! ]3 L7 a* K        对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。/ z' o/ W# h$ C0 i& Q. \4 Q" z
    # C! \* H! K9 P7 x/ ~( F1 `* R
            41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的
    1 E- u& z! R" ?
    ) z8 Z0 @/ D  q0 [& r
    ' y" O3 N& ^& z6 H6 S" W* Z
    4 X, K& g( p( w: z4 \* Z* Q6 n        中断号,我UART使用的是2号中断。: J6 D. z" \& H. A' V
    ! p7 e9 r5 \3 y8 G8 t
            42行,UART的频率,我的是40M7 `9 k9 {$ ~7 V8 \7 `% k! G
    # {1 @4 e) [! d+ M( T

    6 F2 C; y3 n; W* U( ~( j' {% k" ?
    # Z( n4 B2 w& T, Q4 P2 ~        再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。; i* y2 D0 P( M% \. D
    1 S" q  U: k' j) P7 J9 R! m# a

    1 i' l8 w, Y: ]* O0 u) l* X, J3 Q" O6 K2 T$ B- F2 ^6 [
            再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~: z( J$ B& a1 D/ `6 l( @

    9 p. ]3 l5 }& x. p& j        Device-tree简单地就修改到这里了~  F% X, ]) A! k7 O' {! N& o
    5 D  d# M" |; N  b% U
            然后就轮到目录openrisc-3.1\arch\openrisc\mm下
    7 F) o1 C7 {( S: ~# b3 @8 O0 {. R! A  ]' u9 \, [5 F2 c6 Q  e
    ! O; h9 ^6 W* S' ?7 _

    6 c$ F: {/ t4 L        Open 之,) w( c3 @! j" ?1 b- K0 K
    ; r$ I7 ^6 I& ]% C0 _- ^. Y. i, J
    ' v2 y6 p' B1 ~* \- Z, M, d
    # T* T; ]1 ~; ~* a/ @. R* {( |: {
             84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。! G* Q- |9 a) q

    0 D' a1 P' @' V' B, O        往下点
    ( h; C$ p3 Z1 u
    ' w9 {* O* s! d- H& z! v# N
    4 ^# t+ K  }9 d* U+ a7 ~) r; S9 x7 s5 l6 }: B" z
            111行,这里也加
    & j4 O; ~, V3 k+ M3 a6 A9 G' ~
    ) U" @7 ?1 b- O. k2 m        OK!
    - k0 x* M* F! R! t; g+ S
    8 B$ @/ [7 ^$ Q" w/ R        继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件
    & R* M4 ~2 V" d! b, G9 o" u) V  [6 ^. P' T5 E# c; t
    8 i2 N. ^1 M  u, w; h

    + s2 N3 f0 M8 |/ f& z* L        在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此. v* o& ?8 X" P# q; K. C0 K

    0 K9 u" @0 c4 M: K0 \* }        惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。
    6 I  G, |0 q- W  d+ N1 t/ e
    1 _9 Y, m7 x8 f! {/ ~1 \( v. I
    # B5 ?0 W; s. p- F# s" t
      H* r: F* s8 q, [1 `5 Q        直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages  r( D1 [6 {# C
    / k* x- k; \/ m! f2 v
            好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~. q+ j; K2 {( E9 K- ]

    1 X4 d/ K. w) [7 z! s& q8 x ! q( p  W# ~# V/ O& L3 n1 i& Z, X% R

    * k& ?: B; V& k8 i0 ]        cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-5 X: c3 _! ]% B+ E7 z: R

    - W- c7 x( b* a   d# t3 }' r8 G0 w5 Y+ b. P" g7 N& n
    ; m3 b, s" n5 Y$ J3 {+ o. @
            这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。
    ) ?9 I0 Q! t4 J& Y- m+ f9 i2 d7 _- k
    0 N: J- B* h% ?/ `/ U6 ]. m2 o: P        其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。" C+ Q! J0 X% N  `. L" J: y8 j

    * f" e3 u' ?& m2 ~/ G; [+ b / u8 O& d, o# b" R: n
    ( y0 q+ P/ R. A' H) t* D
            退出来就可以直接make! n8 a8 k# t% P6 q5 n2 {8 G

    $ _1 B, {+ V$ k4 |! |6 D: ~; { ) i8 a) E" J( M2 F# B  X- V2 \

    ' ?, @! d; T1 z3 }1 n7 L        最后会生成vmlinux.bin文件,) H1 S6 Q( x. ^" [! c
    1 I+ b1 n( t7 M: E9 f6 u' d
            然后就是用这个vmlinux.bin制作成u-boot识别的镜像。
    6 B: C5 r/ o: b+ A8 ^5 _* V9 E: k% z, O8 P: E9 `
            首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件
    $ m& {( ^1 l% {5 o  w0 ]
    ) K/ D. j1 D3 P3 G% [+ E" r 7 U; o/ K9 r2 A" Y7 K
    - L1 Q$ w  e3 V' W, z1 k
            然后打开terminal中,将这个mkimage复制到/usr/bin中" o- W+ c/ A+ z2 d' _5 g

    # P- n% X, v: g. _ 7 Y1 I3 h, h2 M
    3 Y8 [$ x" ?- }9 C( z- z+ {! w
            测试mkimage
    ; ]7 @* b' X' Q: B& B1 I+ U* x8 h% f; I% @$ b$ Y. ~

    * }) D+ e$ b: l! E$ h  R4 K! |% X
    " q( U6 N$ {  {        一切正常!!!!!!  P" b1 R5 ]3 m. \: d: R( S2 p
    ) y4 g( j- b$ D; [% M
          
    5 f* t2 y6 ^  v/ V4 v; [0 {        然后在镜像出输入相关的命令
    2 N. B9 o! b: [$ t
    % E( p3 P% f( q" @        mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage' j4 V- q* k  {6 t

    * k; E0 A; Y- X' h+ P! M % {, B. r7 k! H

    ) t0 h# W6 L* X: G, s+ R1 h7 i        这样就可以利用u-boot去download并启动linux镜像了。
    1 e6 c9 P1 I. }5 S7 L( r2 l" Y7 S, R' l& R3 }; m: m( O
            现在把制作好的u-boot镜像uImage单独拉出来放着。
    " m3 b/ ]+ v$ M  d( m$ r! B0 P& T, w. V, X
            然后在windows用一个叫做tftp32的程序来提供tftp网络服务器
    3 M1 z. E6 i" k7 Z, z4 ~& Y+ E3 C* S( b5 Z0 L5 K; d
    + e# E8 ^# R7 ~9 f" p# A* Y

    # [1 n; q5 U6 h- N1 Z. }        设置好本机IP和uImage路径,
    / q, e* F, B* |+ Q% K: A- N+ L- v( D) e- b
    ; v# \+ |) a0 V' F
    ! r( H% t+ I* N$ x+ _3 i2 n
            接下来就在u-boot上输出命令来load进uImage
    , y+ Z( R: E9 {# {0 t0 n* k! m. p8 ^% f1 l. U+ F% O0 t' ]
    ! w' }9 v# \6 f, {3 ^) q8 D

    " A% t, i, p* Z: @$ g+ c  G        然后输出bootm,可以看到启动信息( G# K+ e; V* Y7 Z+ b6 _
    0 N8 Z7 m5 I! b1 n) K

    ! E$ P3 K3 `( `- r" e' z0 j 3 K' Z8 X& U0 M" W

    " m5 w: v  s, Z0 l* y, t
    ; x/ q2 C+ }1 |7 ?- g" |" {0 l1 u6 T, i  B

    : W9 ~3 E  X/ [0 z- B& u) e        至此,基本上kernel是通的了。1 ~( @0 A( w" u$ @" P
    9 b/ P; ~# m+ g4 ~% o! x

    * j, f0 v9 G% Y: l3 J        由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel( Z* Z3 \, L( W* a, v) V0 H
    1 j0 D1 K4 S$ ~7 {  E! y
            然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~$ I5 i: V9 c) m/ V8 p5 ~
    9 v/ Q8 }' B: a
            Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~
    + i( z! u" P% `1 Z; q
    " |: t" Q# ?9 f' l4 p        介绍一下我现在在看的教材吧~
    3 K5 A* Y% T" \5 s; h9 }- x
    ' @. r# Q* L' {, K0 V: P9 F. F1 _        《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~
    / R7 D! t- I& A% d( `
    1 @0 w6 R: G; D! P9 ^# b7 q5 c        《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······7 d- d/ k; b5 _" g0 R

    1 }6 f% B" f; n        《The_C_Programming_Language》,不断重复地看,加深C应用能力······
    . k" v- I( F( `7 j$ w3 |3 w* l" g! @5 B0 P2 q7 ?
            《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······
    ) M8 u2 l& `: {" e- x3 f! T( G) b) _& o5 ~6 o" }
            《操作系统精髓与设计原理第5版》,补充地看操作系统概念······3 t" H1 S' m5 H
    " e1 n) s( ~7 m+ @) r1 q
            希望大家还有更好的建议和好书推荐推荐~- C5 J/ A: D& J- O6 U1 {3 @

    ( W; o1 o5 v1 B% [. S0 i) a
    5 ^7 L. O: u5 c4 L2 |/ D3 q
      j' N6 T% t; r

    该用户从未签到

    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 11:20 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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