OpenWrt NFS启动

OpenWrt通过NFS方式启动

一、什么是NFS

Net File System。
举个例子,开发板与电脑通过网线连接,电脑的某个目录下有开发板系统所需要的文件系统,开发板直接通过网络,加载文件系统运行。
在嵌入式开发中,有很多场景会应用到这种方法,比如ROM不足,或在调试阶段直接烧写FLASH会有风险等等。

二、OpenWrt 分区

直接make V=99出来的bin可以分成3段
1. uboot :OpenWrt采用的bootloader
2. kernel :Linux Kernel,xxx-uImage.bin
3. root file system:xxx-rootfs.tar.gz
以上想生成,直接在make menuconfig中,Target Images和Boot Loaders选项下选择。

三、NFS支持

NFS加载rootfs时,OpenWrt开发板作为NFS Client端,因此make kernel_menuconfig中,将
NFS client相关项全部选择。

File systems  --->
    Network File Systems  --->
        <*>   NFS client support 
        [*]   Root file system on NFS

然后编译。

四、OpenWrt 启动

a、uboot

如果入手的是一个空flash,没办法,只能通过烧写器,或jtag线烧写。
如果flash中已经有uboot或其他bootloader,可以根据需要,是否升级到自己编译出的uboot。

b、kernel

  1. tftp server搭建(此部分内容,度娘上有很多)
    以ubuntu为例,
    1)安装服务
    $ apt-get install xinetd tftp tftpd
    2)创建/etc/xinetd.d/tftp文件,拷贝下面内容到文件中。

    service tftp
    {
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
    }

    3)创建/tftpboot目录,这是配置文件中指定的tftp服务器主目录。
    4)重启xinetd服务器:
    $ /etc/init.d/xinetd restart
    5)将XXX-uImage.bin拷贝到/tftpboot
    6)更改权限
    $ chmod 777 -Rf /tftpboot

  2. console连接
    1)安装工具minicom
    $ apt-get install minicom
    2)将TTL-USB线插在开发板console接口上,一般3跳线,Tx Rx GND,Tx线接开发板的Rx,Rx接开发板Tx。
    3)终端运行minicom,进行端口设置,一般为:

    +-----------------------------------------------------------------------+                               
    | A -    Serial Device      : /dev/ttyUSB0     (这个可以ls /dev/ttyUSB*)|                               
    | B - Lockfile Location     : /var/lock                                 |                               
    | C -   Callin Program      :                                           |                               
    | D -  Callout Program      :                                           |                               
    | E -    Bps/Par/Bits       : 115200 8N1         (波特率一般为115200)   |                                 
    | F - Hardware Flow Control : No                             (设置为No)|                               
    | G - Software Flow Control : No                             (设置为No)|                               
    |                                                                       |                               
    |    Change which setting?                                              |                               
    +-----------------------------------------------------------------------+                               
  3. 加载kernel到RAM
    1)网线连接Ubuntu调试机和开发板;
    2)设置调试机IP,ubunut直接在网络里设置(以192.168.0.10为例);
    3)uboot启动后,会通过console出log,出现下面提示时,停止auto boot;
    Hit any key to stop autoboot: 2
    4)通过uboot命令setenv设置开发板IP和对端调试机IP;
    > setenv ipaddr 192.168.0.99
    > setenv serverip 192.168.0.10
    5)通过tftp加载kernel到RAM中(以加载到RAM起始地址0x81000000为例);
    > tftp 0x81000000 XXX-uImage.bin
    6)启动kernel
    > bootm

    > bootm 0x81000000

    原理:

    • uboot集成简单tftp网络支持,当然开发板上要有网络接口。
    • OpenWrt启动kernel时,也是从FLASH上将kernel加载到RAM中运行,所以当前的办法直接通过tftp加载kernel到RAM中,替代了从FLASH上read的过程。

c、rootfs

  1. 按照 2、kernel 小节,搭建tftp和minicom
  2. 解压缩xxx-rootfs.tar.gz到/tftpboot/
  3. 在uboot命令行,设置启动参数。
    这里只举一个例子,每个开发板的情况不同
    setenv bootargs board=AP143 console=ttyS0,115200 nfsroot=192.168.0.10:/tftpboot/rootfs rw ip=192.168.0.99:192.168.0.10:196.168.0.1:255.255.255.0::eth1:off
    解释:
    • board=AP143,板子类型最好设对,不然kernel可能启动失败;
    • nfsroot=192.168.0.10:/tftpboot/rootfs,就是tftp server ip: + rootfs路径,解压xxx-rootfs.tar.gz出来的;
    • rw设置可读可写权限;
    • ip=板子IP: tftp server ip :网关ip(都在同一网段,网关ip随意填写):掩码:板子eth接口;(这里使用的是静态IP,如果想设置成dhcp,需要在make kernel_menuconfig中,在Networking support里,打开IP: kernel level autoconfiguration的dhcp支持)

完成以上步骤,可以加载了。

五、问题

在启动过程中,发现挂载成功了后,发现nfs server断开的情况,文件系统找不到了!
其实,这跟OpenWrt自身,启动过程中,需要对eth接口再配置导致的。
所以。OpenWrt开发过程中,需要频繁对网络进行设置,也导致NFS方式启动OpenWrt的意义不大,只在开始时,确认kernel以及rootfs加载没有问题有用。加载没有问题,最终还是需要烧写到flash中进行调试。

OpenWrt支持使用NFS(Network File System)来实现远程文件共享。NFS协议是一种基于网络的文件系统,它允许网络中的计算机之间共享目录和文件。通过NFS,可以将一个目录(或文件)挂载到另一个计算机上,使得另一个计算机上的用户可以像访问本地文件一样访问远程共享文件。 要在OpenWrt上启用NFS,需要进行以下步骤: 1. 安装NFS支持包。在OpenWrt上,可以使用opkg包管理器来安装nfs-utils和kmod-fs-nfs支持包。运行以下命令: ``` opkg update opkg install nfs-utils kmod-fs-nfs ``` 2. 配置NFS服务器。编辑/etc/exports文件,添加要共享的目录和允许访问该目录的主机。例如,要共享/mnt/data目录并允许192.168.1.100主机访问,可以将以下条目添加到/etc/exports文件中: ``` /mnt/data 192.168.1.100(rw,sync,no_root_squash) ``` 在上面的条目中,rw表示可读写访问,sync表示同步写入,no_root_squash表示允许root用户访问。 3. 启动NFS服务器。可以使用以下命令启动NFS服务器: ``` /etc/init.d/nfsd enable /etc/init.d/nfsd start ``` 4. 在客户端上挂载共享目录。在客户端上,可以使用mount命令将共享目录挂载到本地目录。例如,要将192.168.1.1服务器上的/mnt/data目录挂载到本地/mnt/nfs目录,可以运行以下命令: ``` mount -t nfs 192.168.1.1:/mnt/data /mnt/nfs ``` 在上面的命令中,-t nfs表示使用NFS协议挂载,192.168.1.1:/mnt/data表示要挂载的共享目录,/mnt/nfs表示本地目录。 以上就是在OpenWrt上使用NFS实现远程文件共享的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值