博客
关于我
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/

    你可能感兴趣的文章
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>
    MYSQL一直显示正在启动
    查看>>
    MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
    查看>>
    MySQL万字总结!超详细!
    查看>>
    Mysql下载以及安装(新手入门,超详细)
    查看>>
    MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
    查看>>
    MySQL不同字符集及排序规则详解:业务场景下的最佳选
    查看>>
    Mysql不同官方版本对比
    查看>>
    MySQL与Informix数据库中的同义表创建:深入解析与比较
    查看>>
    mysql与mem_细说 MySQL 之 MEM_ROOT
    查看>>
    MySQL与Oracle的数据迁移注意事项,另附转换工具链接
    查看>>
    mysql丢失更新问题
    查看>>
    MySQL两千万数据优化&迁移
    查看>>
    MySql中 delimiter 详解
    查看>>
    MYSQL中 find_in_set() 函数用法详解
    查看>>