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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x

      F0 R+ ^: c( K& Z( P好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。1 d; a' s, @& r9 @, l) K
    ! f' {: x0 J; F' j
           但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~
    : u; l/ r. M: _4 w8 [8 E/ Y- @+ M+ U1 S; c6 j* C: d2 a
           下载好后扔进虚拟机里面解压好$ Z) E+ R3 U/ @# D" @2 ^  M3 g- k

    ' w  \8 F1 Y4 H , [* F& X- {! |, l( a# {, d
    / s1 M$ s: c$ k5 O( R4 k. o
            然后又要稍微改改代码了~
    9 {+ s  r0 t; l( N+ h% M# v  h2 r$ _9 Q6 o, ^/ z
            openrisc-3.1\arch\openrisc\boot\dts5 p& A) v; q! G/ V! U/ l

      C  c) d' G( U$ F6 F. G 5 h) f; _  h" E" @5 Y

    4 }4 u7 P; `2 P' L: f) @; a        打开吧,文件名字就懒得修改了
    7 U+ U: \& s8 X) u5 l/ r! X
    , l1 s+ M, [! O/ g0 I0 ^6 L( G        这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog- u$ Y; j1 |% K* Y8 [0 C
    . e" c, f* l7 ~# o3 l

    ; y1 ]1 v' m0 Y- i1 A
    ( {) E  F/ ^* S' @4 F$ s        第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~
    ' R8 n. Q: C1 i, K3 l/ r% N0 [) c
    ( v9 C6 f' A4 m! r8 ^
    $ k/ `4 M% X! R/ W5 [$ X! C. M' A, L/ G2 Z

    ! @7 M7 m- d, l6 j        12行,我在wishbone上SDRAM的地址是0,这里@0  D! ^) X) Y* H+ d& F& N" o# S
    0 S% t/ M: |3 e
            14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉6 R' ]1 u( p1 m5 m& P! l# l) o
    - P. b! X9 w) `# f$ H2 x! F* s

    : Z- K, m! q$ p# O* i! Y4 [5 \" R- w9 ?# R7 E* t& w% N
             23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M
      ?8 M  |" m  N3 u
    / G, m* l. L! Y2 B) v( E  |  k; K + V( m' Z3 w! I

      U6 ]! z% B6 J. c        38行,wishbone上UART的地址是0x90000000,所以这里@90000000, b5 p/ r! v; I

    3 W, y7 x5 ~( i1 H5 x5 u  t2 y        对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。- Z& J4 N" Y% j, J' x
    0 M9 q6 y* j; h8 n  n0 _
            41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的
    4 e6 ^& S9 ?2 p0 g; M" U- r; L/ b! H4 k9 a
    7 e! s/ N; d6 ?2 q, D

    . f8 n. C" \9 G5 Y        中断号,我UART使用的是2号中断。
    7 e9 J! b8 }+ ^' l" g
    * U$ Q) ~$ d" Q/ ~7 R        42行,UART的频率,我的是40M! v8 N: S8 Z# d3 W2 w0 r4 b

    / C4 \! x) b" [" P6 y* W) }* G
    ) T* B1 D8 f# C/ g/ y; |$ I
    2 d+ i" e, ^3 W9 x' ~        再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。
    3 x0 i" D) \! l( E% B6 {& y3 b- _9 q. z1 d& }8 p, F$ o% e
    % L1 |- n& Y1 W8 h9 D/ S4 `

    ) ?( r, _9 A6 p- D& \. n$ R1 G4 Y        再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~# T0 A8 O3 n8 k+ \+ U

    / ~( T4 D* p/ z! x$ u) L        Device-tree简单地就修改到这里了~
    ; `( P: z2 j9 w5 x! b+ i
    " n% l2 f3 @" Q  Q        然后就轮到目录openrisc-3.1\arch\openrisc\mm下
    6 |2 P% w2 m/ s7 N; Q9 W8 T+ T! @9 ]$ }- x6 M& O7 {- D( O; \
    , s4 H% j. P6 s# ~5 M$ b

    ' U6 }# w- g5 b7 `& ]! `: m        Open 之,
    ; X  k5 Y7 a5 M+ v
    7 ~1 g  \0 E/ U* J2 V & O+ i7 O5 \: h

    3 ^; R; L( F& D         84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。
    0 |- W9 h- }4 Q5 m( Q- h; W' _. D/ K# t4 H( E; F$ y+ c
            往下点, a3 U! @- @% e7 P' o

    5 X1 ~1 a! y3 K8 B( A8 J
    + ~4 n7 r6 g5 I8 k7 ^' `
    3 F+ E& R1 g$ ~7 `/ [9 ^        111行,这里也加
    % Z  c. ?- `9 k- F6 q# i. ?/ E5 e! N% F. Q! [
            OK!/ g1 w. P4 h& q
    ( ~  \2 {# q: q* F. c
            继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件
    % N4 g( U- W! v3 _7 a; t6 ^  K1 Q1 P

    7 ?& h' h& {1 H4 P
    9 J- U+ {7 A) X. O        在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此
    1 W6 c. \3 o0 o  c; J1 Z$ ~; H' d0 v0 [, m  {! G
            惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。
    " p% S' b3 s! F7 Z: C& i' @' X
    # O$ c. R* a  I. F# g: k
    0 l) {& z8 b# c& w# h& h, x% o0 I. \# p  y9 u' K- x% w
            直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages
    % Q  z/ f6 N' Y9 S: g8 q& b" ?0 |
            好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~8 N3 p/ v7 g1 u# a: c+ z* v

    / L% N: b  Z0 ?" Q  q' ~) k9 z, ? , Y3 i4 t$ n6 s

    5 Z: T1 C" q$ I% K: z        cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-
    ( [+ a( I( f( L2 f) S! @% [
    . @( F7 X* i( x5 d# s# {/ P & z$ M. y# `* r# \8 c& e! R
    % a; `  O7 y1 x8 Q
            这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。) v- [& c# N# z8 E# X4 u

    ! B6 ?# _, T; V0 d" O8 I5 a5 L        其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。; L* {) h+ i$ l$ m8 `0 \2 Z! |

    ' p, O" i2 O: Y) [1 R4 ]
    + h) B. A) U1 w% m, u0 a
    ! `" @0 `- G1 a        退出来就可以直接make5 L/ [: q. K4 G# `: C0 @

    ! L8 n. [: [+ e& o2 M$ U / u8 \! z8 b* \) J) F. M6 ~( m

    / U( N' m& Z6 C' v' d+ @% R2 ~        最后会生成vmlinux.bin文件,
    8 d* _9 c) n+ F
    0 a& g" H" o0 t9 E" ~3 D        然后就是用这个vmlinux.bin制作成u-boot识别的镜像。) |" v' p5 A- Y/ h7 a, R
    0 j6 q9 |8 G6 Q' z/ q, \/ R
            首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件" N' Y+ ]5 o; q. J4 Y; n
    0 }# k2 ^8 ~. b# I

    7 B7 C+ U% E$ X7 {/ c4 ?2 h( n$ B# d
    + `; w2 ?, c" z2 T. t        然后打开terminal中,将这个mkimage复制到/usr/bin中
    / c# m3 @' \- \- c0 t3 ^& S
    # I$ t6 B; B0 \* W1 _6 N6 m # _/ y& n; l+ y- z

      h0 H; v9 f* r' Y# \8 B7 K        测试mkimage  k( A! i2 W4 X7 u  [8 B

      A1 M9 q/ R9 |9 s% ^
    6 o& }/ ~% b/ M- N
    : E, m8 n3 |2 I! o3 }) O' u# z        一切正常!!!!!!
    / S& t! J' M, e, x* T0 a) c( ^/ V9 ]. `5 U
           & M3 V% H! Z8 M+ `+ I
            然后在镜像出输入相关的命令5 h* ~1 f  ^7 p
    1 y. i) _; w7 d
            mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage
    " l$ q* Q1 p! ^6 x7 V9 K- }4 n" {5 M; N0 w% z7 n- a; j
    - [! i) a: V& g: @! w$ x) o7 \
    . m6 h% \- _& I4 |% R
            这样就可以利用u-boot去download并启动linux镜像了。6 J- g* F; t7 ?' m: d5 S; f+ \: g
    2 m4 ?& n. ~, Y9 @8 m- R
            现在把制作好的u-boot镜像uImage单独拉出来放着。7 P/ A+ H) A& P" ^" S* p+ W1 q% X/ h. |

    + e9 t3 q+ k9 c" Q        然后在windows用一个叫做tftp32的程序来提供tftp网络服务器
    " o% d- a0 ~( }: w( [3 x
    % I: @+ Z5 N6 `5 p ' T( p& r, f: d
    6 t$ l! P2 b2 M
            设置好本机IP和uImage路径,6 k+ u2 X* R4 A. H
    3 k% b4 Y7 l5 i5 H# A1 u" Q/ @+ k# M

    % M$ U! w* K) e6 P: |
    6 A/ A* z% K0 [  x1 u        接下来就在u-boot上输出命令来load进uImage
    ( P: v1 s5 B4 k4 k$ J8 Z% l* {5 x' j( f/ g

    4 ~! C' E3 {) T5 {( F7 O) z5 |
    7 z4 c& {* A. |6 \; [4 q4 V        然后输出bootm,可以看到启动信息
    # m5 W/ Q4 t& c9 a: h
    5 n( C  {6 e0 V9 |
    . _' p4 U& f# J/ `  Y! y3 [" L % O% r, \8 J9 C! I/ [: N4 g* o+ Q
    5 L. X) s7 @0 U. s" c- n; X
    7 v. b7 Z6 b3 R! r
    ) h8 e$ c9 }9 \( M9 a9 |# X# P5 M
    5 a, |7 i  V4 }$ ~
            至此,基本上kernel是通的了。
    " V* @" i( {% `2 Y4 E; X! R
    ' L' H5 O3 R* `: z* _
    6 _6 g" v9 P: ]+ h        由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel. [. I8 ]6 ~) e: _

    5 A3 @: b8 R5 t. h8 p$ U        然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~
    ' X5 V& a& r8 L& x* L, H. f6 E9 Y) r5 F7 G" ~: x0 E
            Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~4 [; c$ T: P8 v7 G+ h
    ; `* K; O( c- {5 b$ O* L
            介绍一下我现在在看的教材吧~
    / A  U5 C9 X  Y: n$ r8 }# l
    # c2 W3 U+ X% H: p        《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~7 _& I3 f! S3 F5 o( o
    5 h$ s* x2 q  I/ a( |
            《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······! P! y- s. f" T0 q& R  Z- K' R4 n

    0 S! \% s# T* E3 Z0 P1 \2 c        《The_C_Programming_Language》,不断重复地看,加深C应用能力······) t' F+ n/ Y, s) m: J- {6 i+ X

    + O& \! _2 R) F1 m, b        《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······
    / t. u. y/ ^3 `% L( Y# R
    % Z6 ]2 d" c  b        《操作系统精髓与设计原理第5版》,补充地看操作系统概念······6 ~& ?* z" E& x1 ^3 k! I3 N
    * b1 Y0 f+ B8 V! O3 Z
            希望大家还有更好的建议和好书推荐推荐~1 m+ r( J- W" F& ^

    2 I4 T4 ]* u$ k# |
    5 {5 x# x9 L# q9 B4 M
    * j' w4 @9 z  T  s, c% M: x

    该用户从未签到

    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 12:01 , Processed in 0.203125 second(s), 26 queries , Gzip On.

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

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

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