3-04 嵌入式Linux根文件系统制作与挂载

2019-07-13 00:35发布

1.  建立根文件系统目录与文件
  1.1  创建目录
    #mkdir rootfs    //根文件系统目录名可随便取,一般为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
  1.3  加入配置文件
    (把厂家提供的etc.tar.gz复制到Linux中,其中包含fstab、init.d、inittab以及profile这四个文件)
    #tar etc.tar.gz
    #mv etc/* /rootfs/etc/ -rf
  1.4  添加内核模块(先略过这步骤,直至uImage编译完成后再进行此步)
    //进入内核源代码文件夹
    #cd /linux  
    #make modules ARCH=arm CROSS_COMPILE=arm-linux-
    //把散落在内核源码各文件夹中的.ko文件安装到rootfs/lib/modules里面。
    #make modules_install ARCH=arm INSTALL_MOD_PATH=rootfs
  1.5  编译busybox(Busybox:嵌入式开发中的瑞士军刀,系统小工具)
    1.5.1  配置busybox
      解压busybox源码,进入目录当中。
      #make menuconfig
     1.Busybox Settings -> buile Options -> 
      选中“Build busybox as a static linary”静态链接
     2.设置交叉编译工具链Cross Compiler prefix (arm-linux-)
      Installation Options -> 
     3.选中“Don't use /usr”,避免busybox安装至宿主机的/usr目录下
     4.Busybox Installation Prefix(...../rootfs)
      该选项表明编译后的busybox的安装位置。
      对选项烧左修改然后退出。(awk、diff、vi等编辑器可不选)
    1.5.2  编译、安装busybox
      #make
      #make install   //安装完成后,常用命令保存在rootfs/bin/中。


2.  挂载根文件系统到内核
  2.1  挂载方式简介
    根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为Ram和Flash,常用的基于存储设备的文件系统类型包括:jffs2,yaffs2,ubifs,ramdisk等。
    基于Nandflash的文件系统:yaffs2和UbiFS支持可读可写,cramfs支持只读。
    基于Norflash的文件系统:Jffs2支持可读可写
    基于内存的文件系统:Ramdisk是老式的文件系统,在内存用一块固定大小的区域模拟磁盘,现在少用。Initramfs是把压缩在镜像中的内容加压到内存中的快速文件系统。
    基于网络的文件系统:NFS,适合进行系统调试时采用。
  2.2   使用initramfs
    2.2.1  配置Linux内核
    #cd ../rootfs/
    #ln -s ./bin/busybox init  //为何要这么做?
    #cd ../linux  //linux为内核源码目录
    #make menuconfig ARCH=arm
    General setup -> 选中Initial RAM filesystem and RAM disk......
    修改Initramfs的目录路径为(...../rootfs)
    2.2.2  编译内核
    把uImage(uImage生成的路径未/arch/arm/boot/)放进/tftp/,等待被下载到开发板中。
    2.2.3  修改环境变量,下载系统内核
    setenv bootargs noinitrd console=ttySAC0,115200
    saveenv 
    2.2.4  下载系统内核
    tftp uImage 0x31000000
    bootm 0x31000000
 
  2.3   NFS挂载
    initramfs每次更改都需要重新编译内核,因此在开发阶段一般使用NFS。
    2.2.1  配置Linux内核
    #cd ../rootfs/
    #ln -s ./bin/busybox init
    #cd ../linux  //linux为内核源码目录
    #make menuconfig ARCH=arm
    General setup -> 取消选中Initial RAM filesystem and RAM disk......
    File system -> 选中Network File Systems -> 选中Root file system on NFS
    2.2.2  编译内核
    把uImage(uImage生成的路径未/arch/arm/boot/)放进/tftp/,等待被下载到开发板中。
    2.2.3  修改环境变量, 
    setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.123.4:/arm/rootfs ip=192.168.123.18:192.168.123.4:192.168.123.254:255.255.255.0::eth0:off
    saveenv 
    2.2.4  确保NFS服务器已经启动
    vi /etc/exports  //确认NFS服务器配置,路径为rootfs
    /etc/init.d/nfs restart   //重启NFS服务器
    2.2.5  下载系统内核
    tftp uImage 0x31000000
    bootm 0x31000000


(解决TQ2440系统不断重启问题,在配置内核是,取消选中watchdog)