从nfs启动最小文件系统

发布者:诗意世界最新更新时间:2024-08-01 来源: cnblogs关键字:nfs  启动 手机看文章 扫描二维码
随时随地手机看文章

1.前言

  开发环境 Ubuntu server 18.04,因为找到的资料使用的nand是64M的,而我手上的板子是256M,所以资料里的镜像bin文件不能直接用,会有个ecc的问题,因为他在64M的nand上用的是yaffs而256M的nand上只能用yaffs2,又由于水平不足,其实就是懒,所以不想去修改相关代码而选择从nfs上启动根文件系统,毕竟以后要移植驱动或者编写应用直接用nfs挂载方便,折腾了好几天终于把该踩得坑都填上了, 成功启动到shell,不过自学还是会走太多弯路呀。

2.网络环境配置

  要实现从nfs启动开发板,首先要让虚拟机和开发板建立网络连接,因为我的虚拟机是通过vmnet8来net的方式连接外网,所以我选择让vmnet0桥接到usb网卡上来连接开发板。

以管理员身份运行虚拟网络编辑器,配置vmnet0如下:

 

 然后再给虚拟机添加一个网卡,指定连接到vmnet0:

进入虚拟机给虚拟网卡分配地址:


sudo vim /etc/netplan/00-installer-config.yaml #具体文件名不同虚拟机各不相同,tab补全即可

我的配置如下:


network:

  version: 2

  bonds: {}

  bridges: {}

  ethernets:

    ens33:

      addresses:

      - 192.168.112.3/24

      dhcp4: false

      dhcp6: false

      gateway4: 192.168.112.2

      nameservers:

        addresses:

        - 192.168.112.2

    ens35:

      addresses:

      - 192.168.8.3/24

      dhcp4: false

      dhcp6: false

      routes:

        - to: 192.168.8.0/24

          via: 192.168.8.2

  vlans: {}

  wifis: {}


根据上面总结的ip设置网关等参数,ens35 就是vmnet0,桥接到usb网卡上,注意不要使用gateway4配置网关否则开机生成双默认网关,虚拟机连外网会有问题


如果没有ens35可以先用 ifconfig -a 查看再用 ( ifconfig 网卡名 up )开启对应网卡。


route -n

使用上面的命令查看路由表如下:


streleizia@ubuntu:~$ route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

0.0.0.0         192.168.112.2   0.0.0.0         UG    0      0        0 ens33

192.168.8.0     0.0.0.0         255.255.255.0   U     0      0        0 ens35

192.168.8.0     192.168.8.2     255.255.255.0   UG    0      0        0 ens35

192.168.112.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33

streleizia@ubuntu:~$


可以看到默认只有一个默认路由(destination 为 0.0.0.0)的网关为外网网卡(192.168.112.2)这样访问外网的流量就不会错误地发到内网网关那里。


另外双网卡可能会导致主机(windows)的联网出现问题,可以查看主机路由表(cmd 下输入route print查看)再删除指向usb网卡的路由即可,并且配置外网网卡的默认路由如下:


IPv4 路由表

===========================================================================

活动路由:

网络目标        网络掩码          网关       接口   跃点数

          0.0.0.0          0.0.0.0      192.168.1.1    192.168.1.107     35

        127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331

        127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331

  127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331

      192.168.1.0    255.255.255.0            在链路上     192.168.1.107    291

    192.168.1.107  255.255.255.255            在链路上     192.168.1.107    291

    192.168.1.255  255.255.255.255            在链路上     192.168.1.107    291

    192.168.112.0    255.255.255.0            在链路上     192.168.112.1    291

    192.168.112.1  255.255.255.255            在链路上     192.168.112.1    291

  192.168.112.255  255.255.255.255            在链路上     192.168.112.1    291

        224.0.0.0        240.0.0.0            在链路上         127.0.0.1    331

        224.0.0.0        240.0.0.0            在链路上     192.168.112.1    291

        224.0.0.0        240.0.0.0            在链路上     192.168.1.107    291

  255.255.255.255  255.255.255.255            在链路上         127.0.0.1    331

  255.255.255.255  255.255.255.255            在链路上     192.168.112.1    291

  255.255.255.255  255.255.255.255            在链路上     192.168.1.107    291

===========================================================================

永久路由:

网络地址 网络掩码 网关地址     跃点数

0.0.0.0  0.0.0.0  192.168.1.1   1

===========================================================================

192.168.1.1是家里路由器的地址

最后注意将主机的usb网卡配置到和虚拟机同网段下,如图:

 

 总结:

  usb网卡ip 手动配置为:192.168.8.2

  虚拟机ip手动配置为: 192.168.8.3 网关为 192.168.8.2

  开发板ip手动配置为:  192.168.8.100网关为 192.168.8.2(后面会配置)

互相ping一下如果能ping通就算成功了,如果ping Windows 主机无返回是因为主机防火墙没关(只影响ping,不影响后面的nfs和tftp的传输),另外linux的虚拟机防火墙也有可能会是开启状态,关掉就行了


3.配置软件环境

网路搭建完成,剩下就是安装各种软件了,在ubuntu下使用以下命令安装软件包:


sudo apt-get install tftpd tftp xinetd nfs-kernel-server vsftpd 


然后逐一配置:


首先配置ftp:

sudo vi /etc/vsftpd.conf

将其中以下配置前的#号去掉


#local_enable=YES

#write_enable=YES

保存后使用以下命令重启服务:


sudo /etc/init.d/vsftpd restart

其次配置tftp:

先在喜欢的位置创建一个文件夹,我选则的是在home目录下创建nfs_root目录,别忘了 sudo chmod 777 nfs_root -R 给所有用户添加权限


streleizia@ubuntu:~/nfs_root$ pwd

/home/streleizia/nfs_root     #可以看到路径为:/home/streleizia/nfs_root



streleizia@ubuntu:~/nfs_root$ tree -d

.

├── fs_mini    #busybox安装在这个文件夹里

│   ├── bin

│   ├── dev

│   ├── etc

│   │   └── init.d

│   ├── lib

│   ├── mnt

│   ├── proc

│   ├── root

│   ├── sbin

│   ├── sys

│   ├── tmp

│   └── usr

│   ├── bin

│   └── sbin

└── fs_mini_mdev

  ├── bin

  ├── dev

  ├── etc

  │   └── init.d

  ├── lib

  ├── mnt

  ├── proc

  ├── root

  ├── sbin

  ├── sys

  ├── tmp

  └── usr

  ├── bin

  └── sbin


30 directories

streleizia@ubuntu:~/nfs_root$


sudo vi /etc/xinetd.d/tftp

打开配置文件后输入以下内容:


service tftp

{

        socket_type     =dgram

        protocol        =udp

        wait            =yes

        user            =root

        server          =/usr/sbin/in.tftpd

        server_args     =-s /home/streleizia/tftp_root #注意这里的路径和上面创建的一致

        disable         =no

        per_source      =11

        cps             =100 2

        flags           =IPv4


}


sudo /etc/init.d/xinetd restart

重启服务没有报错就ok


sudo vi /etc/exports

最后配置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/streleizia/workspace/yaffs2_tool/nfs_root         *(rw,sync,no_root_squash)      #这里我创建了三个nfs目录分别是用不同方式构建的根文件系统

/home/streleizia/nfs_root/fs_mini                       *(rw,sync,no_root_squash)     #注意观察和上面创建的目录路径一致

/home/streleizia/nfs_root/fs_mini_mdev           *(rw,sync,no_root_squash)    


sudo /etc/init.d/nfs-kernel-server restart

重启服务没有报错就ok


重点来了,unbuntu18.04自动安装的nfs版本太高和2.6.22kernel的版本不符,导致nfs不能挂载,内核卡在:


VFS: Unable to mount root fs via NFS, trying floppy


解决方法参考文章:


https://blog.csdn.net/Qiuoooooo/article/details/112601940

即:在/etc/default/nfs-kernel-server添加RPCNFSDOPTS='--nfs-version 2,3,4 --debug --syslog',重启NFS即可


 4.测试nfs

  tftp配和uboot烧写内核镜像,这里不再赘述详细方法,注意使用配套的根文件系统和内核镜像,最好是在nand上可以正常启动,在uboot中设置启动参数如下:


bootargs=noinitrd root=/dev/nfs nfsroot=192.168.8.3:/home/streleizia/nfs_root/fs_mini ip=192.168.8.100:192.168.8.3:192.168.8.2:255.255.255.0:linux:eth0:off init=/linuxrc console=ttySAC0

boot内核,输出信息,成功启动到busybox命令行!


drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver

TCP cubic registered

NET: Registered protocol family 1

s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #5 op:APP_CMD(55) arg:0x00000000 flags:0x0875 retries:0 Status:nothing to complete

s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #6 op:APP_CMD(55) arg:0x00000000 flags:0x0875 retries:0 Status:nothing to complete

s3c2440-sdi s3c2440-sdi: CMD[TIMEOUT] #7 op:ALL_SEND_OCR(1) arg:0x00000000 flags:0x0861 retries:0 Status:nothing to complete

s3c2440-sdi s3c2440-sdi: powered down.

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

eth0: link down

IP-Config: Complete:

      device=eth0, addr=192.168.8.100, mask=255.255.255.0, gw=192.168.8.2,

     host=linux, domain=, nis-domain=(none),

     bootserver=192.168.8.3, rootserver=192.168.8.3, rootpath=

Looking up port of RPC 100003/2 on 192.168.8.3

[1] [2]
关键字:nfs  启动 引用地址:从nfs启动最小文件系统

上一篇:在S3C2440上移植FreeRTOS
下一篇:对链接地址和运行时地址的理解

推荐阅读最新更新时间:2026-03-19 12:43

nfs启动最小文件系统
1.前言   开发环境 Ubuntu server 18.04,因为找到的资料使用的nand是64M的,而我手上的板子是256M,所以资料里的镜像bin文件不能直接用,会有个ecc的问题,因为他在64M的nand上用的是yaffs而256M的nand上只能用yaffs2,又由于水平不足,其实就是懒,所以不想去修改相关代码而选择从nfs上启动根文件系统,毕竟以后要移植驱动或者编写应用直接用nfs挂载方便,折腾了好几天终于把该踩得坑都填上了, 成功启动到shell,不过自学还是会走太多弯路呀。 2.网络环境配置   要实现从nfs启动开发板,首先要让虚拟机和开发板建立网络连接,因为我的虚拟机是通过vmnet8来net的方式连接外网,所
[单片机]
mini2440从NFS启动文件系统
主机共享文件系统 首先主机要配置NFS,并且共享了文件系统 设置内核参数 内核参数设置如下: console=ttySAC0 root=/dev/nfs nfsroot=172.20.11.88:/root/linux_kernel/rootfs ip=172.20.11.41:172.20.11.88:172.20.11.1:255.255.255.0:S3C2440A:eth0:off 内核参数说明 其各参数的含义如下: nfsroot 是自己开发主机的 IP 地址。 “ip=”后面: 第一项(172.20.11.41)是目标板的临时 IP(注意不要和局域网内其他 IP 冲突); 第二项(172.20.11.88)
[单片机]
mini2440从<font color='red'>NFS</font><font color='red'>启动</font><font color='red'>文件系统</font>
OK6410启动自动挂载nfs文件系统
①通过命令启动和停止ubuntu服务器的nfs 服务: 在命令行下运行: /etc/init.d/nfs restart 使用这个命令可以停止 nfs 服务: /etc/init.d/nfs stop 检查nfs服务器是否开启: service nfs status 重启对应的2个服务: service portmap restart service nfs restart 检查防火墙看是否屏蔽了nfs端口 service iptables stop service iptables status ②设置ubuntu待挂载目录的权限: sudo vi /etc/exports 添
[单片机]
内核移植和文件系统制作(2):linux内核最小系统和initramfs文件系统
linux内核最小系统,使用内核版本: 1,FL2440板子的基本硬件:晶振12MHZ CPU 型号为S3C2440,基于ARM920T,指令集ARMV4,时钟主频400MHz SDRAM H57V2562GTR-75C 2片*32MB=64MB,挂载于nGCS6 (0x3000 0000) NANDFLASH 型号:K9F2G08U0B 大小:256MB Network Adapter DM9000AEP 10/100M自适应,挂载于nGCS4 (0x2000 0000) LED 5个LED(LED0~3)I/O口指示灯,LED5电源指示灯,LED9
[单片机]
内核移植和<font color='red'>文件系统</font>制作(2):linux内核<font color='red'>最小</font>系统和initramfs<font color='red'>文件系统</font>
Centos 上搭建nfs且可挂载到6410开发板
用rpm -qa | grep nfs检查是否安装tftp服务器 yum install nfs 1.服务端安装: 1.setup 2.System Services 3.选中* nfs 4.service nfs restart 权限文件配置示例: 1.vi /etc/exports 2.写入/nfsroot/rootfs 172.22.17.*(rw,no_root_squash,sync) /nfsroot/rootfs指本地路径 172.22.17.*远程IP,在那个网段的ip (rw,no_root_squash,sync)读写并权限过渡 ,No_root_squash
[单片机]
Ubuntu14.04和Tiny6410挂载NFS服务!
我是以root身份登录Ubuntu的: 在Ubuntu上执行 #apt-get install nfs-kernel-server //安装NFS服务 在Ubuntu上执行 #mkdir /root/nfs //创建一个共享文件夹 在Ubuntu上执行 #vi /etc/exports 在exports文件中加入 /root/nfs *(rw,sync,no_root_squash,no_subtree_check) /root/nfs :刚才创建的共享文件夹 *:允许所有的网段访问,也可以使用具体的IP rw:挂接此目录的客户端对该共享目录具有读写权限 sy
[单片机]
HI3531网络tftp、nfs加载
ifconfig eth0 hw ether 00:00:23:34:45:66; ifconfig eth0 192.168.1.10 netmask 255.255.255.0; route add default gw 192.168.1.1;ifconfig; ping 192.168.1.100 mount -t nfs -o nolock 192.168.1.210:/home/ks/hi3531/nfs_3531 /mnt tftp 192.168.1.210 -l test –g tftp 192.168.1.210 -l a1
[单片机]
Micro2440 + Linux 2.6.39建立NFS
完成了Linux 2.6.39的移植后,接下来先建立个NFS文件系统,使用“构建最小根文件系统.doc”文档中建立的文件系统(201407090326_fs_mini.tar.bz2 http://pan.baidu.com/s/1gdorX9h)作为NFS根文件系统。此步骤可参考搭建NFS的相关文档,这里不再说明。 a) 修改启动参数后重启 # setenv bootargs 'mem=64M console=ttySAC0,115200 mac=00:60:6E:42:BA:80 root=/dev/nfs nfsroot=192.168.2.222:/opt/MICRO2440/3.File
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved