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

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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x

    4 t( F- c: X+ r3 I* Z好,固化好u-boot之后就可以移植linux,直接在社区选一个linux的源码包下载下来,我之前一直用的都3.1版本的,实在linux在3.0时代开始后更新得太快了。8 U* V: ]  g$ f4 Y( m1 k  n
    + f! r+ L  \# |% E8 z' w
           但是也是由于更新得快,在3.1版本惊奇地发现linux支持openrisc架构的CPU了,也就是支持开源开到底了~
    4 d% x+ e0 q1 E# o$ @7 S3 X2 A' {9 O% {4 L! t+ p! d3 w
           下载好后扔进虚拟机里面解压好
    6 S2 Y2 \$ b) i% _- d% t( M2 b7 y  K/ S# Y6 f3 G/ u

    $ e+ L& P# H' w$ B
    / c) I0 u4 }3 d! \        然后又要稍微改改代码了~
    + ^# [- b% U! T# T
    2 v0 j! t- }. S* N8 f        openrisc-3.1\arch\openrisc\boot\dts
    $ F* w  `; |  r. `1 A1 ?& n* _, Q
    # F$ a$ D2 p# W4 V
    * }* V7 Z7 u! ?$ [
    , H  o& i  B5 w& Q. o        打开吧,文件名字就懒得修改了
    + c: g# X* X" n( b  T% b/ @  {. f# }* v& \
            这个是or1200平台相关的device-tree文件,具体在附件上传宋宝华老师对device-tree文件的详细解释的一篇blog
    $ ?% d7 J$ r6 G5 r  r6 e5 T
    : ]3 P% A1 d5 c  L& u& R1 Y+ e# o! s 1 e, v* H5 T* {0 u- R* B

    0 J) ?- _" B. h3 N5 A! B  v        第8行,uart波特率,u-boot设置成什么这里就设什么吧,要不等u-boot启动完转到linux启动时波特率改了又得改串口工具的波特率,来回切换麻烦,而且关键我板子跑不了更高的速度了~+ B: r+ J) c. p( C! s- H, V  K3 b7 L
    3 D+ K/ f- I/ i) H+ A2 r& [1 ^

    * m, P( |4 n4 [( B1 D  t! {- o- _6 G1 x- o$ X% x' S

      P; P, f% t, n2 _+ ~5 O        12行,我在wishbone上SDRAM的地址是0,这里@0
    ' \# b8 [3 \6 G- @" D, D$ v8 ?# F+ }) H( p, t4 y
            14行,因为我的SDRAM容量是128M,所以这里reg后面的值为0x1000000,对于自己板子RAM的容量要设置好,不然在linux启动内存检测的时候会爆掉6 h7 I0 P' s) u( b* T: ?

    " G6 h  A6 J- H) M) S
    0 i: [) ]3 Y* R$ E7 w4 E! s+ V& [8 e" x: ]" w( {: ^6 g
             23行,CPU运行频率,在synthesize时的PLL或DLL的频率是多少就设置多少,我这里是40M, M" q: s! V7 c7 \
    ! }. r% |* H/ w8 b5 c; p& d
    " E- x7 _# V0 X3 j, n
    2 n/ r4 R2 C5 W! ^( f& a. f
            38行,wishbone上UART的地址是0x90000000,所以这里@90000000
    4 D' e2 W& K5 M; s" d: {
    6 E7 m3 ]- ?3 r2 J& N( o        对应40行,UART16550用到的地址范围是0x90000000~0x91000000,具体这个device-tree文件如何去写在后面宋老师的blog中慢慢细读吧。* T, C5 h& B& {. E
    4 @( s/ H& Y9 {3 I9 m! O
            41行,UART使用的中断号,在rtl文件or1200_soc_defines.v中定义的
    * |; y* v& n2 h+ F6 A0 |0 [: N% [6 g( ?) k% b7 s, u  s
    # q& i: z6 q# x+ M( n2 V7 p

    / U' ^+ w3 \( M% {8 |( J7 C        中断号,我UART使用的是2号中断。
    : L) z! C1 {, M
    / h* S' H( s: D) t. c+ T# [2 |        42行,UART的频率,我的是40M
    + L' e* _5 F* {
    & {& x, @: t$ Y: ] % `2 X/ i1 {; S0 n" e/ C

    4 r% @. I+ I4 h& k. m        再下面的就是opencores社区ethmac_latest.tar.gz的描述,如果用的是这个ipcores来驱动网卡phy芯片的话,这里修改成自己soc中wishbone总线地址和ethernet使用中断号即可。
    ) K# o. t7 l& ]1 Y2 r* B: C9 S6 |8 {) J  p- p+ K
    7 D7 t" L' |9 |; g
    ; |3 d; K4 O! E; p6 ?. d: T4 J
            再往下的在移植linux的时候先屏蔽掉,是gpio controller和i2c controller的描述,等成功移植好linux再回过头在soc上加入其它外设控制器,再把device-tree丰富起来~
    8 X' }3 Y$ a7 S) C/ Y, ]. L& d" w' I! ?! H: K2 O) k- p8 ]2 c- w
            Device-tree简单地就修改到这里了~
    - x1 ^0 L' W( X/ G" C3 f
    ( w" X: X# k! L        然后就轮到目录openrisc-3.1\arch\openrisc\mm下
    / ]+ K$ v& L  m# D- d4 w# B. U9 ]! r6 B6 j
    + d5 k; K$ j. U4 \+ z/ w: P
    0 p5 J$ G6 h9 X: h
            Open 之,, K' J' ?1 O: n9 I; Y& s

    ' X; h8 `& S5 e' {) e3 Y% o) u
    ( i8 ?! z! O) T: P  N4 \' [. i
    $ n! K- J& f" j& k         84行加入EXPORT_SYMBOL宏,要不在后面写驱动的时候加载模块会提示找不到__ioremap()函数。
    . @' {0 U5 z& ]. ?1 H* o2 @- V1 F! P' Y6 M9 R- ^
            往下点
    ' y; s% G; R6 j4 f  o( L) |+ J" Y# O+ r% P) @

    / e, L' h7 B1 s
    : s( \% h) B1 D        111行,这里也加
    ; v  B# c" ]9 v. I. ?
    " y2 z1 p* ^, N        OK!
    / w3 T1 h. y( r  h- o3 d' x; f- j2 Q9 z0 w$ [6 c- ~3 C4 N( n
            继续,目录\openrisc-3.1\arch\openrisc\support\initramfs\etc\init.d下的rcS文件,修改这个脚本文件5 ?) Y' r1 P- S+ I
    1 F: F) G9 d) k8 q
      K& `% X; z8 v3 H/ Y8 z

    ' Q  {' L! |5 D6 `        在最后加上,为了查看自己编写的驱动模块信息时不报错,修改到此0 z; o- @, _& J/ e1 N

    $ `! Y* m  F! q# Y5 d        惯例,先在or1ksim上试试启动linux,在镜像的桌面Get_start.txt中有在or1ksim上仿真的流程。
    & j! B, b3 k/ J( U- q" c% D5 y
    ' Y( Z' B* w6 \
    5 ]/ z6 D: B) V8 j& r; P& W7 f5 K+ q9 J2 ~0 _
            直接copy入终端一步步完成就OK啦,顺利就可以直接看到linux的booting messages
    & I* p( P* X. o6 y5 U4 l6 M
    & j- R$ [; ^9 D. P& a        好了,or1ksim的仿真就不贴图了,然后回到我们修改过的linux源码目录来,打开terminal吧~" S4 m, {# B- h# K' q! Y

    ' R0 o$ g7 A+ U, f, s# l
    0 a. ]- U* z8 ]$ x
    ' T( r6 Y8 g+ @/ |        cd进内核目录后先自行看看内核配置:make menuconfig ARCH=openrisc CROSS_COMPILE=or32-linux-
    1 S* `7 w+ g5 ~# U) H; R$ j% H
    1 j$ O, R2 d9 ]- d9 q0 _ 1 ^& {" o" b$ M2 a5 V
    1 e. }0 y4 M8 @
            这些都是linux3.1版本关于openrisc架构的内核配置,熟悉内核配置的话可以自己配置了,反正我是不怎么熟,要用到的时候还要去google选项的意义。7 Y% B* A) S+ y6 C+ \
    9 ^5 q8 w+ j8 @
            其实现在可以什么都不动,后面添加别的外设控制器的时候再去配内核选项,然后exit。
    * R6 a; @  Y! l" J" C3 O, i
    7 m& G: {1 @/ S6 v) O" u) h
    & w0 a$ O1 p0 z/ o1 V( H
    2 F' e9 }5 t$ y7 ^0 C' x2 J# W; k& X/ m        退出来就可以直接make
    4 }  w( M2 n0 R
    ; k/ t7 ?7 J3 k, q
    - _" Y1 Q  n6 O0 i" Z5 C3 Y
    0 A& Q7 d9 G. Z* @8 m. a        最后会生成vmlinux.bin文件,
    7 x( q; l* [/ U( e1 s! T7 E6 v5 D6 \) W0 x6 S3 e5 @7 I+ [
            然后就是用这个vmlinux.bin制作成u-boot识别的镜像。8 q1 y% h: |# {- t$ }; X; {! [

    . p# V8 h- j$ X        首先,在编译过的u-boot目录u-boot-XX.XX\tools中看能否找到mkimage这个文件
    4 T" ]8 q1 r3 {  J# m
      S0 ]/ I, T& [; J9 Y3 [5 e8 v5 |; n
    9 ^- j8 A, H) Z  Z  j
    % J$ C( L+ v% z7 K  L8 z        然后打开terminal中,将这个mkimage复制到/usr/bin中
    5 e, w! r, R2 W* ?' e3 s# F( x8 s, Y5 T6 C
    : H. Z2 _4 W, o# w
    * x' \' s# X' y$ t; [) n- e( k+ W
            测试mkimage5 `, f5 f3 N  w: @/ J
    * R! E, y0 v9 f2 ]- q  q7 P% E5 L

    * ^) M% R( v" y0 o
    # L- c7 Z# E2 R, n' j. e5 o        一切正常!!!!!!' u9 }3 w0 l9 }1 p2 U; a1 L8 C8 ?

    : Y- n0 R; n6 [      
    / F) q8 C( g: m- }9 G' }        然后在镜像出输入相关的命令7 Y; k- ^0 b4 F2 d: I  w- p7 e, ^
    ) C( n. U" _5 v
            mkimage -A or1k -O linux -T kernel -C none -a 0x0 -e 0x100 -n 'Linux for OpenRISC' -d vmlinux.bin uImage2 v# \/ V+ W% Q# e. \9 ^7 i/ v( Z
    ' {6 x& y! h  i; P

    # ]5 ~4 t  k2 j# T! O+ Q2 g2 C1 ]# m: Z2 M  `3 ~) `
            这样就可以利用u-boot去download并启动linux镜像了。
    ( Y+ T7 U. w% v/ p) B  @2 b9 U+ T
    1 y: B1 c+ ~" A0 U3 a$ |" v        现在把制作好的u-boot镜像uImage单独拉出来放着。
    7 t- e7 k7 @. `( H. N! ~. |* F; j# h+ V3 T3 s
            然后在windows用一个叫做tftp32的程序来提供tftp网络服务器
    $ d- j$ y1 Q  B% G" e* E; |# u- Y5 s. G/ R" [5 I5 z
      y  T( H5 w3 X- p5 {! k4 ]

    ) {) w/ L# q4 Q! x- M, |        设置好本机IP和uImage路径,
    7 Y1 S# f- z( F' s5 e0 k) L5 s& n4 o  g# R4 w; ^
    1 @- L9 G* ^9 s  u( h0 S

    % B9 ]/ G  E; t, Y8 ^        接下来就在u-boot上输出命令来load进uImage
    - y+ u. a! |6 S7 Q  M( g* J! q( {0 i, R: O$ N; P

    . Q6 ~1 z: p4 M2 n
    6 q* k# S8 W( [. v        然后输出bootm,可以看到启动信息
    : d4 H8 y5 r8 V' x5 N  P1 e+ {+ G3 Z) r# w
    1 @# L& P9 l. B8 x3 ~

    ' S! l8 N' e$ x! A0 L. R- h
    ' ]' f( w2 }! S3 J8 R+ O2 J& x : f) q: l" g0 C, w- b$ o! B

    # D+ y2 n& V, T1 B) I" e* H# I/ n7 ~" ~: `
            至此,基本上kernel是通的了。
    9 o, s% }) |1 D- @4 y+ J  ]; l) X5 z# Y1 T" j' B5 W. f4 W
    : o" I! s6 s5 S# A. L( i, I
            由于现在我的水平问题,理论基础不足的关系,还没得涉及到linux kernel方面的东西,所以现在也在继续恶补当中,想法是先从学习怎么去写设备驱动,然后回去再学习kernel
    * X* c% Z& _, b  z2 G& {4 S, S: \" G1 ^2 L& V: }' E0 u: h, ]8 b$ ^
            然后在下一次我们回过头在SOC上添加gpio模块去,然后绑到板子上的LED灯去写第一个的GPIO字符驱动程序吧~$ c- g) E( }/ ^( C0 \

    7 @! _# \  r8 f4 h        Blog写到这里差不多追上我现在学习到的东西了,所以还是要勉励自己多花时间去学~
      U" L+ d( q" F9 s6 L: K& J- W6 e/ E$ D9 C
            介绍一下我现在在看的教材吧~0 u1 {) \2 Y' q3 k

    , o3 O: {+ [: J0 C0 Q9 |        《Linux设备驱动开发详解第2版》宋宝华,宋老师现在在编写第三版了,书出来的时候必须去买了~" i9 ]6 m( ~! \' n6 Q9 H; M
    : k% }7 }: M( h6 j1 e9 ~! Q
            《Linux设备驱动程序第三版》,传说中的LDD3,啃吧······7 {8 q  ~$ \5 l  w7 R( R6 b  n0 t

    0 p7 Y9 s! q; _0 Z- x* B& t. P        《The_C_Programming_Language》,不断重复地看,加深C应用能力······
    ' k. E4 h( _* z6 D: O$ E. `( p7 J( G6 t4 H. d# [& p! h# F
            《C Primer Plus》,巨厚巨经典的一本书,不解释,啃······
    6 o) c5 d6 C- r2 x0 P8 u3 A9 y% i
    + ^" L3 H9 B0 P( W8 f0 Y0 H        《操作系统精髓与设计原理第5版》,补充地看操作系统概念······
    - i( T7 w: V0 U8 }( L' `
    % [) l2 _; s  d7 r4 i3 {$ Q# l. t- ]        希望大家还有更好的建议和好书推荐推荐~
    - G! E8 J! m) G' d3 y+ v) W( {
    . O( X) {$ I/ h: j9 k: W! `( k- p1 M, Y
    2 r( e1 g* G  {3 F

    该用户从未签到

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

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

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

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