mini2440_NFS 利用uboot启动

来源:互联网 发布:台式电脑网络连接红叉 编辑:程序博客网 时间:2024/05/19 18:18
    本文记录mini2440开发板如何利用uboot通过nfs服务来启动内核。

背景:

        放了好久的板子,今天又得重新拿来使唤,之前换了机子,虽说除了kernel和rootfs通过nfs挂载的,但u-boot死活进不去...搞定u-boot,nfs又不好使了。

...

环境:

        1.OS:ubuntu11.10;

        2.串口工具:C-kermit

        ...

涉及:

        1.nfs中exports的配置;

        2.u-boot中env的设置;

        3.遇到的问题...


    一、nfs中配置文件:/etc/exports

    $sudo vim /etc/exports

    1.添加开发板要挂载的nfs目录:

        /your/nfsroot/path 192.168.2.0/24(rw, sync, no_root_squash)

       我的是:/home/wang2/codePrj/ldd/rootfs/qtopia4 192.168.2.0/24(rw, sync, no_root_squash)

    2.添加开发板需要的内核文件目录:

        /your/kernel/uImage/path 192.168.2.0/24(rw, sync,no_root_squash)

       我的是:/home/wang2/codePrj/ldd/imgs 192.168.2.0/24(rw, sync, no_root_squash)

    3.$sudo nfs-kernel-server  restart


    二、关于第一步中的uImage:

    因为u-boot在引导kernel img时需要读取img的前64字节的相关信息,所以想用u-boot引导内核还必须制作uImage(uboot Image)

    1. 用make menuconfig获得zImage;

    2. 用u-boot tools中的mkimage 处理zImage:

        mkimage -A arm -O linux  -T kernel -C none -a 0x30008000 -e 0x30008000 -n kernel-2.6.32.2 -d zImage uImage

   3. 参数说明:
     -A arm     -------- Architecture   架构是arm
     -O linux    -------- OS                操作系统是linux
     -T kernel  -------- Type              映像类型是kernel
     -C none    -------- Compressed   压缩类型为无压缩
     -a 30008000 ----                      image的载入地址(hex)
     -e 30008000 ---- entry             内核的入口地址(hex)
     -n kernel-2.6.32.2 --- name       image的名字
     -d zImage ---- 原始的image文件名      uImage ---- u-boot使用的image文件


   三、通过nfs挂载:

    1. 提示:

               Loading: *_*** ERROR: Cannot mount
       原因:
                 a. 改完/etc/exports未重启nfs服务;
                 b. 防火墙未关闭:
                           $sudo ufw status如果为active则可以通过
                           $sudo ufw disable   关闭Ubuntu Fire Wall防火墙
     2. 提示:    
[cpp] view plaincopy
  1. NAND read: device 0 offset 524288, size 2097152 ...  
  2.  2097152 bytes read: OK  
  3. ## Booting image at 30008000 ...  
  4.    Image Name:   kernel-2.6.32.2  
  5.    Created:      2010-04-25   9:59:17 UTC  
  6.    Image Type:   ARM Linux Kernel Image (uncompressed)  
  7.    Data Size:    1966552 Bytes =  1.9 MB  
  8.    Load Address: 30008000  
  9.    Entry Point:  30008000  
  10.    Verifying Checksum ... OK  
  11.    XIP Kernel Image ... OK  
  12.   
  13. Starting kernel ...  
  14.   
  15. data abort  
  16. pc : [<30008010>]    lr : [<33f94754>]  
  17. sp : 33f4faa0  ip : 30008000  fp : 00000002  
  18. r10: 00000000  r9 : 33e7fe2c  r8 : 33f4ffdc  
  19. r7 : 33f9e278  r6 : 33f9e278  r5 : 30008000  r4 : 00000000  
  20. r3 : 30008000  r2 : 30000100  r1 : 000000c1  r0 : 33f4fce8  
  21. Flags: nZCv  IRQs off  FIQs off  Mode SVC_32  
  22. Resetting CPU ...  
原因:
        a. 内核的类型不对,mach-type不一致;
        b. uImage中的入口地址不对,因为mkimage处理后会加入64字节(0x40)的额外信息,所以将上方的-e选项后,改为
0x30008040         
    3.  提示:
                Load address: 0x30008000                Loading: T T T T T T T .....
        原因:
                这会儿的错误,居然是网线过长引起的!!!用大概3到5米的网线,只有T T T ;换成1米的就########了!太诡异了                       
    4. extra:
            之前我是按上面的命令直接生成uImag,下载到开发板是能够运行的;可是这次却总是下载-->cpu resetting-->下载-->cpu resetting...;(之前和之后只是mkimage工具使用的不一样!)通过b,得到修复。


 四、u-boot环境变量的配置:

    1. 打印当前env:

        #printenv

    2. 设置env:

        #setenv env_name env_value

        #setenv bootargs 'noinitrd root=/dev/nfs rw nfsroot=192.168.2.3:/home/wang2/codePrj/ldd/rootfs/qtopia4 ip=192.168.2.4:192.168.2.3:255.255.255.0 console=ttySAC0,115200  mem=64M'

        我的env:        

[cpp] view plaincopy
  1. <span style="font-size: 16px; ">[zhong@mini2440]# printenv   
  2. bootdelay=1  
  3. baudrate=115200  
  4. ethaddr=08:08:11:18:12:27  
  5. zhong=bmp d 70000  
  6.  stdin=serial  
  7. stdout=serial  
  8. stderr=serial  
  9. ethact=dm9000  
  10. filesize=266854  
  11. fileaddr=30008000  
  12. gatewayip=192.168.2.1  
  13. netmask=255.255.255.0  
  14. ipaddr=192.168.2.4  
  15. serverip=192.168.2.3  
  16. bootcmd=nfs 0x30008000 192.168.2.3:/home/wang2/codePrj/ldd/imgs/uImage;bootm  
  17.  0x30008000  
  18. bootargs=noinitrd root=/dev/nfs rw nfsroot=192.168.2.3:/home/wang2/codePrj/ldd/rootfs/qtopia4 ip=192.168.2.4:192.168.2.3:255.255.255.0 console=ttySAC0,115200  mem=64M  
  19. </span>  

    

    五、可以nfs启动了

[cpp] view plaincopy
  1. Try to bring eth0 interface up......NFS root ...Done  
  2.   
  3. Please press Enter to activate this console.   
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手指沾到502胶水怎么办 我退款了货到了怎么办 世纪天成账号被盗什么也没绑怎么办 韩国电话卡不想用怎么办2018 汽车没有年检交警抓到怎么办 ios软件未受信任怎么办 淘宝开店被管理了怎么办 微店网络异常025怎么办 商家给买家返款转错了怎么办 淘宝号限制下单怎么办 淘宝退货单号填错了怎么办 淘宝买家申请退款不退货怎么办 不支持7天无理由怎么办 淘宝上不给退货怎么办 网购衣服买小了怎么办 淘宝上全球购买到假货怎么办 京东全球购税费怎么办 代购被海关税了怎么办 网上买猫被骗了怎么办 苏宁账号被冻结怎么办 九州娱乐提款未到账怎么办 法院拍卖后不足的余款怎么办 购车后余款没拿怎么办? 抵押房屋被执行后余款怎么办 苏宁无敌券过期怎么办 被亚马逊自营跟卖怎么办 苏宁易购绑定手机后解绑不了怎么办 手机qq注册号码忘了怎么办 原创头条号被限制推荐了怎么办 为什么打开app有广告怎么办 苹果手机浏览器总是弹出广告怎么办 手机上打开页面出现广告怎么办 电脑下面的任务栏变宽了怎么办 酷派手机总是出现广告怎么办 电脑弹出的热点新闻关闭不了怎么办 京东老是弹广告怎么办 电脑右下角出现无法显示网页怎么办 电脑右下角广告关不了怎么办 qq邮箱被冻结了怎么办 手机qq群自动发广告怎么办 济宁学院考研和上课冲突怎么办