Welcome 微信登录

首页 / 操作系统 / Linux / ARM Linux移植攻略之基于busybox1.15.0的yaffs2文件系统移植TE2440II开发板

首先说一下各个知识点:使用的busybox是1.15.0。什么是busybox呢,busybox是很多标准linux一个单个可执行实现,很多标准linux工具都可以共享很多共同的元素。例如,很多基于文件的元素(比如grep和find)都需要在文件中搜索文件的代码。当这些工具被合并到一个可执行程序中时,他们就可以共享这些相同的元素,这样可以产生更小的可执行程序。实际上,busybox可以将大约3.5M的工具包装成大约200KB大小。这就为引导盘和嵌入式linux设备提供了更多的工具。我们可以对2.4或2.6版本的linux内核使用这个工具。几个常用的make选项:make clean 清除源代码树make distclean 彻底清除源代码树make menuconfig N-curses(基于菜单的)配置工具make defconfig 启用默认的(通用)配置 make config 基于菜单的配置工具uClibc与glibc。CC的标准就是glibc这个库,里边有GCC各种标准函数的实现,使用uClibc,这是一个对大小进行优化过的C库,它为嵌入式系统开发。根文件系统前面加一个“根”字,说明它是加载其他文件系统的根,既然是根,那么如果没有这个根,其他文件系统就没法加载。他包括系统引导和其他文件系统挂载所必须的文件,根文件系统包括Linux启动所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找到/etc/fstab这个挂载文件等,根文件系统还包括了应用程序bin目录等。1)Jffs2JFFS嵌入式系统文件系统最早是由瑞典 Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS也可以用于Linux,uCLinux中。Jffs2:日志闪存嵌入式系统文件系统版本2(Journalling Flash FileSystem v2)主要用于NOR型闪存,基于MTD驱动层,特点是,可读写的,支持数据压缩的,基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已经满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。2)Yaffs Yet Another Flash File SystemYaffs/yaffs2是专门为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少一些功能(例如不支持数据压缩),所以速度更快,挂载时间更短,对内存的占用较小。另外他是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。Yaffs/yaffs自带NAND芯片驱动,并且为嵌入式提供了直接访问文件系统的API,用于可以不使用Linux中的MTD与VFS,直接对文件系统操作。3)CramfsCramfs是Linux的创始人Linux Torvalds参与开发的一种只读的压缩文件系统。他也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省了大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩。4)NFS NFS是由Sun开发并发展起来的一项不同机器,不同操作系统之间通过网络共享文件的技术 然后开始操作:一.给内核打上补丁,使内核对yaffs2文件系统支持。
下载最新的驱动http://www.linuxidc.com/Linux/2011-06/37643.htm解压: tar zxvf yaffs2.tar.gzcd yaffs2./patch-ker.sh  c  /home/hacker/linux-2.6.30.4成功后打印信息:1.      Updating /file/fl/linux-2.6.33/fs/Kconfig2.      Updating /file/fl/linux-2.6.33/fs/Makefile进入linux-2.6.30.4目录,把s3c2410的默认配置写入config文件。1.      make s3c2410_defconfig配置文件系统选项
配置yaffs2文件系统 
修改配置如下:1.      File systems  ---> 2.          [*] Miscellaneous filesystems  --->3.              <*>   YAFFS2 file system support 4.                  -*-     512 byte / page devices5.                  -*-     2048 byte (or larger) / page devices 6.                      [*]       Autoselect yaffs2 format 7.                      [*]     Cache short names in RAM二:编译busybox生成文件系统所需要的应用程序1.解压busybox源码,修改Makefile使之编译成ARM平台:#tar -jxvf busybox-1.15.0.tar.tar
#cd busybox-1.15.0
#gedit Makefile修改CROSS_COMPILE ?= arm-linux- ARCH = arm2.配置busybox,下面是一个人配置的busybox 1.13.0,借来参考,基本差不多。make menuconfigBusybox Settings --->
    General Configuration --->
            Buffer allocation policy (Allocate with Malloc) --->
        [*] Show verbose applet usage messages
        [*] Store applet usage messages in compressed form
        [*] Support --install [-s] to install applet links at runtime
        [*] Enable locale support (system needs locale for this to work)
        [*] Support for --long-options
        [*] Use the devpts filesystem for Unix98 PTYs
        [*] Support writing pidfiles
        [*] Runtime SUID/SGID configuration via /etc/busybox.conf
        [*] Suppress warning message if /etc/busybox.conf is not readable
        (/proc/self/exe) Path to BusyBox executable
    Build Options --->
        [*] Build BusyBox as a static binary (no shared libs)
        [*] Build with Large File Support (for accessing files > 2 GB)
    Installation Options --->
        [ ] Don"t use /usr
            Applets links (as soft-links) --->
        (./_install) BusyBox installation prefix
    Busybox Library Tuning --->
        (6) Minimum password length
        (2) MD5: Trade Bytes for Speed
        [*] Faster /proc scanning code (+100 bytes)
        [*] Command line editing
        (1024) Maximum length of input
        [*] vi-style line editing commands
        (15) History size
        [*] History saving
        [*] Tab completion
        [*] Fancy shell prompts
        (4) Copy buffer size, in kilobytes
        [*] Use ioctl names rather than hex values in error messages
        [*] Support infiniband HW
Linux Module Utilities --->
    (/lib/modules) Default directory containing modules
    (modules.dep) Default name of modules.dep
    [*] insmod
    [*] rmmod
    [*] lsmod
    [*] modprobe
    --- Options common to multiple modutils
    [ ] Support version 2.2/2.4 Linux kernels
    [*] Support tainted module checking with new kernels
    [*] Support for module.aliases file
    [*] Support for module.symbols fileLinux System Utilities --->