开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位
工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi
要移植的kernel版本:linux-4.4
Tiny4412开发板硬件版本为:
底板: Tiny4412SDK 1312B
核心板:Tiny4412 - 1306
——————————————————————————————————————————————————————————
1,安装服务
主机端:
tftp:
1,安装tftp-hpa、tftpd-hpa和xinetd:
$ sudo apt-get install tftp-hpa tftpd-hpa xinetd
tftp-hpa是客户端,tftpd-hpa是服务程序。
2,配置tftp服务
第1步: 修改/etc/default/tftpd-hpa配置文件。 将/etc/default/tftpd-hpa内容修改为:
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot " //将/tftpboot改成你自己建立的tftpboot文件夹路径,我使用的是/home/arm/tftpboot这个路径 TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="-l -c -s" //这里是选项 |
第2步:新建/修改/etc/xinetd.d/tftp配置文件.
进入/etc/xinetd.d/文件夹,查看该目录下是否有一个tftp文件,如果没有就新建一个,如果有的话就查看内容是否与下面的一致,不一致则修改/etc/xinetd.d/tftp内容为:
service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root //修改为你登录系统的用户名 server = /usr/sbin/in.tftpd server_args = -s /tftpboot -c // /tftpboot为你存放TFTP的文件目录,我使用的是/home/xxx/Learning/tftpboot这个路径 per_source = 11 cps = 100 2 } |
注意:
server_args = -s /tftpboot –c
-c参数是允许上传用的,参数/tftpboot则是你的tftp目录,修改成你的目录即可。第一个是disabled选项,如果是yes,TFTP服务器是关闭的,修改为no启动TFTP服务器;
第3步:创建用户下载的文件存放目录
$ sudo mkdir /home/xxx/Learning/tftpboot
$ sudo chmod 777 -R /home/xxx/Learning/tftpboot
3 重启TFTP服务[重要]
每次修改完配置文件后,都需要重新启动一下服务。
执行次序:
$ sudo service tftpd-hpa restart //重启服务器
$ sudo /etc/init.d/xinetd reload
$ sudo /etc/init.d/xinetd restart //重启xinetd,tftp的一个脚本
4 测试TFTP服务
使用TFTP服务器的前提:
a、Linux系统与window系统能相互Ping通
b、关闭Linux、Window的防火墙。运行 sudo ufw disable 命令关闭Linux防火墙(防火墙在系统启动时自动禁用)。
4.1、测试服务tftp是否启动
执行命令:netstat -a|grep tftp;当结果显示 : udp 0 0 *:tftp *:* 则启动tftp服务了。
4.2、测试tftp
在/tftpboot目录文件夹路径/home/xxx/Learning/tftpboot下新建一个文件:
$ touch test
$ echo “tftp test” > test
然后在另外一个目录下执行如下命令(192.168.1.102为本机IP地址):
$ tftp 192.168.1.102
$ tftp> get test
$ tftp> q
如果在当前目录下多出了一个test文件,并且test文件的内容跟/tftpboot目录下test文件的内容一致,则tftp可以正常使用。
——————————————————————————————————————————————————————————————————————————
NFS服务:
1、安装NFS服务
$ sudo apt-get install nfs-kernel-server //安装NFS服务
2 创建共享文件夹
$ sudo mkdir /home/arm/tftpboot //创建一个共享文件夹
3. 配置NFS服务器
配置NFS主要涉及配置文件/etc/exports,它用于NFS服务器端,其中列出了NFS服务器中要导出的目录、可以访问这些目录的NFS客户机及其访问权限。
在exports文件中添加如下内容:
/home/arm/tftpboot *(rw,sync,no_root_squash,no_subtree_check)
/home/arm/tftpboot:刚才创建的共享文件夹
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_subtree_check:不检查父目录的权限。
no_root_squash:root用户具有对根目录的完全管理访问权限。
4、启动NFS服务器。
在命令行终端输入如下命令:
$ sudo exportfs –rv //使/etc/exports 文件生效
$ sudo /etc/init.d/rpcbind restart //重启rpcbind 服务
$ sudo /etc/init.d/nfs-kernel-server restart //重启nfs服务
在Ubuntu上执行:
$ showmount -e
显示出共享的目录说明搭建成功。
——————————————————————————————————————————————————————————————————
2.配置tiny4412开发板内核,板子启动自动挂载NFS文件系统
1、配置tiny4412开发板内核支持NFS
输入 make ARCH=arm menuconfig 命令进入 linux 配置界面,
进入[*] Networking support --->
Networking options --->
选中[*] IP: kernel level autoconfiguration
再进入File systems --->
[*] Network File Systems --->
选中如下选项:
<*> NFS client support
<*> NFS client support for NFS version 2
<*> NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
<*> NFS client support for NFS version 4
[*] Provide swap over NFS support
[*] NFS client support for NFSv4.1
[*] NFS client support for NFSv4.2
[*] NFSv4.1 client support for migration
[*] Root file system on NFS
配置完成后,保存退出并编译内核。
—————————————————————————————————————————————————————————————————————
3,挂载文件系统
挂载命令为: #mount -o nolock 192.168.1.115:/home/arm/tftpboot /mnt/
解释一下:
mount :挂载命令
nfs :使用的协议
nolock :不阻塞
vers : 使用的NFS版本号
IP : NFS服务器的IP(NFS服务器运行在哪个系统上,就是哪个系统的IP)
/work/nfs: 要挂载的目录(Ubuntu的目录)
/mnt : 要挂载到的目录(开发板上的目录,注意挂载成功后,/mnt下原有数据将会被隐藏,无法找到)
韦东山给出挂载命令如下:
————————————————————————————————————————————————————————————
问题:
1,/et c/init.d/nfs-kernel-server restart 时出现以下错误:
exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/source/rootfs/".
Assuming default behaviour ('no_subtree_check').
新版本的nfs-kernel-server 中,在填写/etc/exports 文件时需要填写一个重要参数 no_subtree_check ,加入参数后顺利通过
中间不能加空格,不能改变顺序。