TI AM335x工控模块网络跟文件系统NFS的实现

本内容的验证使用的盈鹏飞嵌入式CoM-335x核心模块及评估板EAC-335X,简要介绍如下:

1 概述

软件调试是产品开发生命周期的一个必经阶段,包括内核、根文件系统、应用软件等。通常的做法是先烧录BootLoader、内核、根文件系统,再调试应用软件。在调试阶段可能需要频繁烧录内核、根文件或下载应用软件,这会耗费不少时间。通过网络下载内核与挂载根文件系统,可以解决频繁烧录的问题。

本手册,主要介绍如何通过TFTP下载内核以及挂载NFS根文件系统。

操作环境:

  • 平台:EVB-335x
  • 操作系统:Ubuntu 16.04 server 64-bit (内核版本4.4.0-131-generic
  • nfs:nfs-kernel-server_1.2.8-9ubuntu12_amd64 

2 软件需求

NFS协议包括有version 2、version 3、 version 4三个版本(下文分别简称NFSv2、NFSv3、NFSv4),要在主板启动内核时实现NFS文件系统的挂载,必须保证u-boot、kernel与NFS server之间的版本一致。

2.1 u-boot NFS指令

支持NFS指令,配置u-boot需定义:

#define CONFIG_CMD_NFS //u-boot默认支持NFS,在u-boot源码的include/config_cmd_default.h中查看

#define CONFIG_NFSBOOTCOMMAND //可在板级配置文件include/configs/com335x.h中定义(非必要,使用该配置是为了方便理解,因为其见名知义)。若定义此项,u-boot 环境变量中出现“nfsboot=”参数,为nfsboot赋值作为NFS的配置。

说明:

1、U-boot 2014.04(COM-335x使用该版本)支持NFSv2,在u-boot源码net/nfs.c中查看,如代码清单2-1所示(红色字体);

代码清单2-1

static void

rpc_req(int rpc_prog, int rpc_proc, uint32_t *data, int datalen)

{

 的ubuntu 16.04主机,由于默认不支持的NFSv2,所以要设置兼容性,在“2.3 NFS server注意事项”中介绍。

3、新版本的u-boot支持的NFS协议版本较高,例如u-boot 2018.01默认支持NFSv2,若主机不支持NFSv2,则使用NFSv3。

4、内核的版本匹配问题,见“2.2 kernel配置”。

5、NFS版本的修改并未简单改“代码清单2-1”中的pkt.u.call.rpcvers = htonl(2); 与pkt.u.call.vers = htonl(2); 的值,就可兼容其他版本的NFS。此外,新版本u-boot的移植工作量大。所以,推荐在NFS server端解决版本兼容的问题。

2.2 kernel配置

内核需要支持NFS类型根文件系统。在内核源码的根目录执行:

make ARCH=arm menuconfig

依次选择

File systems  --->

[*] Network File Systems  --->

--- Network File Systems

<*>   NFS client support

[*]     NFS client support for NFS version 3

[*]     NFS client support for the NFSv3 ACL protocol extension

[*]     NFS client support for NFS version 4

[*]       NFS client support for NFSv4.1 (EXPERIMENTAL)

[*]   Root file system on NFS

配置如图2-2所示。

图2-2

 说明:当选择了NFS client support ,即支持NFSv2。NFSv3、NFSv4、NFSv4.1可不选,视实际情况而定。

此外,还需选上kernel level autoconfiguration。依次选择:

[*] Networking support  --->

--- Networking support

[*]   IP: kernel level autoconfiguration

如图2-3所示:

图2-3

2.3 NFS server注意事项

搭建NFS server请参考Ubuntu官方网站

COM-335x的U-boot支持的NFS v2版本,而Ubuntu 16.04 支持NFS v4版本。由于版本不兼容,当挂载 NFS文件系统时,出现如图2-4所示的错误。

图2-4

 修改“/etc/default/nfs-kernel-server”文件,让其兼容NFS v2版本,在该文件的末尾添加以下语句,如图2-5所示。

RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

图2-5

 配置NFS server,使用文档编辑工具打开/etc/exports ,分别设置目录、访问IP、选项(通常设置权限等),如图2-6所示。

       图2-6

                                                                  

说明:

/home/daniel/rootfs 指定NFS文件系统加载目录;

* 设置访问IP,*代表所有IP,亦可某个主机或某IP段(例如192.168.x.x);

rw,sync,no_root_squash设置权限等选项,根据需求设定。

2.4 其他

TFTP用于下载内核镜像,搭建在NFS server同一主机上,配置过程请参考Ubuntu官方网站

3 实现过程

以NVM存储u-boot的COM-335x为例,简单介绍NFS文件挂载的实现过程。

1、准备内核与根文件系统:

将内核(uImage)保存到TFTP配置(/etc/default/tftpd-hpa文件)所指定的目录下,如图3-1所示,TFTP_DIRECTORY的值即为TFTP服务器的目录。

图3-1

 将根文件系统解压到/etc/exports所指定的目录,如图3-2所示。

图3-2

说明:更换内核,替换uImage文件即可;应用程序保存到根文件系统中。

2、烧录u-boot

擦除Nand Flash,将用于启动NFS的MLO与u-boot.img保存到SD卡的根目录,上电自动烧录u-boot。烧录完成,查看u-boot的环境变量(env)配置,如图3-3所示。

图3-3

 NFS环境变量参数简介,如表3-1所示:

表3-1

serverip

NFS server IP(必要

ipaddr

主板IP(必要

gatewayip

网关(非必要,建议设置)

netmask

子网掩码(必要)

hostname

主机名称(非必要)

netdev

网络设备(非必要),例如eth0。

rootpath

NFS根文件系统的保存目录(必要

此时,图3-3中配置未必满足要求,例如rootpath、serverip等。根据实际情况使用setenv 指令配置:

setenv  rootpath /your/dirctory/rootfs

setenv serverip 192.168.1.x

saveenv ß---- 设置完成,用saveenv保存,不保存的设置仅当次有效

设置无误后,输入boot或run bootcmd启动系统,或者重上电启动。

3、查看NFS

系统启动后,查看NFS根文件系统的挂载情况,以及文件系统目录结构。如图3-4所示:

图3-4

 正常显示图中信息,则表明NFS启动完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值