mini2440_NFS 利用uboot启动

本文记录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. 提示:    

 
 
  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. Starting kernel ...
  13. data abort
  14. pc : [<30008010>] lr : [<33f94754>]
  15. sp : 33f4faa0 ip : 30008000 fp : 00000002
  16. r10: 00000000 r9 : 33e7fe2c r8 : 33f4ffdc
  17. r7 : 33f9e278 r6 : 33f9e278 r5 : 30008000 r4 : 00000000
  18. r3 : 30008000 r2 : 30000100 r1 : 000000c1 r0 : 33f4fce8
  19. Flags: nZCv IRQs off FIQs off Mode SVC_32
  20. Resetting CPU ...
NAND read: device 0 offset 524288, size 2097152 ...
 2097152 bytes read: OK
## Booting image at 30008000 ...
   Image Name:   kernel-2.6.32.2
   Created:      2010-04-25   9:59:17 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1966552 Bytes =  1.9 MB
   Load Address: 30008000
   Entry Point:  30008000
   Verifying Checksum ... OK
   XIP Kernel Image ... OK

Starting kernel ...

data abort
pc : [<30008010>]    lr : [<33f94754>]
sp : 33f4faa0  ip : 30008000  fp : 00000002
r10: 00000000  r9 : 33e7fe2c  r8 : 33f4ffdc
r7 : 33f9e278  r6 : 33f9e278  r5 : 30008000  r4 : 00000000
r3 : 30008000  r2 : 30000100  r1 : 000000c1  r0 : 33f4fce8
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
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:

  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>
[zhong@mini2440]# printenv 
bootdelay=1
baudrate=115200
ethaddr=08:08:11:18:12:27
zhong=bmp d 70000
 stdin=serial
stdout=serial
stderr=serial
ethact=dm9000
filesize=266854
fileaddr=30008000
gatewayip=192.168.2.1
netmask=255.255.255.0
ipaddr=192.168.2.4
serverip=192.168.2.3
bootcmd=nfs 0x30008000 192.168.2.3:/home/wang2/codePrj/ldd/imgs/uImage;bootm
 0x30008000
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

五、可以nfs启动了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值