zoukankan      html  css  js  c++  java
  • Busybox文件系统的移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y

    fsc100开发板

    交叉编译器:arm-cortex_a8-linux-gnueabi-gcc

    busybox-1.17.3.tar.bz2

    一、根文件系统制作

    1、  源码下载

    我们选择的版本是busybox-1.17.3.tar.bz2下载路径为:

    http://busybox.net/downloads/

    2、  解压源码

    $ tar  xvf  busybox-1.17.3.tar.bz2

    3、  进入源码目录

    $ cd  busybox-1.17.3

    4、  配置源码

    $ make menuconfig

    Busybox Settings --->

           Build Options --->

                  [*] Build BusyBox as a static binary (no shared libs)

                  [ ] Force NOMMU build

                  [ ] Build with Large File Support (for accessing files > 2 GB)

                  (arm-cortex_a8-linux-gnueabi-) Cross Compiler prefix

                  () Additional CFLAGS

    5、  编译

    $ make

    6、  安装

    busybox默认安装路径为源码目录下的_install

    $ make  install

    7、  进入安装目录下

    $ cd  _install

    $ ls

    bin  linuxrc  sbin  usr

    8、  创建其他需要的目录

    $ mkdir  dev  etc  mnt  proc  var  tmp  sys  root

    9、  添加库

    • 将工具链中的库拷贝到_install目录下

    $ cp  /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib   ./  -a

    • 删除静态库和共享库文件中的符号表

    $ rm  lib/*.a

    $ arm-cortex_a8-linux-gnueabi-strip  lib/*

    • 删除不需要的库,确保所有库大小不超过4M

    $ rm  lib/libstdc++*

    $ du  -mh   lib/

    10、 添加系统启动文件

    在etc下添加文件inittab,文件内容如下:

    #this is run first except when booting in single-user mode.

    :: sysinit:/etc/init.d/rcS

    # /bin/sh invocations on selected ttys

    # start an "askfirst" shell on the console (whatever that may be)

    ::askfirst:-/bin/sh

    # stuff to do when restarting the init process

    ::restart:/sbin/init

    # stuff to do before rebooting

    ::ctrlaltdel:/sbin/reboot

    在etc下添加文件fstab,文件内容如下:

    #device     mount-point     type        options         dump     fsck order

    proc         /proc             proc           defaults     0                0

    tmpfs         /tmp                   tmpfs         defaults         0                 0

    sysfs           /sys                    sysfs           defaults           0                 0

    tmpfs     /dev                   tmpfs         defaults         0                 0

           这里我们挂载的文件系统有三个proc、sysfs和tmpfs。在内核中proc和sysfs默认都支持,而tmpfs是没有支持的,我们需要添加tmpfs的支持

    修改内核配置:

    File systems --->

           Pseudo filesystems --->

                  [*] Virtual memory file system support (former shm fs)

                  [*] Tmpfs POSIX Access Control Lists

    重新编译内核

          

           在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:

    #!/bin/sh

    # This is the first script called by init process

    /bin/mount  -a

    echo  /sbin/mdev  >  /proc/sys/kernel/hotplug

    /sbin/mdev  -s

           为rcS添加可执行权限:

           $ chmod   +x  init.d/rcS

           在etc下添加profile文件,文件内容为:

    #!/bin/sh

    export HOSTNAME=farsight

    export USER=root

    export HOME=root

    export PS1="[$USER@$HOSTNAME W]# "

    PATH=/bin:/sbin:/usr/bin:/usr/sbin

    LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH

    export PATH  LD_LIBRARY_PATH

    11、 设备文件创建

    根文件系统中有一个设备节点是必须的,在dev下创建console节点

    $ sudo  mknod   dev/console  c  5  1

    重要:新制作的文件系统尺寸若超出8M,删除不需要的库文件

           二、NFS测试

        1、删除原先的/source/rootfs

        $ sudo  rm  -rf  /source/rootfs   

        2、将我们新建的根文件系统拷贝到/source/rootfs目录下

        $sudo  mkdir  /source/rootfs

        $ sudo  cp  _install/*   /source/rootfs   –a

        3、设置uboot环境变量

    # setenv  bootcmd  tftp  20008000  zImage; go  20008000

    # setenv  bootargs  root=nfs  nfsroot=192.168.1.100:/source/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.1.200

    # saveenv

    重新启动开发板,查看是否能够正常挂载,功能是否正常

    三、制作ramdisk文件系统

    通过NFS测试以后,就可以制作ramdisk文件系统了,具体如下:

           1、制作一个大小为8M的镜像文件

            $ cd  ~

           $ dd  if=/dev/zero  of=initrd.img  bs=1k  count=8192 (initrd.img为8M)

           2、格式化这个镜像文件为ext2

           $ mkfs.ext2  -F  initrd.img

           3、在mount下面创建initrd目录作为挂载点

           $ sudo  mkdir  /mnt/initrd

           4、将这个磁盘镜像文件挂载到/mnt/initrd下

           注意这里的initrd.img不要和ubuntu根目录下的initrd.img弄混了,同时initrd.img不能存放在rootfs目录中

           $ sudo  mount  -t  ext2   -o  loop  initrd.img  /mnt/initrd

           5、将我们的文件系统复制到initrd.img中

    将测试好的文件系统里的内容全部拷贝到 /mnt/initrd目录下面

           $ sudo  cp  /source/rootfs/*   /mnt/initrd  –a

    6、卸载initrd

    $ sudo  umount  /mnt/initrd

    7、压缩initrd.img为initrd.img.gz并拷贝到/tftpboot下

    $ gzip  --best  -c  initrd.img  >  initrd.img.gz

    $ cp  initrd.img.gz  /tftpboot

    8、配置内核支持RAMDISK

    制作完 initrd.img.gz后,需要配置内核支持RAMDISK作为启动文件系统

    Device Drivers

           SCSI device support  --->

                  <*> SCSI disk support

           Block devices  --->

                  <*>RAM  block  device  support  

    (1)Default number of RAM disks 

    (8192) Default RAM disk size (kbytes)   (修改为8M)

    General setup  --->

           [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

    重新编译内核,复制到/tftpboot

           9、在U-BOOT命令行重新设置启动参数:

    # setenv  bootcmd  tftp  20008000  zImage ; tftp  20800000  initrd.img.gz ; go  20008000

    # setenv  bootargs  root=/dev/ram  rw  init=/linuxrc  initrd=0x20800000,8M console=ttySAC0,115200

    # saveenv

    重新启动开发板查看能否正常启动

           四、制作cramfs文件系统

    1、cramfs文件系统镜像制作

    由于系统提供制作cramfs文件系统的工具,可以直接使用。具体操作如下;

    $ mkfs.cramfs  /source/rootfs  rootfs.cramfs

    2、将rootfs.cramfs拷贝到/tftpboot目录下

    $ sudo  cp  rootfs.cramfs  /tftpboot

    3、将rootfs.cramfs烧写到nand flash的第三个分区上

    u-boot下执行如下命令

    # tftp  20008000  rootfs.cramfs

    # nand  erase  400000  400000

    # nand  write  20008000  400000  400000

    4、重新设置u-boot启动参数

    # setenv  bootcmd  tftp  20008000  zImage; go  20008000

    # setenv  bootargs  root=/dev/mtdblock2   init=/linuxrc  console=ttySAC0,115200

    # saveenv

    启动开发板,测试是否成功。

    [root@farsight /root] # ls /

    bin       etc      linuxrc     sbin     tmp      var

    dev      lib      mnt      proc     test     usr

    [root@farsight /root] # mkdir test

    mkdir: Cannot create directory `test': Read-only file system

    注意:cramfs格式的文件系统是只读

           五、制作jffs2文件系统

           1、配置内核支持jffs2文件系统

    File systems  --->

               [*] Miscellaneous filesystems  --->

                <*>   Journalling  Flash  File  System  v2  (JFFS2)  support

    重新编译内核并拷贝到/tftpboot下

    2、zlib的编译

           解压zlib-1.2.3.tar.bz2并进入zlib-1.2.3配置编译安装

           $ tar  xvf  zlib-1.2.3.tar.bz2

           $ cd  zlib-1.2.3

           $ ./configure

           $ make

           $ sudo  make install

           3、mtd工具编译

           解压mtd-snapshot-20050519.tar.bz2 并进入mtd/util编译安装

           $ tar  xvf  mtd-snapshot-20050519.tar.bz2

           $ cd  mtd/util

           $ make

           $ sudo  make  install

           这样我们的系统里就有了mkfs.jffs2这个工具了

           4、jffs2文件系统镜像制作

           $ mkfs.jffs2   -r  /source/rootfs  -o  rootfs.jffs2  -e  0x20000  --pad=0x400000  -n

           $ sudo  cp  rootfs.jffs2  /tftpboot

           5、jffs2文件系统烧写

    # tftp  20008000  rootfs.jffs2

    # nand  erase  400000  400000

    # nand  write  20008000  400000  400000

           6、设置u-boot启动参数

    # setenv  bootcmd  tftp  20008000  zImage; go  20008000

    # setenv  bootargs  root=/dev/mtdblock2   rootfstype=jffs2  rw  init=/linuxrc

       console=ttySAC0,115200 

    # saveenv

           重新启动开发板,查看是否成功

  • 相关阅读:
    wingIDE Pro6 破解教程
    C++中的访问权限
    解决wine中文字体方块或乱码
    linux下目录的作用
    linux下查看系统信息
    Windows Eclipse Maven 安装
    Centos SVN 搭建
    Mysql MyISAM 与 InnoDB 效率
    Linux删除除指定后缀外的所有文件
    mysql 多个timestamp设置自动更新 错误:there can be only one TIMESTAMP column with CURRENT_TIMESTAMP
  • 原文地址:https://www.cnblogs.com/vsyf/p/4974401.html
Copyright © 2011-2022 走看看