博客
关于我
itop4412 linux驱动学习环境搭建-最小根文件系统制作与NFS挂载
阅读量:546 次
发布时间:2019-03-07

本文共 2778 字,大约阅读时间需要 9 分钟。

前言

在之前的文章中,我们已经完成了uboot和内核的基础移植工作,为后续对驱动的学习打下了重要的基础。本文将记录最小文件系统的制作以及nfs挂载根文件系统的教程,帮助我们搭建一个便于驱动教程学习的开发环境。

交叉编译工具安装

在后续的驱动开发中,我们需要将程序编译到开发板上运行,而开发板均基于ARM Coretex-A9的exynos 4412架构,开发环境则基于ubuntu 18.04 LTS平台。因此,我们需要安装交叉编译链,这样才能生成能在开发板上运行的可执行二进制文件。

说明

后期所有程序都将在开发板上运行,基于ARM架构的内核。由于开发机是x64平台,为了跨平台编译,我们需要安装对应的交叉编译工具链。

安装说明

在最新版本的ubuntu 18.04 LTS平台上,arm版本的gcc已经被收入官方源码仓库,因此我们可以直接通过apt命令安装相应的交叉编译工具链。

安装命令
sudo apt install gcc-arm-linux-gnueabihf
安装文件说明

安装完成后,交叉编译工具会被安装在/usr/arm-linux-gnueabihf目录下,包含以下子目录:

bin/  include/  lib/
  • bin/:包含对应交叉编译工具链的可执行文件(如gcc、ar等),这些文件是软链接到/usr/bin/arm-linux-gnueabihf-*
  • include/:包含头文件。
  • lib/:包含静态和动态链接库文件。

最小根文件系统制作

在安装了交叉编译工具链之后,我们可以进行最小根文件系统的制作。以官方最新稳定版为例,制作流程主要参考《Linux系统编程_v2.2.pdf》[1]。

创建目录结构

mkdir dev etc lib mnt proc sys tmp var

详细制作步骤

  • 下载源码
  • tar -xvf busybox-1.30.1.tar.bz2 && cd ../busybox-1.30.1/
    1. 配置源代码
    2. make menuconfig

      根据具体需求进行配置,如交叉编译前缀和安装目录等。

      1. 编译并安装
      2. make -j8
        make install
        1. 完善文件系统 创建必要的文件和目录,并设置适当的文件权限。以下是完整目录树示例:
        2. .
          ├── dev/
          ├── etc/
          │ └── rc.d/
          │ ├── init.d/
          │ │ ├── ifconfig-eth0
          │ │ └── netd
          │ └── profile
          ├── lib/
          ├── mnt/
          ├── proc/
          ├── sys/
          ├── tmp/
          ├── var/
          └── var/log/ (示例目录结构)
          注:所有新建文件需设置权限0755(如:
          chmod 0755 eth0-setting passwd profile init.d/* rc.d/init.d/*)
          1. 处理特殊文件 确保启动脚本和相关守护服务能够正常运行。以下是init.d/rc.S 的内容示例:
          2. #!/bin/sh
            PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
            runlevel=Sprevlevel=Numask 022
            export PATH
            runlevel prevlevel
            # ...
            # 启动网络配置
            /bin/mount -n -t proc none /proc
            /bin/mount -n -t sysfs none /sys
            /bin/mount -n -t usbfs none /proc/bus/usb
            /bin/mount -t ramfs none /dev
            # 系统初始化脚本
            rc.S
            1. 临时文件和用户配置 创建临时文件夹和用户配置文件如profilepasswd。以下是profile 示例:
            2. # Ash profile
              # vim: syntax=sh
              ulimit -S -c 0 > /dev/null 2>&1
              USER="`id -un`"
              LOGNAME=$USER
              PS1='[$USER@$HOSTNAME]# '
              PATH=$PATH
              HOSTNAME=`/bin/hostname`
              export USER LOGNAME PS1 PATH

              NFS挂载根文件系统

              为了方便开发和测试,我们需要将根文件系统通过nfs挂载到开发板上。以下分开发板和开发机两部分进行说明。

              开发板端NFS配置

              在内核启动参数中添加相应的nfsroot参数,确保开发板能够以nfs协议挂载根文件系统。示例内核命令行参数:

              kernel cmd line: (root=/dev/nfs rw nfsroot=192.168.1.140:/home/jason/arm-devlop/system ip=192.168.1.141:192.168.1.140:192.168.1.1:255.255.255.0:itop:eth0:off rootfstype=ext4 init=/linuxrc console=ttySAC2,115200)

              开发机端NFS配置

            3. 安装必要软件包
            4. sudo apt install nfs-kernel-server
              1. 启用支持nfs协议版本 默认情况下,从ubuntu 17.04开始,nfs服务默认只支持协议3和4。为确保兼容性,我们可以在/etc/default/nfs-kernel-server中添加以下内容:
              2. RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"
                1. 配置nfs共享目录/etc/exports中添加以下配置:
                2. /home/jason/arm-devlop/system/   *(rw,sync,no_root_squash,no_subtree_check)
                  1. 重启nfs服务
                  2. sudo systemctl restart nfs-kernel-server.service

                    注意事项

                    在实际操作过程中,可能会遇到开发板无法挂载nfs文件系统的问题。通过仔细检查内核启动参数和nfs服务器配置,确保两者的兼容性。例如,内核中的nfsroot参数是否与服务器上共享的目录一致,IP地址是否正确配置,协议版本是否匹配等。

                    效果展示

                    完成上述步骤后,开发板将能够以nfs协议挂载根文件系统,实现完整的开发环境。最终效果如下:

                    • [挂载后的文件系统结构]
                    • [开发板运行状态展示]

                    参考资料

                    [1] 《Linux系统编程_v2.2.pdf》 [2] 开发板挂载ubuntu 18.04系统下的nfs根文件系统失败

    转载地址:http://dvdjz.baihongyu.com/

    你可能感兴趣的文章
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    MFC模态对话框和非模态对话框
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    mxGraph改变图形大小重置overlay位置
    查看>>
    MongoDB可视化客户端管理工具之NoSQLbooster4mongo
    查看>>
    Mongodb学习总结(1)——常用NoSql数据库比较
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    mongodb定时备份数据库
    查看>>
    mppt算法详解-ChatGPT4o作答
    查看>>
    mpvue的使用(一)必要的开发环境
    查看>>
    MQ 重复消费如何解决?
    查看>>
    mqtt broker服务端
    查看>>
    MQTT 保留消息
    查看>>
    MQTT 持久会话与 Clean Session 详解
    查看>>
    MQTT介绍及与其他协议的比较
    查看>>
    MQTT工作笔记0007---剩余长度
    查看>>
    MQTT工作笔记0008---服务质量
    查看>>