当前位置: 首页 > article >正文

NFS服务、内核配置菜单

一、NFS网络服务的应用场景

        各种应用程序属于根文件系统rootfs的一部分,现在如果要更新一个应用程序,需要将它放到
根文件系统rootfs_ext4.img这个文件中,还得用fastboot下载烧写,将来错了,还需要修改,下载烧写开发效率很低,关键是降低了EMMC的使用寿命。

        干脆采用NFS网络服务,就是在上位机部署一个NFS网络服务的共享目录,将来各种应用程序放在上位机编辑和交叉编译,然后让下位机利用NFS网络服务到上位机找到共享目录,一旦找到共享目录就可以直接在下位机运行,以后应用程序出错了,只需在上位机修改和交叉编译,下位机直接运行即可,无需频繁的下载烧写,大大提高了开发效率也提高了EMMC的使用寿命

二、配置NFS网络服务

        获取内核源码,并且烧写uImage到下位机(具体步骤详见Linux内核)

        上位机网络配置,给上位机配置一个静态IP,同时下位机和上位机网线连接,如果是虚拟机需要映射网口到虚拟机上。

        如果是虚拟机,并且用USB转网口的同学(针对于电脑没有网口的同学),还需要将USB转网口映射到虚拟机里:
        首先打开虚拟机启动上位机linux系统,然后点击虚拟机软件上方的"虚拟机"->可移动设备->ASIX AX88772C->连接 ,也就是让它跑到虚拟机里面去,此时虚拟机linux系统可以使用USB转网卡了!
        如果不是用USB转网卡的,而是用电脑自带网口,不需要做这些映射工作!

        配置静态IP

上位机安装NFS网络服务
  如果是自己安装的ubuntu系统,还需要执行以下两个命令安装和修改配置文件
          sudo apt-get install nfs-kernel-server
  然后上位机修改NFS配置文件(18.04系统之后的ubuntu系统都需要添加此配置)
          sudo vim /etc/default/nfs-kernel-server 在文件最后添加:
          RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
  保存退出即可
2.上位机指定NFS网络服务的共享目录
          sudo vim /etc/exports 在文件最后添加:
          /opt/rootfs  *(rw,sync,no_root_squash)
  保存退出即可
  说明:
  /opt/rootfs:将上位机的/opt/rootfs目录作为共享目录
             将来下位机可以访问这个共享目录中的文件和目录
  *:任何一个IP地址的客户端都可以来访问
  rw:下位机可以对共享目录中的文件进行读或者写
  sync:下位机如果修改了,同步更新上位机对应的文件
  no_root_squash:普通用户也可以访问

sudo service nfs-kernel-server restart //只要修改了exports配置文件,必须重新启动NFS网络服务

    下位机linux系统启动之后,在下位机linux系统命令行终端执行以下linux命令:
    ifconfig eth0 192.168.1.110  //给下位机的网卡配置IP地址,此IP地址必须和上位机的IP地址192.168.1.8在同一个网段
    ping 192.168.1.8 //下位机ping上位机,保证网络是联通状态
    出现类似:64 bytes from 192.168.1.8: seq=0 ttl=64 time=3.598 ms 信息表示网络联通了
    按ctrl+c退出ping命令
    继续执行:
    mount -t nfs -o nolock 192.168.1.8:/opt/rootfs /mnt 
    说明:
    mount:挂接命令
    -t nfs:采用NFS网络服务来访问共享目录
    -o nolock:对共享的文件不进行加锁访问
    结果:利用NFS网络服务,将上位机/opt/rootfs共享目录挂接到下位机的/mnt目录上,以后在下位机访问mnt
    目录就是在访问上位机的/opt/rootfs目录 
    cd /mnt //等价于进入上位机的/opt/rootfs共享目录中 
    ls 
        bin sbin etc .... helloworld helloworld.c 
    ./helloworld //在下位机运行上位机的helloworld可执行文件 
                 下位机的linux系统利用NFS网络服务偷摸的将上位机的helloworld下载到下位机的内存并且启动

    
    好处:以后只需在上位机编辑和交叉编译程序,下位机利用NFS网络服务找到共享目录里面的文件并且运行即可
    不用频繁的下载烧写,大大提高了开发效率,大大提高了EMMC的使用寿命


三、内核菜单

        什么是内核菜单,一张图解释。如果后面需要将自定义的一些驱动支持也使用这样的菜单给予用户进行配置(在内核中添加一个自己驱动程序的配置选项,将来用户可以通过菜单来支持或者不支持自己的驱动),那么就需要了解内核菜单是如何实现的?

 只需两个文件即可搞定:Kconfig和Makefile

了解Kconfig和Makefile文件

Kconfig文件     

        1.功能:生成一个菜单选项,将来通过make menuconfig供用户进行选择或者不选择操作     

        2.关键字:     

        config:  用于生成一个配置选项,生成配置选项的名称:CONFIG_XXX               

                        生成的配置选项CONFIG_XXX给Makefile使用                 

        例如:config  HELLOWORLD         

        结果:最终生成一个选项,其名称为:CONFIG_HELLOWORLD

        tristate:表示生成的配置菜单对应的操作方式有三种:“<>”         

        1.按Y键选择为*,表示将来把这个菜单选项对应的驱动程序和uImage编译在一起将来生成的配置选项CONFIG_XXX=y(其值为y)           

                类似:静态库         

        2.按N键选择为空,表示对应的驱动不进行编译,也就不支持了         

        3.按M键选择为M,表示将对应的驱动和uImage分开编译           

                类似:动态库         

        例如:tristate  "hello,world"         

        将来make menuconfig中就会出现配置菜单选项的提示信息:helloworld

        bool:表示生成的配置选项的操作方式有两种:“[]”         

        1.按Y键选择为*,表示将来把这个菜单选项对应的驱动程序和uImage编译在一起将来生成的配置选项CONFIG_XXX=y(其值为y)           

                类似:静态库         

        2.按N键选择为空,表示对应的驱动不进行编译,也就不支持了

        help:表示配置选项的帮助信息         

                例如:help             

                        this is a test         将来通过按?键可以查看这个菜单的帮助信息

#Kconfig
config HELLOWORD
#前方空格是<TAB键>
    tristate "helloword1" 
    help
        this is a welcome command!
config HELLOWORD1
    bool "helloword2" 
    help 
        this is a hello command!

make menuconfig     

        按/键搜索“HELLOWORLD”或者"HELLOTARENA"得到菜单的位置     

        按Y键选择为*,保存退出     

        vim .config  //此文件保存着当前内核所有的配置结果,此文件是隐藏文件     

        搜索HELLOWORLD或者HELLOTARENA,结果:     

                CONFIG_HELLOWORLD=y     

                CONFIG_HELLOTARENA=y     

        表示将来这个选项对应的驱动会和uImage编译在一起    

make menuconfig     

        按/键搜索"HELLOWORLD"     

        按M键选择为M,保存退出     

        vim .config     

        搜索CONFIG_HELLOWORLD=m     

        表示将来这个选项对应的驱动会和uImage分开编译    

make menuconfig     

        按/键搜索"HELLOWORLD"或者"HELLOTARENA"     

        按N键取消选中,保存退出     

        vim .config     

        搜索CONFIG_HELLOWORLD is not set,也就是其值为空     表示对应的驱动程序将来不会被编译


内核的Makefile     

        目的:按照指定的编译方式来编译驱动程序(在一起,分家,不编译)     

        语法:  obj-$(CONFIG_XXX) += 驱动文件.o     

        说明:     

                1.如果按Y键选择为*,CONFIG_XXX=y,Makefile展开得到:

                        obj-y += helloworld.o        将来把helloworld.c和uImage编译在一起     

                2.如果按M键选择为M,CONFIG_XXX=m,Makefile展开得到:

                        obj-m += helloworld.o        将来把helloworld.c和uImage分开编译,编译生成helloworld.ko     

                3.如果按N键选择为空,CONFIG_XXX=空,Makfile展开得到:没有,不编译


http://www.kler.cn/a/390390.html

相关文章:

  • 使用kalibr_calibration标定相机(realsense)和imu(h7min)
  • 6.2 对角化矩阵(2)
  • wafw00f源码详细解析
  • linux 下查看程序启动的目录
  • 【go从零单排】Random Numbers、Number Parsing
  • JavaEE进阶----SpringMVC(三)---响应的获取
  • JVM学习之路(5)垃圾回收
  • 【Qt】QTreeView 和 QStandardItemModel的关系
  • SpringBoot基础系列学习(五):JdbcTemplate 访问数据库
  • 航展畅想:从F35机载软件研发来看汽车车载软件研发
  • 表格理解专题(二):单元格的特征提取
  • Android源码中如何编译出fastboot.exe和adb.exe程序
  • JavaScript (JS)网页设计案例
  • 理解C语言之深入理解指针
  • 第R2周:LSTM算法详解
  • vscode Markdown
  • 37 string类关键函数的模拟实现
  • linux 下查看程序启动的目录
  • 抢抓5G机遇,AORO A23防爆手机如何直击园区巡检挑战?
  • Spring系统框架
  • Pytorch学习--神经网络--完整的模型训练套路
  • 【韩老师零基础30天学会Java 】06章 数组、排序和查找
  • Android 源码的下载与编译
  • yolo v11相关文件
  • 机器视觉中常用图像处理库都有哪些?重点关注.net
  • Qt 编写插件plugin,支持接口定义信号