zoukankan      html  css  js  c++  java
  • 基于mini2440嵌入式Linux根文件系统制作(Initramfs和nfs两种跟文件系统)

    嵌入式系统由三部分构成:

    1、bootoader---bootparameters---2、kernel  3、Root-filesysytem

    一个内核可以挂载多个文件系统,但是有一个根文件系统所以叫root-filesysytem,bootloader引导程序和kernel内核程序之间有个引导参数(也叫启动参数)叫bootparameters,这里就不多介绍引导参数,这里就介绍根文件系统地制作。

     

    1.1、创建目录,创建rootfs目录,再创建以下目录和子目录

    mkdir    rootfs
    cd    rootfs
    mkdir    bin dev etc lib proc sbin sys usr mnt tmp var
    mkdir    usr/bin usr/lib usr/sbin lib/modules

    1.2、创建设备文件

    cd  rootfs/dev
    mknod -m 666 console c 5 1  //
    mknod -m 666 null c 1 3

    在Linux系统中绝大多数设备是以文件的形式存在的,这些文件放在dev(device的缩写)目录下

    1.3、加入配置文件

    这个配置文件已经准备好了,链接:https://pan.baidu.com/s/1dXbHIA 密码:thle

    通过samba把这个文件放到Linux下,解压之后把etc文件夹下的文件全部拷贝到rootfs文件夹下的etc目录下,这里的目录要根据你在Linux目录下的设置,着下面的是我的目录

    cp etc/* /root/myhome/rootfs/etc/ -rf

    1.4、添加内核模块,首先要进入Linux内核目录下,我的目录是/root/myhome/linux-2.6.32.2/

    编译内核,ARCH=arm是按ARM体系编译

    make modules ARCH=arm CROSS_COMPILE=arm-linux-  //编译完成
    make modules install ARCH=arm INSTALL_MOD_PATH=/root/myhome/rootfs  //编译完成后产生的文件转移到rootfs文件

    1.5、编译安装busybox

    为什么需要安装busybox呢?Busybox叫嵌入式开发中的瑞士军刀,我们在使用嵌入式linux的时候,根文件系统里的许多命令都需要自己来编写,比如cd、ls、cp等等,这些命令在一个开发板上可以永恒,在另一个开发板上也需要用,所以这些命令由这个Busybox来提供。

    可以在商家提供的资料里面找到Busybox

    将它通过samba服务器放到Linux下解压 ,进入Busybox目录下,进行配置make menuconfig

    a、Busybox Settings àbuild Options->
    选中 “Build busybox as a static binary”, 静态链接
    Cross Compiler prefix (arm-linux-)

    b、Installation Options->选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统

    c、Busybox Installation Prefix (/xxx/rootfs)
    该选项表明编译后的busybox的安装位置

    配置完成后保存在直接执行make,然后在执行make install(相当于就是把产生的文件拷贝到rootfs的过程),

    到此为止,所有的建立根文件系统与文件就完成了

    2、挂载根文件系统

    2.1挂载方式简介:根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合

    initramfs启动快,作为根文件系统(也就是第一个文件系统),然后再挂载基于nandflsah的文件的文件系统

    2.1、如果要用initramfs,首先要进入rootfs创建一个软链接

    ln -s ./bin/busybox init

    2.2、进入Linux内核,就是之前的/root/myhome/linux-2.6.32.2/这个目录,然后配置内核make menuconfig ARCH=arm

    把这个选上,选上之后下面会多出一个选项,括号里就填rootfs的目录,我这里就是/root/myhome/rootfs

    2.3、然后编译内核,make uImage ARCH=arm CROSS_COMPILE=arm-linux-

    编译成功之后的uImage放在arch/arm/boot/目录下,把这个uImage复制到/tftpboot/目录下

    2.4、环境变量的设置,进入开发板的u-boot(这个在之前u-boot新手入门里已经写好了)

    setenv bootargs noinitrd console=ttySAC0,115200
    saveenv

    然后就下载内核

    这样这个Initramfs根文件系统就挂在成功了

    但是如果在开发阶段,这个文件系统可能还需要频繁地加载东西,这个时候就要在Linux上重新做根文件系统,重新编译,重新下载。因为uImage这个文件是有两部分构成的,一部分是内核另一部分是文件系统,在编译的时候压缩了这两部分文件,然后下载到开发板里面后再解压,这就是为什么需要重新做系统再编译再下载的原因。所以这个时候引入nfs基于网络的根文件系统。

    3、挂载nfs根文件系统

    3.1、进入内核配置,make menuconfig ARCH=arm,去掉之前挂载的Initramfs。

    3.2、然后进入网络文件系统(Net filesystem)并保证Root file system on NFS被勾选

    退出保存配置,然后编译内核,make uImage ARCH=arm CROSS_COMPILE=arm-linux-,再把产生的这个uImage放到/tftpboot/目录下

    3.3、重新设置环境变量:

    setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.108:/root/myhome/rootfs ip=192.168.1.109:192.168.1.108:192.168.1.1:255.255.255.0::eth0:off
    saveenv

    这些红色字体是自己需要根据你的Linux修改的

    3.4、配置Linux系统里的nfs服务器

    vim /etc/exports

    再往里添加部分代码

    /root/myhome/rootfs *(rw,sync,no_root_squash)  //保证自己的根文件系统目录是可读可写并可以访问

    然后重启nfs服务器

    /etc/init.d/nfs restart

    3.5、然后在下载内核,出现这样的界面

    紧接着在Linux的系统rootfs目录下添加两个文件,如图

    这时候我们再来看之前的下载到开发板的根文件系统

    果不其然,不需要重做系统、重新编译、重新下载,也多出了两个文件,这就是nfs网络文件系统的好处!

    这是因为这个根文件系统是通过网络挂载到这个开发板的,文件是通过网络下载到开发板的,这在后续的开发非常有用!

  • 相关阅读:
    SpringTask中cron表达式整理记录
    解决idea启动弹窗
    windows上安装kafka
    两种方式实现横向滚动条
    浅谈新的布局方式-flex
    不忘初衷,方得始终 ---总结一年的前端生涯
    javascript深入理解js闭包(转载)
    es6学习笔记--Interator和Generator(以及for-of的用法)
    根据HTML5的新方法 drag & drop 方法实现表格拖拽实例
    HTML5 拖放(Drag 和 Drop)详解与实例(转)
  • 原文地址:https://www.cnblogs.com/sanshijvshi/p/8467971.html
Copyright © 2011-2022 走看看