主机说明:

主机guest 为虚拟机redhat9: IP: 59.64.155.122  网关 59.64.155.1

redhat9上已经配置好NFS服务(参考http://blog.chinaunix.net/u2/80953/showart.php?id=1274973)

也已经配置好TFTP服务(参考http://blog.chinaunix.net/u2/80953/showart.php?id=1274976)

NFS服务, TFTP服务都已经启动

终端采用主机host XP的超级终端

实验板说明:

MPC8349itx开发板: IP: 59.64.155.244  网关 59.64.155.1

开发板eth0为vsc8201芯片,uboot支持驱动,另一芯片为交换交换芯片vsc7385,单独模块驱动。

U-Boot-1.1.3 ;    Linux kernel-2.6.13

内核支持NFS分区(即编译时在File system中选中[*] Root file system on NFS), 以及支持内核IP_PNP(即编译时在Networking中选中[*] IP: kernel level autoconfiguration)

File systems  --->

Network File Systems  --->

NFS file system support                        ## 必选

[*]   Provide NFSv3 client support             ## 可选

[*] Root file system on NFS                        ## 必选

Networking  --->

[*] Networking support

Networking options  --->

[*]   IP: kernel level autoconfiguration       ## 必选

***************************************************************************

A: NFS启动挂载根文件系统

主机上操作:

$ cd /usr/local/mpc8349/

$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs -f

## 依次进入如下选项选择(X) NFS only, 根据情况决定是否选择[ ] read-only root filesystem

--- Target Image Generation

Options  --->

--- Choose your root filesystem image type

Target image: (ext2.gz ramdisk)  --->         ## 改ramdisk文件系统为NFS

(X) NFS only

[ ] read-only root filesystem

## 其他情况参考LTIB使用说明(http://blog.chinaunix.net/u2/80953/showart.php?id=1275002)

## 编译结束后生成的根文件系统是位于当前安装目录下的rootfs (/usr/local/mpc8349/small/rootfs)

$ ln -s /usr/local/mpc8349/small/rootfs  /home/liuby/rootfsln    ## 建立NFS服务目录软连接

$ su - root        ## 切换到root用户,需要密码

# echo "/usr/local/mpc8349/small/rootfs  59.64.155.244(rw,sync,no_root_squash)" > /etc/exports     ## NFS 服务配置

# service portmap restart

# service nfs restart

# exportfs -arv        ## 修改的NFS配置生效(exportfs参数顺序不一样,显示有所不同,此顺序显示结果明了)

# exit

实验板上操作:

uboot启动后按键进入uboot命令行环境:

=> cp.b fef50000 40000 20000; go 40004        ## 驱动vsc7385芯片

=> set serverip 59.64.155.122          ## 主机地址

=> set ipaddr 59.64.155.244            ## 实验板地址

=> set netmask 255.255.255.0

=> set netdev eth0                     ## eth0

=> ping 59.64.155.122                  ## 测试连通

=> set hostname PowerQUICC

=> set kernaddr fe810000            ## flash中内核起始地址

=> set rootpath /usr/local/mpc8349/small/rootfs        ## NFS服务根目录

=> setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off console=ttyS0,115200

=> bootm $kernaddr

## 如果一切正常,内核启动后会启动NFS文件系统作根文件系统。

## 测试: 在开发板上创建一个文件,在主机上会看到这个文件生成

同样可以简化操作(测试nfs服务软连接目录):

=> cp.b fef50000 40000 20000; go 40004        ## 驱动vsc7385芯片

=> setenv ipaddr 59.64.155.244

=> setenv bootargs root=/dev/nfs rw nfsroot=59.64.155.122:/home/liuby/rootfsln ip=59.64.155.244:59.64.155.122:255.255.255.0 console=ttyS0,115200

=> bootm fe810000            ## 内核镜像uImage在FLASH中的存储地址

************************

实验中遇到一个问题,就是bootm之后内核启动,NFS启动挂载文件系统快完成时出现下面这个错误提示

RPC: sendmsg returned error 101

nfs: RPC call returned error 101

后来才发现是文件系统中的启动脚本在启动过程中修改了eth0的ip地址,导致连接不上NFS server

后来再测试又发现试图挂载非NFS文件系统目录时也会出现此问题,并且在主机上执行# showmount 命令结果会显示有ip地址(实验板ip地址)挂载。即: 在ltib编译文件系统时选择ext2.gz ramdisk (非NFS only), 最后使用rootfs目录,出现同样的问题。

还有遇到过一个问题,根本无法挂载文件系统,在启动时出现下述提示

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

<0>Rebooting in 180 seconds..

后来发现是 /etc/exports 只有如下一句

/home/liuby/rootfs  59.64.155.244(rw,sync,no_root_squash)

而没有像下面这样指定根目录的访问权限:

/usr/local/mpc8349/small/rootfs  59.64.155.244(rw,sync,no_root_squash)

结论: 必须指定NFS文件系统所在目录或其对应的软连接做NFS服务根目录(见下分析)

在NFS文件系统中编译busybox时可以不选择编译mount命令(不建议如此)

nfs总结:

如上 /home/liuby/rootfsln是指向/usr/local/mpc8349/small/rootfs的软连接

# echo "/home/liuby/rootfsln 59.64.155.244(rw,sync,no_root_squash)" > /etc/exports

# exportfs -arv             ## 会弹出下面的提示

exporting 59.64.155.244:/usr/local/mpc8349/small/rootfs

可见 /etc/exports 中语句 /home/liuby/rootfsln 59.64.155.244(rw,sync,no_root_squash) 和 /usr/local/mpc8349/small/rootfs  59.64.155.244(rw,sync,no_root_squash) 是等效的.

故: 如果想用不同的文件系统,可以改变这个软连接指向新的文件系统,这比复制文件系统或者修改u-boot环境变量方便多了,并且还不用重新配置/etc/exports。

# echo "/home/liuby/rootfsln 59.64.155.244(rw, sync, no_root_squash)" > /etc/exports

$ rm -f /home/liuby/rootfsln

$ ln -s nfs_rootfs_dir_path  /home/liuby/rootfsln            ## 只需要建立和修改这个软连接即可

# exportfs -arv            ## 配置生效(必须)

在uboot环境变量中只需设置一次rootpath=/home/liuby/rootfsln, 每次只需在主机上修改此软连接的指向,即可

注意权限

***************************************************************************

B: TFTP下载内核和文件系统镜像到ram中启动

主机上操作:

在主机上TFTP根目录为/home/liuby/tftpboot/

$ mkdir /home/liuby/tftpboot/image_dir

$ cd /usr/local/mpc8349/small/

$ ./ltib --preconfig config/platform/mpc8349itx/defconfig-min-fs-modified -f --batch          ## 编译内核和文件系统镜像

$ cp -f rootfs/boot/uImage  rootfs.ext2.gz.uboot  ~/tftpboot/image_dir/        ## 复制内核镜像和文件系统镜像到~/tftpboot/image_dir

$ cd ~/tftpboot/

$ ln -s image_dir/ bootln

实验板上操作:

=> set serverip 59.64.155.122          ## 主机地址

=> set ipaddr 59.64.155.244            ## 实验板地址

=> set netmask 255.255.255.0

=> set tftp_path bootln

=> ping $serverip                      ## 测试连通

=> cp.b fef50000 40000 20000; go 40004        ## 驱动vsc7385芯片

=> setenv loadkernaddr 1000000

=> setenv loadramdaddr 1200000

=> tftpboot $loadkernaddr image_dir/uImage    ## 下载内核镜像到ram

=> tftp $loadramdaddr $tftp_path/rootfs.ext2.gz.uboot    ## 下载文件系统镜像到ram

=> bootm $loadkernaddr $loadramdaddr    ## 启动ram中内核和文件系统镜像

下载不畅时,用CTRL+C来终止回到提示符

tftp总结:

在TFTP服务根目录下建立目录存储镜像文件,然后创建软连接指向需要下载的镜像目录,这样可以通过修改连接文件即可,而不用每次修改uboot环境变量了

***************************************************************************

C: TFTP下载内核镜像到ram,NFS挂载根文件系统(target image: NFS only)

主机上利用上面操作的结果,不进行配置。

实验板上操作:

=> set serverip 59.64.155.122          ## 主机地址

=> set ipaddr 59.64.155.244            ## 实验板地址

=> set netmask 255.255.255.0

=> set bootargs root=/dev/nfs rw nfsroot=$serverip:/home/liuby/rootfsln ip=$ipaddr:$serverip:$netmask console=ttyS0,115200

=> tftp 1000000 bootln/uImage          ## 下载内核镜像到ram 地址1000000

=> bootm 1000000

## 测试发现内核启动,NFS挂载成功

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

简便方法:

将下面附录的文件存储为.txt文件,例如取名mpc8349itx_uboot_env.txt

用linux命令unix2dos进行转换,然后打开windows XP 超级终端,启动实验板进入uboot命令行环境:

点击超级终端界面 "文件"->"属性",弹出属性对话框,点击"设置"->"ASCII码设置",设置行延迟20ms,字符延迟1ms;然后点击"发送"->"发送文本文件",选择"mpc8349itx_uboot_env.txt"发送。

此操作相当于在uboot命令行输入uboot环境设置参数

执行完操作后保存了这些设置,以后每次在uboot启动时不用再敲入一行行的设置参数.

在uboot命令行下执行

=> run flashnfsboot

相当于 A 操作

在uboot命令行执行

=> run tftpramboot

相当于执行 B 操作

在uboot命令行执行

=> run tftpnfsboot

相当于执行 C 操作

?转栽地址:http://blog.chinaunix.net/u3/98913/showart_1978279.html

linux uboot nfs启动,uboot中利用TFTP和NFS加载镜像到ram运行相关推荐

  1. uboot中利用TFTP和NFS加载镜像到ram运行

    主机说明: 主机guest 为虚拟机redhat9: IP: 59.64.155.122  网关 59.64.155.1 redhat9上已经配置好NFS服务(参考http://blog.chinau ...

  2. android progressdialog 背景色,怎么在android中利用ProgressDialog实现一个加载效果

    怎么在android中利用ProgressDialog实现一个加载效果 发布时间:2020-12-07 17:00:07 来源:亿速云 阅读:77 作者:Leah 怎么在android中利用Progr ...

  3. uboot中利用TFTP和NFS加载内核镜像和根文件系统

    转载地址:http://blog.csdn.net/yazhouren/article/details/52003572 origin: http://www.cnblogs.com/cjjnjust ...

  4. 怎么设置uboot从u盘启动linux,rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs...

    <rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs>由会员分享,可在线阅读,更多相关<rt5350使用uboot从u盘启动linux成功含从u盘加载镜 ...

  5. linux加载内核后如何运行app,Android app启动过程

    Native进程的运行过程 一般程序的启动步骤,可以用下图描述.程序由内核加载分析,使用linker链接需要的共享库,然后从c运行库的入口开始执行. 通常,native进程是由shell或者init启 ...

  6. linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例

    转自:truemylife.linux磁盘 分区 物理卷 卷组 逻辑卷 文件系统加载点操作案例 基本概念: 磁盘.分区.物理卷[物理部分] 卷组[中间部分] 逻辑卷.文件系统[虚拟化后可控制部分] 磁 ...

  7. linux系统把驱动编译成.ko模块 insmod动态加载

    介绍: Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序.第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko ...

  8. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  9. 【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

    前言 之前使用tensorflow和keras的时候,都各自有一套数据读取方法,但是遇到一个问题就是,在训练的时候,GPU的利用率忽高忽低,极大可能是由于训练过程中读取每个batch数据造成的,所以又 ...

最新文章

  1. Error in xy.coords(x, y, xlabel, ylabel, log) : ‘x‘ and ‘y‘ lengths differ
  2. 问题类像程序员一样思考
  3. 对于 Redux 的理解
  4. JDK 15 正式发布,划时代的 ZGC 同时宣布转正!
  5. 怎样远程访问 MySQL
  6. 配置 HTTP 与 DNS 功能
  7. 项目Beta冲刺(团队)总结
  8. Go语言学习笔记(八)
  9. javascript之querySelector和querySelectorAll
  10. FLC-Regular Grammar
  11. 83、冗余网关配置实验之VRRP
  12. pyspark入门---通过kmeans分析出租车数据并调用百度API进行可视化
  13. 访问 Notes/Domino 数据的定制 DXL 框架
  14. 数据挖掘案例实战:利用LDA主题模型提取京东评论数据
  15. Android AES加密解密 CTR 模式
  16. 象棋世家 v6.0a 官方
  17. 如何辨识“真假”敏捷?
  18. 工资倒挂,IT 行业薪资潜规则如何规避?
  19. about oracle
  20. HL7 标准及实现指南 必看的网址

热门文章

  1. JavaScript事件冒泡
  2. 在语言中的运算符中,处于同一优先级别的运算符还分优先次序吗?
  3. [hihoCoder]无间道之并查集
  4. Android 编程下 java.lang.NoClassDefFoundError: cn.jpush.android.api.JPushInterface 报错
  5. (转)解决在firefox下js调用as失败问题
  6. XNA 游戏 运行时编辑器
  7. redis hash结构如何设置过期时间
  8. DWZ 在js中刷新某个navTab
  9. ORA-28000: the account is locked-的解决办法
  10. 文件“D:\file.txt”正由另一进程使用,因此该进程无法访问该文件。