626|0

96

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

CoM-335X NFS挂载根文件系统 [复制链接]

1概述
       软件调试是产品开发生命周期的一个必经阶段,包括内核、根文件系统、应用软件等。通常的做法是先烧录BootLoader、内核、根文件系统,再调试应用软件。在调试阶段可能需要频繁烧录内核、根文件或下载应用软件,这会耗费不少时间。通过网络下载内核与挂载根文件系统,可以解决频繁烧录的问题。
       本手册,主要介绍如何通过TFTP下载内核以及挂载NFS根文件系统。
操作环境:
l  平台:EVB-335x
l  操作系统:Ubuntu 16.04 server 64-bit (内核版本4.4.0-131-generic)
l  nfs:nfs-kernel-server_1.2.8-9ubuntu12_amd64
2软件需求
       NFS协议包括有version2、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中查看
#defineCONFIG_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, intdatalen)
{
        structrpc_t pkt;
        unsignedlong id;
        uint32_t*p;
        int pktlen;
        int sport;
        id =++rpc_id;
       pkt.u.call.id = htonl(id);
       pkt.u.call.type = htonl(MSG_CALL);
        pkt.u.call.rpcvers= htonl(2);  /* use RPC version 2 */
       pkt.u.call.prog = htonl(rpc_prog);
        pkt.u.call.vers= htonl(2);     /* portmapper is version2 */
       pkt.u.call.proc = htonl(rpc_proc);
        p =(uint32_t *)&(pkt.u.call.data);
        if (datalen)
               memcpy((char *)p, (char *)data, datalen*sizeof(uint32_t));

        pktlen =(char *)p + datalen*sizeof(uint32_t) - (char *)&pkt;
        memcpy((char *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE,
               (char *)&pkt, pktlen);
        if(rpc_prog == PROG_PORTMAP)
               sport = SUNRPC_PORT;
        else if(rpc_prog == PROG_MOUNT)
               sport = NfsSrvMountPort;
        else
               sport = NfsSrvNfsPort;
   
       NetSendUDPPacket(NetServerEther, NfsServerIP, sport, NfsOurPort,
               pktlen);
}
2、我们这里使用装有ubuntu 16.04操作系统的主机作为远程根文件系统的保存主机,查看NFS server默认支持的协议版本,与u-boot所支持的是否一致?ubuntu操作系统在/etc/default/nfs-kernel-server文件中查看,我们目前的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端解决版本兼容的问题。



COM-335x_NFS挂载根文件系统.pdf

438.08 KB, 下载次数: 2

此帖出自信息发布论坛
点赞 关注
个人签名专业ARM工控开发板,
QQ:259134942
http://artcor.taobao.com/
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表