嵌入式Linux之相关网络环境的搭建
在嵌入式Linux开发过程中,与网络相关的配置非常重要。因为开发板与宿主机的文件交互均是通过网线经由相关的网络服务器实现的,在这一部分走的弯路也比较多,现将相关服务器的搭建流程以及相应配置记录如下。
1. Linux虚拟机,Window,目标板网络互通
在开发过程中,linux虚拟机,window系统目标板的网络应该是通畅的。首先,我们可以通过window下的服务器相关的软件对目标板进行操作,这就要求window与目标板之间必须网络互通;另外,因为我们的Linux服务器是虚拟的,当通过Linux虚拟机对目标板进行操作时,实际还是要先透过window进而与目标板沟通的。因而,Linux与Window也必须是互通的。
要保证这三者之间两两互通,需要进行
如下设置 :
关闭window和Linux系统的防火墙,Linux下关闭防火墙的指令为(只针对Ubuntu 系统):
sudo ufw disable
将Window,Linux,目标板的IP设置在同一个网段内
例如:window的静态IP设置为192.168.7.100
Linux下的静态IP设置为 192.168.7.110
目标板的静态IP设置为 192.168.7.236(目标板默认值,可更改)
目标板IP设置方法为:进入Uboot指令行,设置相关的环境变量,并保存:
setenv serverip 192.168.7.100 ##宿主机IP
setenv ipaddr 192.168.7.236 ##目标板IP
saveenv ##保存环境变量
在tftp操作时,需要特别注意的是,这里的宿主机的IP配置的是Window下的IP,宿主机与目标板的tftp操作必须在window下进行。如果想切换到Linux下进行,必须将serverip更改为linux系统下的静态IP值。
配置虚拟机选项,使虚拟机与Window互通
在虚拟机中,点击VM->setting->network adapter,将连接方式选成bridge连接方式。这样,在IP设置好,防火墙关闭的情况下,虚拟机和Window系统之间应该两两能够ping通。
完成上述配置之后,可以进行测试。启动smart3250,进入uboot指令行,依次以ping的形式进行测试。目标板应该能ping通Linux虚拟机和Window。然而,在目标板仅加载uboot的情况下,宿主机是无法ping通目标板的,这可能是由于目标板中uboot对网络支持不完善。但是当整个Linux系统移植完成之后,这三者之间应该是两两互通的。
NFS服务器搭建和使用
NFS就是Network File System,最早是由SUN公司提出并发展的。它最大的功能就是可以通过网络,让不同的机器,不同的系统,共享某个文件夹。对于嵌入式平台来说,通常需要在主机上配置NFS服务服务器,将某个特定的目录共享给目标系统来访问和使用。通过NFS,目标系统可以直接访问运行在主机端的文件,可以减少对目标系统FLASH的烧写,既减少了对FLASH的损害,同时也节省了烧写FLASH所花费的时间。
NFS安装需要两个程序,RPC程序和NFS程序,具体安装步骤《嵌入式Linux学习笔记-主机平台环境搭建》,这里主要讲述NFS服务器的使用。
首先需要修改/etc/exports文件,在上一文档中,配置的用户端IP为192.168.7.110,是Linux宿主机的IP,主要用于测试,看NFS服务器是否可以挂载自己的文件系统。当Linux平台搭建完成之后,就需要目标板来挂载宿主机的文件夹。这时需要将IP改为目标板的IP,允许目标板挂载宿主机的NFS文件夹。同时添加了一个新的NFS文件夹
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
#/srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
/home/iemink/nfsfiles 192.168.7.236(rw,sync,no_root_squash)
/home/iemink/smart3250 192.168.7.236(rw,sync,no_root_squash)
之后,在目标板的命令行输入挂载指令:
root@ZLG:~# mount –t nfs 192.168.7.110:/home/iemink/smart3250 /mnt/nfs –o nolock
就可以在目标板/mnt/nfs文件夹下看到挂载的宿主机smart3250文件夹。
NFS服务器的具体使用,以一个例子说明。
首先在宿主机的NFS文件夹、/home/iemink/smart3250中新建一个/app/hello文件夹,作为应用程序文件夹,在其中编写一个简单的hello world程序,通过交叉编译链编译:
arm-vfp-linux-gnu-gcc hello.c –o hello
生成可执行的目标文件。注意,这些都是在宿主机中完成的,至于这个程序能不能在目标板上执行,则需要通过NFS服务器将该文件挂载在目标板上执行,如下:
root@ZLG:~# mount –t nfs 192.168.7.110:/home/iemink/smart3250 /mnt/nfs –o nolock
root@ZLG:~# cd /mnt/nfs/app/hello
root@ZLG:~# ./hello
hello world
可以看到,该目标代码可以再开发板上执行。若要发布程序,则将该程序复制到开发板系统目录即可,若要开机自动运行该代码,则可以修改/etc/rc.d/reS文件,在其中增加执行程序的命令即可。例如,将上述的hello文件放置在/home文件夹下,若要开机执行这段程序:
root@ZLG:/mnt/app/hello# cp hello /home
root@ZLG:/mnt/app/hello# vi /etc/rc.d/reS
##在该文件结尾添加
/home/hello
tftp服务器的使用
NFS服务器仅仅涉及文件的挂载,不涉及FLASH操作,可以在目标板上挂载一个容量很大的文件夹而不需要考虑目标板的FLASH容量。而tftp服务器则是实现文件的传输,需要考虑目标板容量。tftp服务器的使用上,需要注意的是宿主机和目标板IP的配置。需要将两者配置在同一个网段内。在window下使用tftp服务器很方便,直接运行tftp32.exe,则宿主机就成为一个tftp服务器。
在软件的在current directory中,选择需要传输文件所在的文件夹,点击show dir,查看该文件夹下的内容:
burn
rootfs.tar,bz
safefs.cramfs
uboot.bin
uImage
其中uImage是需要传输的文件,在uboot中输入指令:
tftp 80008000 uImage
则将uImage文件烧写如目标板的RAM的80008000空间,再通过nand write指令将其固化到FLASH中。