busybox制作文件系统--文件系统篇

文件系统是用来做什么的?

存储设备(块设备,像硬盘、flash等)是分块(扇区)的,物理上底层去访问存储设备时是按照块号(扇区号)来访问的。文件系统是一些代码,是一套软件,这套软件的功能就是对存储设备的扇区进行管理,将这些扇区的访问变成了对目录和文件名的访问。我们在上层按照特定的目录和文件名去访问一个文件时,文件系统会将这个目录+文件名转换成对扇区号的访问。最后,不同的文件系统的差异就在于对这些扇区的管理策略和方法不同,譬如坏块管理、碎片管理。

busybox

busybox 是一个集成了三百多个最常用Linux命令和工具的软件,是一个非常好用的根文件系统制作工具,下载地址http://www.busybox.net/downloads/。下面将介绍下通过busybox制作文件系统的过程。

(1)首先需要下载busybox安装包,进入目录修改Makefile,修改本地交叉编译器的地址。

ARCH =arm
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

(2)然后根据自己的情况配置busybox,配置程序和linux内核菜单配置方式很像,输入命令make menuconfig。

Busybox Settings --->
    Build Options --->
        [*] Build BusyBox as a static binary (no shared libs)
//这个选项是一定要选上,这样才能把BusyBox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则
//需要其他库文件才能运行BusyBox。
    Busybox Library Tuning --->
        [*] vi-style line editing commands   //选上VI风格的行编辑器命令。
        [*] Fancy shell prompts
Linux Module Utilities --->
        [ ] Simplified modutils
        [*] insmod
        [*] rmmod
        [*] lsmod
        [*] modprobe
        [*] depmod
//取消选中Simplified modutils,使用完整的模块工具命令:insmod、rmmod…

(3)输入命令make编译,然后再输入make install生成_install目录

(4)然后进入_install文件目录下,创建dev目录、lib目录、proc和sys目录。

  • 创建dev目录,进入dev目录下要创建两个文件null和console(控制台终端)
sudo mknod   console        c             5            1
sudo mknod   null           c             1            3
// 命令      设备文件名   当前设备类型    主设备号        次设备号

上面命令的c代表字符设备,块设备为b。

  • 创建lib目录,输入arm-linux-readelf命令查看需要加载哪些库,arm-linux-readelf -a XXX    可查看文件运行架构、大小端、共享库等信息。针对编译时加上"-static"选项的应用程序。arm-linux-readelf -d XXX    可查看应用程序的动态链接库

arm-linux-readelf   -d   bin/busybox

通过命令可以知道有几个库是必须要加的,然后从交叉编译工具中找到下面几个库拷贝到lib目录下

libm.so.6 -> libm-2.10.1.so(数学库)

libc.so.6 -> libc-2.10.1.so(标准C库)

ld-linux.so.3 -> ld-2.10.1.so(链接库)

  • 如果我们要文件系统执行我们自身的init程序,则需要提供配置文件,配置文件是在etc目录下的inittab文件,内容如下所示

busybox制作文件系统--文件系统篇_第1张图片

其格式如下所示

:::

:控制台,省略

:运行级别,省略

:表示控制这个子程序的方式,8种方式,如下图所示

:要执行的程序,可以是程序,也可以是脚本,如果前面加-,表示是可交互的程序

busybox制作文件系统--文件系统篇_第2张图片

 

  • 修改etc下的fstab配置文件,mount -a会自动挂载fstab的内容

     # device   mount-point    type    options    dump    fsck order
    
     proc          /proc       proc    defaults    0          0
    
     sysfs         /sys        sysfs   defaults    0          0

    device:设备文件,要挂载的设备

    mount-point:挂载点

    type:文件系统类型

    options:挂载的参数

    dump和fsck order:忽略

  • 创建proc和sys目录,fstab挂载需要。

  • 最后,使用mkyaffs2image生成根文件系统镜像,执行命令:mkyaffs2image _install rootfs.yaffs。

(5)将获得的文件系统镜像通过命令烧到开发板上,输入命令:

tftp 30008000 rootfs.yaffs

nand erase e00000 1f200000

nand write.yaffs 30008000 e00000 $filesize

(5)设置U-Boot启动参数,进入uboot,将bootargs 环境变量设置为'console=ttySAC0,115200 root=/dev/mtdblock4 rootfstype=yaffs rw'

到此,文件系统的制作已经完成了。

 

你可能感兴趣的:(busybox制作文件系统--文件系统篇)