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

本文共 2735 字,大约阅读时间需要 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 -j8make 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/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/binrunlevel=Sprevlevel=Numask 022export PATHrunlevel 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=shulimit -S -c 0 > /dev/null 2>&1USER="`id -un`"LOGNAME=$USERPS1='[$USER@$HOSTNAME]# 'PATH=$PATHHOSTNAME=`/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/

    你可能感兴趣的文章
    localhost:5000在MacOS V12(蒙特利)中不可用
    查看>>
    logstash mysql 准实时同步到 elasticsearch
    查看>>
    Luogu2973:[USACO10HOL]赶小猪
    查看>>
    mabatis 中出现< 以及> 代表什么意思?
    查看>>
    Mac book pro打开docker出现The data couldn’t be read because it is missing
    查看>>
    MAC M1大数据0-1成神篇-25 hadoop高可用搭建
    查看>>
    mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
    查看>>
    Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
    查看>>
    MangoDB4.0版本的安装与配置
    查看>>
    Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
    查看>>
    mapping文件目录生成修改
    查看>>
    MapReduce程序依赖的jar包
    查看>>
    mariadb multi-source replication(mariadb多主复制)
    查看>>
    MariaDB的简单使用
    查看>>
    MaterialForm对tab页进行隐藏
    查看>>
    Member var and Static var.
    查看>>
    memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
    查看>>
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>