通过自己这几天的摸索终于把linux交叉开发环境搭建好了,现在总结一下自己做的工作。
在嵌入式开发的过程中,PC应用开发是直接在pc上进行的,但是嵌入式linux应用开发则必须依靠宿主机才能进行。所以,在宿主机上搭建针对某种目标机的应用开发环境是进行嵌入式linux应用开发的第一步。我是在windows XP的平台上来做的,利用虚拟机中的linux来搭建所需要的开发平台。
在嵌入式开发领域广泛的使用NFS(Network Filesystem)来开发文件系统中的应用程序。NFS最初是由Sun公司提出的,NFS使得开发板可以通过网络远程挂载宿主机中的文件系统。从开发板的角度来看,访问宿主机中的文件系统就相当于在访问本地的文件系统。这样在宿主机上做了程序修改,就能马上在开发板上看到修改的运行结果,应用程序的调试效率得到了极大地提高。
一、在虚拟机下安装Fedora9,并设置其IP地址为:202.38.214.179,并设置相应的子网掩码和网关。
二、在pc上实现数据交互的常用接口有串口、并口、网络接口、USB接口等,在这里我们采用串口来实现交互,在mini2440开发板中提供了一个9针的串口。虚拟机设置串口,在本
3) 选择串口类型"使用位于主机上的物理串行端口(P)".
4) 单击"完成"按钮完成串口的创建.
三、Minicom的使用:在我们用windows开发板进行连接通行的时候,是采用"超级终端"。在linux系统中,常用的串口通信软件是Minicom。由于嵌入式linux应用开发是在linux平
2) 选中"Serial port setup"选项对串口参数进行配置,配置界面如图3所示:
从上面我们可以看到minicom采用的设备是ttyS5,在linux中/dev/目录下的ttyS0、ttyS1、ttyS2、ttyS3是对应与串口COM1、COM2、COM3、COM4的,由于在本人的实验在
开始设置的过程中的一些原因,在winodws下采用COM6端口的终端,所以这时候在linux得得到新的串口设备ttyS5,我是通过语句:
mknod -m 666 /dev/ttyS0 c 4 64
得到COM6对应的ttyS5串口的。最后退出Minicom设置界面。
四、设置宿主机上的NFS。
启动NFS: [root#lcoalhost]#/etc/init.d/nfs start
启动rpcbind: [root#lcoalhost]#/etc/init.d/rpcbind start
关闭防火墙: [root#lcoalhost]#/etc/init.d/iptables stop
设置共享目录 [root#lcoalhost]#vim /etc/exports
在编辑nfs服务的配置文件(注意:第一次打开的时候是空的,在exports文件中添加)
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中:/opt/FriendlyARM/mini2440/root_qtopia 表示nfs共享目录,它可以作为开发板的根
文件系统通过nfs挂接;
* 表示所有的客户机都可以挂接此目录
rw 表示挂接此目录的客户机对该目录有读写的权力
sync 所有数据在请求时写入共享
no_root_squash 表示允许挂接此目录的客户机享有该主机的root 身份
测试nfs是否成功,可以输入以下命令检验:
[root#lcoalhost]#mount -t nfs localhost:/opt/FriendlyARM/mini2440/root_qtopia /mnt/
运行后在到目录/mnt/下查看发现和目录/opt/FriendlyARM/mini2440/root_qtopia下的内容一样,这样nfs就可以了。
五、通过nfs挂载文件系统:启动mini2440开发板,并设置目标板启动模式为 Nand Flash 启动,在windows的超级终端下我们看到了vivi菜单界面,选择q进入Goto shell of vivi
,并写入以下内容:
Supervivi> param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=202.3 8.214.179:/opt/FriendlyARM/mini2440/root_qtopia ip=202.38.214.189:202.38.214.179 :202.38.214.254:255.255.255.0:mini2440:eth0:off"
其中param set linux_cmd_line是设置启动 linux 时的命令参数。其各参数的含义如下:
root=/dev/nfs 告诉内核使用NFS挂载根文件系统。
nfsroot 是自己开发主机的IP 地址。
“ip=”后面:
第一项(202.38.214.189)是目标板的临时IP(注意不要和局域网内其他IP 冲突);
第二项(202.38.214.179)是开发主机的IP;
第三项(202.38.214.254)是目标板上网关(GW)的设置;
第四项(255.255.255.0)是子网掩码;
第五项是开发主机的名字(一般无关紧要,可随便填写)
eth0 是网卡设备的名称。
要注意的是,宿主机的IP地址、网关和子网掩码必须和所设的参数值保持一致。内核启动时,会自动挂载NFS服务器共享的目录。如下所示:
eth0: link down IP-Config: Complete: device=eth0, addr=202.38.214.189, mask=255.255.255.0, gw=202.38.214.254, host=mini2440, domain=, nis-domain=(none), bootserver=202.38.214.179, rootserver=202.38.214.179, rootpath= Looking up port of RPC 100003/2 on 202.38.214.179 eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 Looking up port of RPC 100005/1 on 202.38.214.179 VFS: Mounted root (nfs filesystem) on device 0:11. Freeing init memory: 160K [10/Sep/2008:03:06:06 +0000] boa: server version Boa/0.94.13 [10/Sep/2008:03:06:06 +0000] boa: server built Mar 26 2009 at 15:28:42. [10/Sep/2008:03:06:06 +0000] boa: starting server pid=699, port 80 Try to bring eth0 interface up......NFS root ...Done Please press Enter to activate this console.
六、挂载了NFS文件系统,就可以在宿主机上进行嵌入式应用程序的开发了。
比如我们在宿主机上的root_qtopia目录下写一个helloword的c语言程序,通过arm-linux-gcc -o test test.c的编译成为在arm上可运行的可执行文件。