准备工作
基于上一篇文章:搭建最小linux
确保同一网络环境
主要目标:开发板能ping通其他设备,其他设备亦可ping通开发板。
-
连接网线,更新开发板
/etc/eth0-setting
文件,配置为同一网段地址。下图是我的配置,路由器ip是
192.168.2.1
,故我配置成了没被使用的192.168.2.200
重启开发板,使用
ifconfig
查看inet地址变为设置值就基本ok了。 -
设备之间相ping
准备网络应用程序包
应用 | 对象 | 使用方法 | Web |
---|---|---|---|
ftp服务器 | 开发板 | 开始 | 自带 |
ftp客户端 | Windows电脑文件管理器 | 使用 | 自带 |
tftp服务器 | Ubuntu12.04 | 开始 | apt-get |
tftp客户端 | 开发板 | 使用 | 自带 |
nfs服务器 | Ubuntu12.04 | 开始 | apt-get |
nfs客户端 | 开发板内核 | 使用 | 内核 |
FTP服务
开发板启动ftp服务器
开发板BusyBox自带ftp服务器应用,直接输入以下命令即可开启:
1
tcpsvd 0 21 ftpd -a root -w / &
Windows文件管理器浏览ftp
在PC文件管理器的地址栏输入开发板的ftp地址,即可双向传递文件。
1
ftp://192.168.2.200
TFTP服务
Ubuntu搭建tftp服务器
-
安装xinetd
1
apt-get install xinetd
-
安装tftp和tftpd
1
apt-get install tftp tftpd
-
建立tftp的配置文件
1
vim /etc/xinetd.d/tftp
内容如下(务必检查tab填充,否则配置不生效):
1 2 3 4 5 6 7 8 9 10 11 12 13
service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
-
建立tftp服务器的文件目录
1
mkdir /var/tftpboot
-
重启xinetd服务,使配置生效
1
sudo /etc/init.d/xinetd restart
接下来是安装完成后的本机小测试(只适用于上位机)
已知在本机tftp服务器根目录有文件hello(请事先创建),使用tftp下载到当前目录下:
开发板获取tftp文件
开发板BusyBox自带tftp客户端应用,输入以下命令获取远程tftp的hello文件:
1
tftp 192.168.2.246 -g -l hello -r hello
一些参数信息:
-g
下载文件;-p
上传文件;-l
本地文件名;-r
远程文件名;
NFS服务
Ubuntu搭建nfs服务器
-
安装nfs服务
1
apt-get install nfs-kernel-server
-
创建共享文件夹
1
mkdir /home/nfsroot
-
修改添加共享目录配置
1
vim /etc/exports
在最后加上一句,给路径增加读写、同步写入内存硬盘、客户端root权限属性:(这些一定要加,否则可能会因为权限而拒绝)
1
/home/nfsroot/ *(rw,sync,no_root_squash)
-
重启服务
1 2
/etc/init.d/portmap restart /etc/init.d/nfs-kernel-server restart
接下来是安装完成后的本机小测试(只适用于上位机)
已知在本机nfs共享目录有文件hello(请事先创建),使用mount挂载共享目录到/mnt/nfs
目录下:
1
2
mkdir /mnt/nfs
mount -t nfs localhost:/home/nfsroot /mnt/nfs
取消上面的挂载执行:umount /mnt/nfs
开发板连接nfs服务器
需要配置内核支持nfs,注意是kernel,不是最小linux文件系统。
内核配置
此步骤在虚拟机中进行。
关于内核的下载,由于文件太大自行在光盘中寻找。
-
进入解压后的内核目录,将配置文件替换为QtE的config文件
1
cp -r config_for_linux_scp_elite .config
-
进入配置界面,配置内核
1
make menuconfig
更改项清单如下:
不更改红框中的项就可以跳到下一步,否则继续看本步骤下面的内容。
内容A举例,下面断行非回车而是空格:
1
root=/dev/nfs rw nfsroot=192.168.2.246:/home/nfsroot ip=192.168.2.200:192.168.2.246:192.168.2.1:255.255.255.0:iTOP:eth0:off rootfstype=ext4 init=/linuxrc console=ttySAC2,115200
其中
192.168.2.246:/home/nfsroot
是搭建好的nfs服务器配置过的共享目录;192.168.2.200:192.168.2.246:192.168.2.1:255.255.255.0:iTOP:eth0:off
分别是开发板ip:nfs服务器ip:网关:子网掩码:任意名称:网卡名称:off
; -
配置ok后,编译生成内核镜像
1
make zImage
-
仅烧录内核镜像到开发板,参见烧录
开始连接
-
内核仅使能nfs客户端功能
开发板输入以下命令直接进行挂载(nolock很重要)
1 2
mkdir /mnt/nfs mount -t nfs 192.168.2.246:/home/nfsroot /mnt/nfs -o nolock
结果是远程目录(对内容无要求)被挂载到了本地目录中。
df
查看挂载;umount /mnt/nfs
取消挂载; -
内核使能nfs根文件系统
顾名思义,也就是以远程的文件作为系统进行启动,所以需要远程nfs共享目录里是一个完善的文件系统文件夹。
- 先清空nfs服务器上共享目录,然后将最小linux的文件全部拷贝进去。
- 万分注意服务器共享目录中
etc/init.d/ifconfig-eth0
第8行更改为if grep -q nfs /proc/mounts ; then
- 烧录完内核,启动开发板试试。
如果提示
nfs: server 192.168.2.246 not responding, still trying
优先确认连接和nfs上的共享目录问题,因为使用nfs根文件系统后就完全不会使用到mmc里的文件系统了。