mini2440_NFS 利用uboot启动
来源:互联网 发布:台式电脑网络连接红叉 编辑:程序博客网 时间:2024/05/19 18:18
背景:
放了好久的板子,今天又得重新拿来使唤,之前换了机子,虽说除了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. 提示:
原因:
- 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:
- <span style="font-size: 16px; ">[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
- </span>
五、可以nfs启动了
- Try to bring eth0 interface up......NFS root ...Done
- Please press Enter to activate this console.
- mini2440_NFS 利用uboot启动
- mini2440_NFS 利用uboot启动
- mini2440_NFS 利用uboot启动
- mini2440_NFS
- qemu利用uboot启动
- 利用uboot启动远程Kernel(TFTp)
- uboot启动
- uboot启动
- uboot启动
- uboot启动
- uboot启动
- 利用打印法和点灯法追踪UBOOT第二阶段启动流程
- 利用打印法和点灯法追踪UBOOT第二阶段启动流程
- 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)
- 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)
- uboot的启动过程
- UBOOT启动过程分析
- Uboot启动参数说明:
- nyoj---t448(寻找最大数)
- android 调用系统的照相机和图库实例详解
- uva 10596 - Morning Walk
- virtual box实现centos和windows共享文件夹
- 在vs中CUDA下c++混编实现c++运行gpu程序
- mini2440_NFS 利用uboot启动
- 手机浏览器用css设置图片自适应大小
- C++_命名空间
- cin.getline()与getline()
- leetcode - Interleaving String
- 数字电路设计之GoldSchmidt除法的verilog实现
- 轻松搞定面试中的二叉树题目
- PHP正则表达式
- 11. 坐标轴容器盛水问题