嵌入式成长轨迹33 【嵌入式学习阶段】【ARM环境调试】【在虚拟机下Ubuntu建立NFS网络文件系统】
更新版
http://www.cnblogs.com/zeedmood/archive/2012/12/08/2808376.html
(以防参考资料链接无效,将所有参考文章都附后了,所以非常长;实际操作其实占篇幅比较少)
本文分几个部分:
【硬件环境】
【环境搭建流程】
【问题及解决方案】
【附录 参考资料】
之前提过NFS,(Network File System,网络文件系统)实际上是一种Linux/UNIX文件共享协议,是通过将
NFS服务器的文件系统安装到客户机的文件系统上而得以实现的。
飞凌在这方面的讲解几乎是一笔带过,而且还是讲在开发板上加载ubuntu(它配套的移植手册却认为我们已经
在ubuntu上加载开发板,两者差别实在不是一般大)。国嵌的培训里边就只有本机加载本机,实在难堪大用。
没办法,只能到网上自己学习了。
网上各种做法扑朔迷离,一般来说有这么两种方式:
1、通过在主机/虚拟机、开发板上分别布置服务器、客户端,使用mount命令直接加载·开发板上的已有·的
文件系统;
2、只在主机/虚拟机上安装nfs服务器,在开发板的内核支持nfs的前提下,通过修改启动参数,让开发板挂载
·主机/虚拟机上·的文件系统。
因为不清楚在开发板上布置客户端的步骤(网上这种做法的没找到提及开发板的操作,多数只说明了主机/虚
拟机上的环境搭建),所以我最后是采用了第二种做法。
【硬件环境】
虚拟机vm8.0.2 build-591240 ,
Ubuntu12.04,
飞凌ok6410开发板,
win7 家庭版。
【环境搭建流程】
一、外部环境与主机
1、准备网线
a)连接开发板和主机的网线必须是交叉网线,什么是交叉网线:
i.一头是:1白橙 2橙 3白绿 4蓝 5白蓝 6绿 7 白棕 8棕 (568B标准)
ii.一头是:1白绿 2绿 3白橙 4蓝 5白蓝 6橙 7白棕 8棕 (568A标准)
iii.交叉网线用于同口连接(如两边都是pc,或两边都是hub)
b)如果只有直连网线可以通过路由器连接
2、虚拟机设置双网卡
(图文并茂可参考:http://hi.baidu.com/wswxfwps/item/aede37c85a428801ac092f19)
我想要同时使用两块网卡,一块连接互联网(机器内置),另一块连接开发板。
1)在Ubuntu虚拟机(关机状态,上方VM菜单setting,打开后看左下角有个add)中添加Network Adapter。最
后得到两块网卡,一块采用NAT模式,另一块采用custom模式(连接VMnet0);
2)在Ubuntu虚拟机上方Edit菜单的Virtual Network Editor中,设置VMnet0为bridged Realtek PCIe FE
Family Controller网卡(没有就Auto Setting一下,应该其它网卡也可以的);
二、Ubuntu12.04
1、进入虚拟机,根据主机IP修改虚拟机IP
在右上角的网络连接图标,里边有setting或者configuration一类的可以点进去设置,上网用的网卡不用管,
但连板子用的网卡IP要设置好,一定要跟主机在同一个网段内(就是IP地址的前三个数字相同,最后一个不一
样)。
我的eth0是本机网卡,NAT模式,因此采用DHCP自动分配。
eth1则是后加的网卡,bridged模式,因此需要手动分配ip:192.168.0.10。
另外两块网卡均不需使用漫游模式。
配好之后,就应该可以同时上网和连接开发板了。
顺便说说开发板的启动过程:
开发板(ip:192.168.0.232)从Windows(ip:192.168.0.2)获取linux内核,启动完毕后,从Ubuntu(ip:
192.168.0.10)挂载NFS网络文件系统。
2、安装NFS
在主机(我是在虚拟机中的Ubuntu)上安装NFS服务软件,因为Ubuntu上默认是没有安装的。
在终端提示符后键入以下命令安装NFS服务器
$ sudo apt-get install nfs-kernel-server
注意:在一些文档中提出还需要使用apt-get来手动安装NFS的客户端 nfs-common,以及端口映射器portmap,
但其实这是没有必要的,因为在安装nfs-kernel-server时,apt会自动把它们安装好。
这样,宿主机就相当于NFS Server。
3、创建共享目录
例如我们采用/forlinx/root作为NFS共享目录
$ sudo mkdir forlinx
$ cd forlinx
$ sudo mkdir root
$ chmod 777 forlinx (更改文件权限,这个一定要改,不然很可能后面会出问题)
$ chmod 777 root (更改文件权限,这个一定要改,不然很可能后面会出问题)
4、配置共享目录
修改主机上/etc/exports文件的内容,在最后添加一行:
/forlinx/root *(rw,sync,no_root_squash)
注:后面设置uboot启动参数的时候,目录名要和这个一样。
其中:
/forlinx/root 表示NFS共享目录,它可以通过NFS挂接作为开发板的根文件系统;
* 表示所有的客户机都可以挂接此目录,当然你也可以指定具体的IP,如192.168.x.x;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份;
5、解压yaffs2文件
配置好文件共享目录后,应将用户基础资料光盘中“linux2.6.28/filesystem/OK6410_yaffs2_v1.0.tgz”压
缩文件拷贝到这个目录下并解压,作为开发板的文件系统。否则会出现错误。
6、启动NFS服务
$ sudo /etc/init.d/nfs-kernel-server start
罗列一些备用命令:
停止NFS服务 $ sudo /etc/init.d/nfs-kernel-server stop
重新启动NFS服务 $ sudo /etc/init.d/nfs-kernel-server restart
检查NFS服务状态 $ sudo /etc/init.d/nfs-kernel-server status
三、开发板:
1、配置目标板IP
宿主机、目标板(或者有虚拟机的就是:虚拟机、本机、目标板三个)的IP一定要在同一个网段内,否则会出
现很多的问题,很多像Root-NFS: Server returned error -5 while mounting /forlinx/root的问题就是由
此引起。
更改目标板IP:进入开发板环境,进入到/etc/init.d/目录下会看到一个rcS文件,IP就是在这个文件修改的
。
在里边加上一段:/sbin/ifconfig eth0 192.168.0.232 netmask 255.255.255.0 broadcast 192.168.0.255
up-
注意网关(这里是那个broadcast)开发板上设置和虚拟机上的一致!
(//也可以命令更改# ifconfig ifconfig eth0 192.168.0.232 netmask 255.255.255.0 )
改完后就重启一下开发板。
2、检查网络连接情况。看是否虚拟机、本机、目标板三者可以两两ping通,要是不能就要重新看看IP设置是
否正确、网线是否插牢
3、在开发板上设定启动参数
通过u-boot设置启动参数(就是开发板打开后在超级终端按紧空格进入的模式)
u-boot启动时,输入printenv,显示了uboot的环境变量。会看到这个
printenv:
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000
bootdelay=1
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.20
serverip=192.168.1.10
gatewayip=192.168.1.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
最好把bootargs一项找地方复制起来,以后还能改回去!
如果你前面编译内核,只是按照飞凌默认配置,并没有做任何修改(但要设置使其支持nfs根文件系统这个,
飞凌默认配置文件是支持这个的,所以可以不做任何修改),即没有修改相关启动代码(为了让其支持挂载
nfs根文件系统而修改的代码),那么要用
setenv bootargs "root=dev/nfs nfsroot=192.168.0.10:/forlinx/root rw noinitrd init=/linuxrc
ip=192.168.0.232:192.168.0.10:192.168.0.255:255.255.255.0 console=ttySAC0,115200"
其中:
192.168.0.232为开发板的IP地址
192.168.0.10为宿主机(有虚拟机的就是虚拟机了)IP地址
192.168.0.255网关 开发板上设置和虚拟机上的一致!
255.255.255.0 掩码
/forlinx/root为共享目录
console=ttySAC0,115200为控制台参数。
!最后记得记得保存参数!:saveenv
4、重启开发板,如果顺利的话这时就可以连上了。在Ubuntu的文件系统中更改文件都会反映到开发板上!
【问题及解决方案】
无法挂载问题一:
dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
VFS: Mounted root (nfs filesystem) on device 0:14.
devtmpfs: error mounting -2
Freeing init memory: 172K
Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
See Linux Documentation/init.txt for guidance.
[<c0039ca8>] (unwind_backtrace+0x0/0xfc) from [<c049fd9c>] (dump_stack+0x18/0x1c
)
[<c049fd9c>] (dump_stack+0x18/0x1c) from [<c049fe00>] (panic+0x60/0x1ac)
[<c049fe00>] (panic+0x60/0x1ac) from [<c00335dc>] (init_post+0xc8/0x140)
[<c00335dc>] (init_post+0xc8/0x140) from [<c00084c8>] (kernel_init+0xf4/0x130)
[<c00084c8>] (kernel_init+0xf4/0x130) from [<c0034a34>] (kernel_thread_exit+0x0/
0x8)
解决:没有在指定目录下给个文件系统,应将用户基础资料光盘
中“linux2.6.28/filesystem/OK6410_yaffs2_v1.0.tgz”压缩文件拷贝到这个目录下并解压
无法挂载问题二:
IP-Config: Cannot add default route (-101).
Looking up port of RPC 100003/2 on 192.168.0.7
eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
Looking up port of RPC 100005/1 on 192.168.0.7
VFS: Mounted root (nfs filesystem) on device 0:11.
Freeing init memory: 128K
FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will b
e case sensitive!
[14/Dec/2008:05:19:25 +0000] boa: server version Boa/0.94.13
[14/Dec/2008:05:19:25 +0000] boa: server built Mar 26 2009 at 15:28:42.
[14/Dec/2008:05:19:25 +0000] boa: starting server pid=508, port 80
Try to bring eth0 interface up......nfs: server 192.168.1.112 not responding, stil
l trying
nfs: server 192.168.1.112 not responding, still trying
解决:http://blog.csdn.net/ayangke/article/details/6312429
PC机,目标板的linux_cmd_line和虚拟机内的linux网关全部设为一致,我的就全部设置为192.168.1.1
无法挂载问题三:
dm9000 dm9000.0: eth0: link down
IP-Config: Cannot add default route (-101).
dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
dm9000 dm9000.0: eth0: link down
dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1
VFS: Mounted root (nfs filesystem) on device 0:14.
devtmpfs: mounted
Freeing init memory: 172K
/etc/rc.d/init.d/netd: line 16: /usr/sbin/inetd: not found
mkdir: cannot create directory '/mnt/disk': File exists
Try to bring eth0 interface up......nfs: server 192.168.0.10 not responding, still trying
解决方法:
相互ping能ping通,就是到了那一步网不能连接上,服务器没有通。从网络这个方向找问题吧
1、http://hi.baidu.com/xdyang1986/item/527656778bd157285c1789ca
在etc/下面有一个eth0-setting的文件,把它里面的设置改了,使启动ip固化
IP=192.168.0.232
Mask=255.255.255.0
Gateway=192.168.0.201
DNS=8.8.8.8
MAC=08:90:90:90:90:90
2、http://bbs.witech.com.cn/viewthread.php?tid=11818
使用Linux3.0的朋友们可以这样,修改·NFS网络文件系统·(是ubuntu里边那个!)里面的
/etc/init.d/ifconfig-eth0文件,修改如下
#if grep -q "^/dev/root / nfs " /etc/mtab ; then
if grep -q "root=/dev/nfs" /proc/cmdline;then
就是把 if grep -q "^/dev/root / nfs " /etc/mtab ; then 注释掉,然后使用
if grep -q "root=/dev/nfs" /proc/cmdline;then 判断,即可,我们最近计划发布的新版本已经解决了这
个问题,着急的朋友们可以自己手动修改一下。
3、http://bbs.witech.com.cn/viewthread.php?tid=11818
告诉你一个简单暴力方法:把·pc机共享目录·(是ubuntu里边那个!)下的、etc/init.d/ifconfig-eth0
中的ifconfig eth0 down 改成ifconfig eth0 up 即可 不过这不是根本解决方法,正常的是不会执行这个的
,你最好按照这里的条件找到原因
4、http://www.arm9home.net/simple/index.php?t3528.html
看起来像是·文件系统·(是ubuntu里边那个!)在初始化过程中重新配置了网卡的IP地址,造成原本的NFS
的IP设置被覆盖了。这个动作默认是在文件系统的/etc/init.d/ifconfig-eth0脚本里完成的。
我刚刚在/etc/init.d/rcS 里面把 /sbin/ifconfig lo 127.0.0.1 和 /etc/init.d/ifconfig-eth0 delete了
后 nfs启动成功了
问题四、
突然间主机、虚拟机、板子无论ping哪里都这样了
PING 192.168.0.110 (192.168.0.110) 56(84) bytes of data.
From 192.168.0.10 icmp_seq=1 Destination Host Unreachable
解决: 重启就即可
【附录 参考资料】
以防链接无效,将下面网文转载附后
http://www.linuxidc.com/Linux/2011-03/33927.htm
虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统
http://hi.baidu.com/tianma33521/item/7a25f40b6e1535ed34990234
虚拟机下在2440开发板挂载nfs文件系统
http://hi.baidu.com/totty/item/6691303e37a82b80b711dbb3
[ubuntu]如何在VM虚拟Ubuntu中同时使用双网卡
http://www.100ask.net/forum/showtopic-3946.aspx
实战:搭建OK6410NFS网络根文件系统--完结 阿释密达沙加
http://www.100ask.net/forum/showtopic-3942.aspx
搭建NFS网络根文件系统——内核和根文件系统制作 阿释密达沙加
http://hi.baidu.com/wswxfwps/item/aede37c85a428801ac092f19
主机、虚拟机、开发板网络环境搭建小结备忘
http://bbs.c-ps.net/News-36254-1-1.html
【S3C6410学习心得之二】OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像
这个只是Ubuntu的操作:
http://www.eefocus.com/ayayayaya/blog/09-09/176197_491a2.html
在虚拟机下Ubuntu建立NFS网络文件系统
http://www.linuxidc.com/Linux/2011-03/33927.htm
虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统
为了在虚拟机Ubuntu中挂载nfs成功,期间遇到了很多的问题。今天挂载成功后,才觉得那些问题中有很多都
是可以避免的。但也许从另一个角度来讲,也是在锻炼自己的能力。
先说一说主要的步骤,然后我就说说要挂载成功的几个关键地方吧,你挂载不成功,很有可能就是这几个关键
地方没有做好。
首先第一步就是要为开发板烧写uboot和kernel。
1.先将SD卡格式化为FAT32格式。将启动代码固化到SD卡中。-
可能出现的问题:1 volume erro之类的。
解决方法:重新插拔SD卡,某些情况下可能要换一张SD卡试一试。
2.下载Uboot到nandflash中并设置Uboot工作参数。注意的就是串口和波特率要设置对。
可能出现的问题:1.ARNING: OEMMultiBINNotify: Invalid BIN region descriptor(s).
Don't support raw image
解决方法:这种情况请注意选这从USB Port-->UBOOT-->UBOOT”,注意是选Uboot,而不是选transmit。
2.无法将uboot写进nandflash
解决方法:请一直按着ENTER键,直到OK出现。(这一般是nand erase没有干净,一定要等到OK出现。如果不
出现,说明没有擦除干净)
3.烧写Kernel。
可能出现的问题一般同上面的2,注意我说的几点即可。
4.安装根文件系统,也是非常重要的一步。www.linuxidc.com如果你要安装yaffs2文件,这其中又会涉及要挂
在NFS。
假设我们要安装的是yaffs2文件。
首先第一步:安装NFS
在主机(我是在虚拟机中的Ubuntu)上安装NFS服务软件,因为Debian/Ubuntu上默认是没有安装的。
1、安装端口映射器portmap(可选)
$ sudo apt-get install portmap
2、在终端提示符后键入以下命令安装NFS服务器
$ sudo apt-get install nfs-kernel-server
3、安装NFS客户端(可选)
$ sudo apt-get install nfs-common
注意:nfs- kernel-server和nfs-common都依赖于portmap。另外,www.linuxidc.com在一些文档中提出还需
要使用apt-get来手动安装NFS的客户端 nfs-common,以及端口映射器portmap,但其实这是没有必要的,因为
在安装nfs-kernel-server时,apt会自动把它们安装好。
这样,宿主机就相当于NFS Server。同样地,目标系统作为NFS的客户端,需要安装NFS客户端程序。如果是
Debian/Ubuntu系统,则需要安装nfs- common(第3步)。
第二步:配置NFS
1、配置portmap
方法1:编辑/etc/default/portmap,将"-i 127.0.0.1"去掉;
方法2:$ sudo dpkg-reconfigure portmap,出现“正在设定portmap”软件包设置界面,对Should portmap
be bound to the loopback address?选择“否(No)”。-
第三步:创建共享目录
例如我们采用/home/localhost/arm6410/root作为NFS共享目
$ sudo mkdir arm6410
$ cd arm6410
$ sudo mkdir root
$ chmod 777 arm6410 (更改文件权限,这个一定要改,不然很可能后面会出问题)
$ chmod 777 root (更改文件权限,这个一定要改,不然很可能后面会出问题)
第四步:配置共享目录及yaffs2文件
修改主机上/etc/exports文件的内容,添加一行:/home/localhost/arm6410/root *
(rw,sync,no_root_squash)
$ sudo vim /home/localhost/arm6410/root *(rw,sync,no_root_squash)
注:后面设置uboot启动参数的时候,目录名要和这个一样。
其中:
/home/localhost/arm6410/root 表示NFS共享目录,它可以通过NFS挂接作为开发板的根文件系统;
* 表示所有的客户机都可以挂接此目录,当然你也可以指定具体的IP,如192.168.x.x;
rw 表示挂接此目录的客户机对该目录有读写的权力;
sync 表示所有数据在请求时写入共享,即数据同步写入内存和硬盘;
no_root_squash 表示允许挂接此目录的客户机享有该主机的root身份;
配置好文件共享目录后,将yaffs2文件放置在共享目录下,然后解压即可。
第五步:启动NFS服务
在完成前面的配置后,首先需要启动portmap和NFS这两个服务,并且 portmap服务一定要先于NFS服务启动。
$ sudo /etc/init.d/portmap start
$ sudo /etc/init.d/nfs-kernel-server start
其他可能要用到了:
停止NFS服务
在停止NFS服务的时候,需要先停止NFS服务再停止portmap服务,如果系统中还有其他服务需要使用portmap服
务,则可以不停止 portmap服务。
$ sudo /etc/init.d/nfs-kernel-server stop
$ sudo /etc/init.d/portmap stop
重新启动portmap和NFS服务
$ sudo /etc/init.d/portmap restart
$ sudo /etc/init.d/nfs-kernel-server restart
检查portmap和NFS服务状态
$ sudo /etc/init.d/portmap status
$ sudo /etc/init.d/nfs-kernel-server status
第六步:配置目标板和主机(我的是虚拟机中Ubuntu)IP
这两个IP一定要在同一个网段内,否则会出现很多的问题,很多像Root-NFS: Server returned error -5
while mounting /forlinx/root的问题就是由此引起。
是更改目标板IP,这个前提是你能够进入开发板环境,一般也就是你已经安装了类似cramfs文件系统,但是你
想要用yaffs2文件系统的。
进入开发板环境,进入到/etc/init.d/目录下会看到一个rcS文件,IP就是在这个文件修改的。
# vim /etc/init.d/rcS
加上一段:
/sbin/ifconfig eth0 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.1 up-
:wq 保存退出
(//也可以命令更改# ifconfig eth0 202.118.212.168 netmask 255.255.255.0 )
改完后就重启一下开发板。
第七步:在开发板上设定启动参数
通过u-boot设置启动参数
u-boot启动时,在命令提示符下设置启动参数如下:
setenv bootargs "root=/dev/nfs nfsroot=192.168.1.20:/home/localhost/arm6410/root/
ip=192.168.1.10:192.168.1.20:192.168.1.1:255.255.255.0:arm6410:eth0:off console=ttySAC0,115200"
其中:
192.168.1.20为主机IP地址
/home/localhost/arm6410/root为共享目录
192.168.1.10为开发板的IP地址
console=ttySAC0,115200为控制台参数。
保存参数:saveenv
第八部:烧写yaffs2文件
重启后在uboot命令中nand erase x x 也即要烧写的区域
然后重启在开发板环境中,在终端输入writeyaffs即可(不同的开发板命令不同,请注意)
到此基本完成,yaffs2文件系统已经烧写好了。
最后一步:设置启动参数
重启开发板,将yaffs2文件配置为根文件系统。
在uboot命令行中输入以下参数:
setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200"
saveenv
由此整个挂载NFS及配置yaffs2文件成功!
http://hi.baidu.com/tianma33521/item/7a25f40b6e1535ed34990234
虚拟机下在2440开发板挂载nfs文件系统忙活了一晚上,终于在虚拟机下成功挂载了nfs文件系统
硬件平台:vm ubuntu10.10 micro2440
下面是我主要参考的文章链接。
1、在虚拟机下建立两块网卡,一块为nat方式,一块为bridge方式。其中,net方式用来连接上网,bridge为
挂载虚拟机。
http://hi.baidu.com/yeqing0218/blog/item/08fee9175361ac19c93d6d8c.html
2、在ubuntu下安装nfs系统。
3、开发板命令root:# mount -o nolock -t nfs 192.168.100.21:/home/cnh01994/nfsroot /mnt/nfs则工作
正常。 直接mount无法挂载。
4、http://apps.hi.baidu.com/share/detail/24305109
5、
我的主机配置情况。
6、
这个eth1的配置情况。eth1为bridge方式。
我在这里一直没有办法配置eth1。
后来干脆自己直接加了一个Auto eth1。令ip:192.168.1.3 netmask255.255.255.0 gateway192.168.1.255这
是是参照我开发板上的来设置的。
就这些吧,详细过程自己百度吧。呵呵,中间小情况不断,还好,一个个都解决了。baidu+google,万能。
7、
Build Options->
Build BusyBox as a static binary (no shared libs)
Build with Large File Support (for accessing file>2GB)
如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静
态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用
静态编译,否则会报诸如:bin/sh: hello :not found的错误。
静态编译如:
arm-linux-gcc –static hello.c –o hello
这点也要注意。
http://hi.baidu.com/totty/item/6691303e37a82b80b711dbb3
[ubuntu]如何在VM虚拟Ubuntu中同时使用双网卡
因为开发需要,我的PC要同时使用两块网卡,一块连接互联网(机器内置),另一块连接开发板(PCI8139)
。
那么,同时运行的虚拟Linux是否也可以安装两块网卡,一块上网,一块连接开发板呢?
答案是肯定的!下面来看看具体步骤:
1)在虚拟机中添加两块网卡,一块采用NAT模式,另一块采用bridged模式(图1);
2)Virtual Netword Editor中设置VMnet0为8139网卡(图2);
3)进入虚拟机,进行网络配置(图3):
我的eth0是本机网卡,NAT模式,因此采用DHCP自动分配。
eth1则是后加的8139,bridged模式,因此需要手动分配ip:192.168.0.3。
另外两块网卡均不需使用漫游模式。
配好之后,就应该可以同时上网和连接开发板了。
最后说说开发板的启动过程:
开发板(ip:192.168.0.2)从Windows(ip:192.168.0.1)获取linux内核,启动完毕后,从Ubuntu(ip:
192.168.0.3)挂载NFS网络文件系统。
非常方便,做开发的朋友可以试一下。
http://bbs.witech.com.cn/thread-2464-1-1.html
http://www.baidu.com/s?wd=ubuntu%20%E8%99%9A%E6%8B%9F%E6%9C%BA%20%E6%8C%82%E8%BD%BD%E7%BD
%91%E7%BB%9C%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&pn=10&tn=sogouie_1_dg&ie=utf-8&rsv_page=1
http://www.100ask.net/forum/showtopic-3946.aspx
实战:搭建OK6410NFS网络根文件系统--完结 阿释密达沙加
根文件系统按照前面《搭建NFS网络根文件系统——内核和根文件系统制》中上传的文档制作的即可。我就是
按照上述步骤制作的根文件系统。只要一步一步按照上述步骤,就没问题。
假设按照前面所说的方法移植的支持网络的uboot已经烧写进ok6410(怎么烧写uboot,ok6410手册很清楚)
那么启动开发板 瞬间按住空格键
截图01.png(44.49 K)
2012-5-22 16:53:52
输入printenv
显示了uboot的环境变量。会看到这个
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000
/*
printenv
bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200
bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000
bootdelay=1
baudrate=115200
ethaddr=00:40:5c:26:0a:5b
ipaddr=192.168.1.20
serverip=192.168.1.10
gatewayip=192.168.1.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
*/
如果你前面编译内核,只是按照飞凌默认配置,并没有做任何修改(但要设置使其支持nfs根文件系统这个,
飞凌默认配置文件是支持这个的,所以可以不做任何修改),即没有修改相关启动代码(为了让其支持挂载
nfs根文件系统而修改的代码),那么要用
setenv bootargs "root=dev/nfs nfsroot=192.168.5.100:/home/rootfs
ip=192.168.5.120:192.168.5.100:192.168.5.1:255.255.255.0:witech.com.cneth0:off
console=ttySAC0,115200"
/*
setenv bootargs "root=dev/nfs nfsroot=192.168.0.10:/forlinx/root rw noinitrd init=/linuxrc
ip=192.168.0.232:192.168.0.10:192.168.0.255:255.255.255.0 console=ttySAC0,115200"
*/
说明:root=dev/nfs nfsroot=192.168.5.100:/home/rootfs :nfs根文件系统所在的目录,必须和前面配置
的nfs环境时目录一致
192.168.5.100虚拟机ip
192.168.5.120是开发板uboot设置的ip
192.168.5.1 网关 虚拟机上设置和开发办上的一致
255.255.255.0 子网掩码
请根据自己的情况 填写。
最后 :saveenv
如果不能挂载nfs系统(每设置一个服务,必须重启这个服务)
(1)、NFS服务配置是否正确 #vi /etc/exports
(2)、防火墙是否关闭(3)、IP地址是否设置正确(4)、开发板网线直接连接交换机吧!(5)、····
·········
http://www.100ask.net/forum/showtopic-3942.aspx
搭建NFS网络根文件系统——内核和根文件系统制作 阿释密达沙加
做开发的都知道NFS网络根文件系统的方便性,现在就分享一些经验。我的是OK6410开发板,唉。。。还是对
飞凌很是失望。官方提供的文档一笔带过,跟没说一样。
首先按照飞凌官方的文档,配置内核(就是生成.config文件,飞凌文档就提供了这一个作用),其实可以暂
时按照官方给的默认配置,随着学习驱动的深入,可以再把相应自带的驱动去掉,再重新编译。比如说去掉
LED支持,键盘的支持,否则你在自己编写LED驱动等驱动时会发生一些莫名奇怪的错误。但是作为第一次搭建
环境来说,我们的主要目的是熟悉流程!!!
这里面要注意的就是要把uboot里面的uImage制作工具拷贝到虚拟机的/bin目录中。(稍后会给出具体的参考
文档)
对于制作根文件系统,老师用的busybox版本较高,我用的是busybox1.13.3。老师用的动态编译busybox,我
用的是busybox静态编译。区别是动态编译时,在制作根文件系统时,要手动拷贝相应的库文件到自己制作的
根文件系统的相应目录,静态编译不需要。动态编译的根文件系统,不要求交叉编译时 选择 -static选项。
而静态编译的根文件系统,要求交叉编译程序时,必须 -static,即静态编译,否则在开发板上运行交叉编译
的程序时,会出现"not found"等这样的错误。而且静态编译的程序,比较大,因为包含了运行时所需要的库
。但是静态编译根文件系统简单!!!初学者,可以两者都尝试一下。
特附上国嵌的内核和根文件系统制作详细流程以及所需要用到的文件。
busybox 1.13.3
http://kuai.xunlei.com/d/QAHCSMYIDQDW
需要用到的配置文件etc/下的文件
etc.tar.gz (480 Bytes, 下载次数:10)
http://kuai.xunlei.com/d/QDBYWIVSPBAX
编译好的根文件系统
http://kuai.xunlei.com/d/QFKWWXCNXIHE
http://hi.baidu.com/wswxfwps/item/aede37c85a428801ac092f19
主机、虚拟机、开发板网络环境搭建小结备忘首先得声明,本文章属转载,个人觉得写得灰常好,图文并茂,
详细,深刻,不仅让本来网络没学好的本人对网络这一块有了更深刻的理解,而且解决了我纠结了几天的 开
发板 虚拟机 win7 之间的通信问题得到了解决!
最近学习QTE,搞了两晚上终于搭建好了QT编译环境(QTX86环境,QTEX86环境,QTEArm环境),但是还是不知
道怎么让QT程序在开发板上跑起来,貌似有中方可选方案:
1.静态编译QT库和QT程序,使QT程序能独立发布,不依赖外部库,看来是很简单,但搞了一晚上没搞明白,于
是暂时放弃了这种方案,等以后熟悉了在回头研究
2.移植QT库到开发板,又有两种选择,重新烧写文件系统或使用NFS网络文件系统
a)重新烧写文件系统,不懂怎么加入QT库,暂时不选
b)使用NFS文件系统,也不懂,貌似使用NFS开发调试是潮流,不懂也得学一下,使用NFS文件系统首先的保
证开发板和主机/虚拟机处于同一网络下,能互访互通,于是有了后面的网络搭建过程
目的:
1.开发板, 主机, 虚拟机能互访互通
2.主机,虚拟机能同时上网
本人使用开发环境
主机:x86-win7 带双网卡
虚拟机:wmware7.0 + ubuntu9.10
开发板:arm11(Ok6410)
网络配置:
1.网络模型
2.开发板IP配置如下,192.168.0.232烧写系统时设置的,具体多少无所谓,只要配置主机IP和虚拟机IP在同
一子网内即可(这里开发板、主机、虚拟机通过网卡2构建了子网)
a)连接开发板和主机的网线必须是交叉网线,什么是交叉网线:
i.一头是:1白橙 2橙 3白绿 4蓝 5白蓝 6绿 7 白棕 8棕 (568B标准)
ii.一头是:1白绿 2绿 3白橙 4蓝 5白蓝 6橙 7白棕 8棕 (568A标准)
iii.交叉网线用于同口连接(如两边都是pc,或两边都是hub)
b)如果只有直连网线可以通过路由器连接
3. win7主机配置
手动配置win7主机网卡2对应Ip地址,设置“本地连接”属性:
4.虚拟机wmware设置:
选择WMNet0和WMNet1分别映射到真实的网卡1和玩卡2,这里net0映射到的时真实的无线网卡,net1映射到内网
网卡
在wmware的“View”—>“settings”下设置
设置Ubuntu的网络:---Edit Connections…
设置Ubuntu ip地址
上面这些设置,Ubuntu就可以做外开发环境了,可以ping通主机和开发板了
5. 现在Ubuntu只连接了局域网还不能上网,需要win7下共享网卡1的外部网络
之后重启下ubuntu就可以上网了
By sheny 2010.12.11
【S3C6410学习心得之二】OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像
http://bbs.c-ps.net/News-36254-1-1.html
最近利用一切业余时间学习,确实是考验意志的过程,呵呵。
系统:Ubuntu10.04
开发板:飞凌OK6410
软件下载地址:www.witech.com.cn
1. 准备 NFS 文件系统目录
启动 nfs 服务之前,必须在 Linux 虚拟机上准备好 NFS 共享目录。
例如我们采用 ubuntu 的“/forlinx/root”作为 NFS 共享目录,将用户基础资料光盘中
“linux2.6.28/filesystem/OK6410_yaffs2_v1.0.tgz”压缩文件拷贝到这个目录下,
然解压缩,得到根文件系统所需要目录。
在虚拟机上打开一个终端,输入以下命令:
mkdir /forlinx/root
将 OK6410_yaffs2_v1.0.tgz 文件拷贝到该目录下,解压:
tar –zxf OK6410_yaffs2_v1.0.tgz
2. 设置主机 IP
这里我们将 Linux 虚拟机的 IP 设置为 192.168.0.231
3. 配置 NFS 服务
在虚拟机上新建一个终端,依次输入以下命令:
sudo apt-get install portmap
sudo apt-get install nfs-kernel-server
sudo gedit /etc/exports
在弹出的文本编辑器中编辑 exports 文件,在最后一行添加:
/forlinx *(rw,sync,no_root_squash)
4. 启动 NFS 服务
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
5. 在开发板上设置并保存启动参数
在 u-boot 命令行下输入以下命令设置 u-boot 启动参数:
setenv bootargs "root=/dev/nfs rw nfsroot=192.168.0.231rootpath
ip=192.168.0.232:192.168.0.231:192.168.0.201:255.255.255.0:witech.com.cn:eth0ff
console=ttySAC0,115200"
saveenv
(这个Uboot变量参数最为关键,依次为NFS文件系统所在目标机的IP,开发板IP,
NFS文件系统所在目标机的IP,路由网关,掩码)
重新启动开发板,Linux 内核启动后会自动挂载 NFS 文件系统。
-------------------------------------------------------分割
线---------------------------------------------------
最近发现网上有了Linux版本的DNW,而且已经是DNW2了,研究了下,的确是蛮用的。
虽然是针对2410及2440开发板的,但是修改后,6410的开发板也是能使用的,并且已经在ok6410上试验过了。
1.准备工作
首先要安装libusb,这在ubuntu底下非常方便,只要使用命令:
sudo apt-get install libusb-dev
就可以
其次是获取源码,去http://fayaa.com/code/view/13007/下载源码,另存为dnw2.c,存放到自定义目录即可
2.编译dnw2
编译dnw2也是十分简单,进入存放dnw2.c的目录,然后使用命令
gcc dnw2.c -o dnw2 -lusb
只要前面libusb顺利安装了,就可以编译成功
编译后,会有dnw2可执行文件产生
3.使用dnw2烧写镜像文件
3.1使用kermit连接到开发板后,打开开发板电源,然后按回车进入uboot的命令行模式
3.2顺利进入命令模式后,输入 dnw c0008000,回车
3.3在存放dnw2可执行文件的目录下,执行 ./dnw2 path/file,pat/file指的是镜像位置的所在目录和命令,
顺利的话,文件就开始向开发板上传
3.4上传完毕后,就擦除 Nandflash:在命令行中输入 nand erase 100000 300000 ,回车,这里的erase后两个
参数指的是物理地址,根据文档里是要烧写的镜像文件决定,切勿照搬
3.5将内存的内核映像文件烧写到 Nandflash:
在命令行中输入 nand write.e c0008000 100000 300000 ,回车,这里 write.e后面两个参数也跟遵循上面所
述。
按照这样的步骤完成后,就可以顺利完成烧写,我在ok6410上试验一次即顺利通过,有了这个dnw2这个小程序
,以后就不用切换到windows环境下去了,对于开发的效率有着极大的帮助。
PS:其实查看了dnw2的源码,整个实现不是很复杂,关键是熟悉这些东西的人才能写出来,第一个奉献者总是
伟大的,后面还有使用Qt加了GUI界面的dnw2,不过十分简陋。打算研究透彻后使用Qt重写一边,以便同时支
持2440和6410。
本文出处:http://blog.cnnbboy.com/?cat=26,欢迎大家一起交流。
这个只是Ubuntu的操作:
http://www.eefocus.com/ayayayaya/blog/09-09/176197_491a2.html
在虚拟机下Ubuntu建立NFS网络文件系统
作者:蒙洋,华清远见嵌入式学院讲师。
在ubuntu上默认没有安装NFS服务器,因此:
apt-get install nfs-kernel-server
apt-get install nfs-common
NFS服务程序和客户端程序安装完成。
上面的两个服务程序已经给大家安装好了,默认它是正常的。
配置NFS相关的IP地址(由于我们是XP下的VMware下的Ubuntu,稍复杂):
PC机的windows下的网络连接地址:192.168.1.100,这个应该都会设置吧!
在VMware->Settings->Network Adapter->bridged,选上。Device status的连接全部选上
OK在linux下设置IP地址,一定和windows在同一个网段,例如:192.168.1.10
测试一下windows和linux通信正常吗?
运行命令:#ping 192.168.1.100
配置/etc/exports
运行命令:#gedit /etc/exports
在文件的最后添加如下一句话:
/root (rw,sync,no_root_squash) //这一步可能比较关键的,我之前括号里都只是写了(rw),结果一直都
不行。
共享/root目录内容.且有读,写权限, 并且该用户进入/root目录后的身份为root
当然你的root里面一定有可以正常工作的文件系统哦
运行 #showmount -e 查看NFS server的export list.
若更改了/etc/exports, 运行 #sudo exportfs -r 更新
运行#sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
以上若有错误,说明nfs还是没有完全配置好,但是不影响后面的操作
测试NFS:
可以尝试一下挂载本地磁盘(假设本地主机IP地址为:192.168.1.10., 将/root挂载到/mnt)
#mount 192.168.1.10:/root /mnt
运行#df 看看结果
若想卸载刚才挂载的文件系统,运行如下命令:
# umount /mnt
现在可以通过NFS启动系统了
因为我用的uboot可以传启动参数给内核,所以还可以直接uboot引导内核,直接自动挂载nfs文件系统