嵌入式成长轨迹61 【智能家居项目】【ARM 飞凌ok6410】【在虚拟机Ubuntu下NFS网络文件系统建立】

推荐阅读顺序:

基本环境搭建:

【配置】在虚拟机Ubuntu下NFS网络文件系统建立

《ok6410 Qt移植百科全书》

【配置】QT&QWT&sqlite3安装配置

这中间出现问题可查阅

【调试】ARM QT 移植环境搭建问题---补充《ok6410 Qt移植百科全书》

日常使用:

【配置】将PC端QT代码修改为ARM端可用

【配置】SD卡一键烧写

这中间出现问题可查阅:

【调试】智能家居代码移植时环境调试问题集锦

环境配置人员

郑子木

硬件环境

虚拟机vm8.0.2 build-591240 ,

Ubuntu12.04,

飞凌ok6410开发板,

win7 家庭版

网络模型:

子环境配置A:外部环境与主机

配置步骤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 虚拟机设置双网卡

我想要同时使用两块网卡,一块连接互联网(机器内置),另一块连接开发板。

1)在Ubuntu虚拟机(关机状态,上方VM菜单setting,打开后看左下角有个add)中添加Network Adapter。最后得到两块网卡,一块采用NAT模式,另一块采用custom模式(连接VMnet0);

2)在Ubuntu虚拟机上方Edit菜单的Virtual Network Editor中,设置VMnet0为bridged,指向Realtek PCIe FE Family Controller网卡;没有这个网卡就先选别的,之后板子打开失败(就是一直黑屏,大概3、4分钟毫无反应)再回到Editor这里,就会发现有另外一块网卡识别出来,选择它再重启板子就可以了。将VMnet0设置为Host-only而不是bridge好像也可以自动识别。

//有需要可继续添加

以上子环境A配置完毕

注意事项

子环境配置B:虚拟机Ubuntu12.04的设置

配置步骤1 进入虚拟机,根据主机IP修改虚拟机IP

在右上角的网络连接图标,里边有edit connection可以点进去设置,上网用的网卡不用管,但连板子用的网卡IP要设置好(可以通过关闭是否断网,看看哪个是本机上网用的网卡),一定要跟主机在同一个网段内(就是IP地址的前三个数字相同,最后一个不一样)。

我的eth0是本机网卡,NAT模式,因此采用DHCP自动分配。

eth1则是后加的网卡,bridged模式,因此需要手动分配ip:192.168.0.10。

192.168.0.10为宿主机(有虚拟机的就是虚拟机了)IP地址

192.168.0.255网关 开发板上设置和虚拟机上的一致!

255.255.255.0 掩码

另外两块网卡均不需使用漫游模式。

配好之后,就应该可以同时上网和连接开发板了。

顺便说说开发板的启动过程:

开发板(ip:192.168.0.232)从Windows(ip:192.168.0.2)获取linux内核,启动完毕后,从Ubuntu(ip:192.168.0.10)挂载NFS网络文件系统。

现在Ubuntu只连接了局域网还不能上网,需要win7下共享网卡1的外部网络

配置步骤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

//有需要可继续添加

以上子环境B配置完毕

注意事项

连板子用的网卡IP要设置好(可以通过关闭是否断网,看看哪个是本机上网用的网卡),一定要跟主机在同一个网段内(就是IP地址的前三个数字相同,最后一个不一样)。

修改主机上/etc/exports文件的内容,在最后添加一行:

/forlinx/root *(rw,sync,no_root_squash)

注:后面设置uboot启动参数的时候,目录名要和这个一样。

子环境配置C:开发板ARM11 ok6410的设置

配置步骤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 eth0 192.168.0.232 netmask 255.255.255.0 broadcast 192.168.0.255)

改完后就重启一下开发板。

配置步骤2 检查网络连接情况

看是否虚拟机、本机、目标板三者可以两两ping通,要是不能就要重新看看IP设置是否正确、网线是否插牢

如果不行,就要查看虚拟机、本机、目标板三者的ip、网关等。注意本机应该修改“本地连接”(而非“无线连接”)的属性->协议TCP/ipv4项。

配置步骤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

//有需要可继续添加

以上子环境B配置完毕

注意事项

宿主机、目标板(或者有虚拟机的就是:虚拟机、本机、目标板三个)的IP一定要在同一个网段内,否则会出现很多的问题

问题及解决方案

问题1

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)

解决:

1、没有在指定目录下给个文件系统,应将用户基础资料光盘中“linux2.6.28/filesystem/OK6410_yaffs2_v1.0.tgz”压缩文件拷贝到这个目录下并解压

2、ARM启动参数bootargs设置错误,printenv应该有

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

问题2

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.0.255

问题3

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.255

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启动成功了

问题4:

突然间主机、虚拟机、板子无论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

解决: 重启即可

问题5:

本来已经连上NFS了,本机(win7)开了网络查询东西,之后板子重新启动时出错

dm9000 dm9000.0: eth0: link down

dm9000 dm9000.0: eth0: link up, 100Mbps, full-duplex, lpa 0x41E1

VFS: Unable to mount root fs via NFS, trying floppy.

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

[<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 [<c0008fd0>] (mount_block_root+0x204/0x25c)

[<c0008fd0>] (mount_block_root+0x204/0x25c) from [<c00090b0>] (mount_root+0x88/0xd0)

[<c00090b0>] (mount_root+0x88/0xd0) from [<c0009204>] (prepare_namespace+0x10c/0x1a8)

[<c0009204>] (prepare_namespace+0x10c/0x1a8) from [<c00084c4>] (kernel_init+0xf0/0x130)

[<c00084c4>] (kernel_init+0xf0/0x130) from [<c0034a34>] (kernel_thread_exit+0x0/0x8)

解决:断开当前本机网络,重试

附件目录

附件一

虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统

附件二

虚拟机下在2440开发板挂载nfs文件系统

附件三

主机、虚拟机、开发板网络环境搭建小结备忘

附件四

如何在VM虚拟Ubuntu中同时使用双网卡

附件五

实战:搭建OK6410NFS网络根文件系统--完结

附件1

题目:虚拟机中Ubuntu成功挂载NFS并为arm11烧录YAFFS2文件系统

来源:http://www.linuxidc.com/Linux/2011-03/33927.htm

正文内容:

为了在虚拟机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文件成功!

附件2

题目:虚拟机下在2440开发板挂载nfs文件系统

来源:http://hi.baidu.com/tianma33521/item/7a25f40b6e1535ed34990234

正文内容:

忙活了一晚上,终于在虚拟机下成功挂载了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

附件3

题目:主机、虚拟机、开发板网络环境搭建小结备忘

来源: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

附件1

题目:[ubuntu]如何在VM虚拟Ubuntu中同时使用双网卡

来源: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网络文件系统。 非常方便,做开发的朋友可以试一下。

附件5

题目:实战:搭建OK6410NFS网络根文件系统--完结

来源:http://www.100ask.net/forum/showtopic-3946.aspx

正文内容:

根文件系统按照前面《搭建NFS网络根文件系统——内核和根文件系统制》中上传的文档制作的即可。我就是按照上述步骤制作的根文件系统。只要一步一步按照上述步骤,就没问题。 假设按照前面所说的方法移植的支持网络的uboot已经烧写进ok6410(怎么烧写uboot,ok6410手册很清楚) 那么启动开发板 瞬间按住空格键 输入printenv 显示了uboot的环境变量。会看到这个 bootargs=root=/dev/mtdblock2 rootfstype=cramfs console=ttySAC0,115200 bootcmd=nand read 0xc0008000 0x100000 0x500000;bootm 0xc0008000 如果你前面编译内核,只是按照飞凌默认配置,并没有做任何修改(但要设置使其支持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" 说明: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 子网掩码 请根据自己的情况 填写。 最后 :savenv 如果不能挂载nfs系统(每设置一个服务,必须重启这个服务)

(1)、NFS服务配置是否正确 #vi /etc/exports

(2)、防火墙是否关闭(3)、IP地址是否设置正确(4)、开发板网线直接连接交换机吧!(5)、·············