S5PV210根文件系统的制作(一)

时间:2022-04-15 09:05:04

一、基本概念

文件管理:数据管理算法

文件系统:管理文件算法的载体

文件系统的功能:管理分区上的数据(增删查改)

文件系统的分类:fat32/ntfs/ext3/ext4/yaffs/jffs/cramfs/.....

文件系统的表现形态:

  window--------->森林

  linux------------>树 ------->文件目录标准

文件系统与根文件系统:

  根文件系统:  系统启动时加载的助文件系统

  其他文件系统:  根系统启动后挂载的其他文件系统

 

二、需要用到的工具

busybox-1.20.2.tar,yaffs2-source,bash-4.0.tar

下载地址:http://pan.baidu.com/s/1ntmMh5Z

三、根文件系统镜像设计

1)建立标准的linux文件目录(必备)

  /sbin  ------->超级用户工具命令

  /etc  --------->系统配置文件

  /bin  ---------->通用工具命令

  /dev  ---------->设备文件目录

  /lib  ------------>库文件目录  --------------->静态库、动态库

  命令: 

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
1 mkdir  /home/gec/build_rootfs
2 
3 cd  /home/gec/build_rootfs
4 mkdir rootfs   ----->  创建根文件系统主目录  ----->   /
5 
6 cd rootfs
7 mkdir {sbin,bin,dev,lib,etc}
View Code

2)配置busybox

  1.解压,并进入目录

# tar jxvf busybox-1.20.2.tar.bz2
# cd busybox-1.20.2

  2.修改Makefile中的体系结构ARCH和交叉编译器前缀CROSS_COMPILE

# vim Makefile
修改: CROSS_COMPILE
= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi- ARCH = arm

  3.通过menuconfig配置busybox

  BusyBox的配置程序和linux内核菜单项配置方式简直一模一样。熟悉用make menuconfig方式配置linux内核的朋友很容易上手。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# make menuconfig

选上以下几项:

Busybox Settings --->
  General Configuration  --->
     [*] Don't use /usr  
  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
  Installation Options ("make install" behavior)  --->
      (/home/gec/build_rootfs/rootfs) BusyBox installation prefix //安装目标路径
Linux Module Utilities --->
        [ ] Simplified modutils
        [*] insmod
        [*] rmmod
        [*] lsmod
        [*] modprobe
        [*] depmod
取消选中Simplified modutils,使用完整的模块工具命令:insmod、rmmod……
View Code

  确保支持mdev(mdev是udev设备文件系统的精简版),确保以下几项被选中:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
Linux System Utilities ---> [*] mdev 
       [*] Support /etc/mdev.conf 
       [*] Support subdirs/symlinks 
       [*] Support regular expressions substitutions when renaming dev
       [*] Support command execution at device addition/removal 
       [*] Support loading of firmwares
View Code

  其它选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了,配置好后退出并保存。

  4.编译BusyBox,并安装。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
编译:
# make -j2         // j2表示创建两个线程进行编译

安装:
# make install
View Code

  在busybox-1.20.2目录下可以找到_install子目录,这就是刚才的安装目录。

 

下面的操作在rootfs目录进行

3)拷贝交叉编译器里的动态链接库到lib目录

  只需要拷贝交叉编译器里的动态链接库及其软链接到lib目录就好了,静态链接库不用拷贝:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# cp /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -rdf
View Code

  注意:使用cp工具拷贝链接一定要使用d选项,表示拷贝的文件带链接属性。

4)对lib目录下的动态链接库进行裁剪

  动态链接库包括了符号信息,可以去掉不必要的符号信息,使用动态链接库变得更小巧:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# arm-none-linux-gnueabi-strip lib/*so*
View Code

5)修改脚本文件

  1.etc/inittab文件是启动流程文件。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
#vi etc/inittab

内容:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh    //::respawn:/bin/bash
::once:/etc/local.rc
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
View Code

  2./etc/init.d/rcS脚本。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
#vi etc/init.d/rcS

内容:
#!/bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin        //设置变量PATH

mount -a                                    //mount -a会读取etc/fstab完成文件系统挂载

echo /sbin/mdev > /proc/sys/kernel/hotplug           //当内核有热插拨事件时调用/sbin/mdev
mdev -s                                      //启动mdev


#ifconfig eth0 192.168.0.80               //配置以太网接口0的IP地址
                        
View Code

  3.etc/fstab文件。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# <file system> <mount point> <type> <options> <dump> <pass>
     proc                  /proc             proc    defaults      0           0
     sysfs                 /sys              sysfs   defaults      0           0
     tmpfs                 /dev              tmpfs   defaults     0          0
     tmpfs                /tmp              tmpfs   defaults     0           0
     tmpfs                /dev               tmpfs   defaults     0           0
View Code

  /proc目录挂载了procfs文件系统,/sys目录挂载了sysfs文件系统,var和tmp及dev目录挂载的是tmpfs临时文件系统。

  创建mdev.conf文件:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
touch /rootfs/etc/mdev.conf
View Code

  附:修改好的etc目录:

  http://pan.baidu.com/s/1pJ4sX2j

6)设置动态库的加载路径

  修改 etc/init.d/rcS ,添加:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
export LD_LIBRARY_PATH=/mylib:$LD_LIBRARY_PATH
View Code

7)添加bash

  1.配置,编译,生成。

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
配置bash:
#./configure   --host=arm-linux
编译:
#make

生成:
#make install 
得到bash    -----> 放到开发板文件系统的/bin目录下,检查该程序所需的动态库是否具备
View Code

  2.修改inittab脚本

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
#!/bin/bash
::askfirst:/bin/bash
View Code

  3.修改其他脚本的声明

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
#!/bin/sh    -->  #!/bin/bash
View Code

  4.添加etc/profile  ---->  启动bash时系统默认的执行脚本

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# Ash profile
# No core files by default

ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`    
export USER LOGNAME PS1 PATH
export LD_LIBRARY_PATH=lib:/usr/lib:$LD_LIBRARY_PATH
View Code

 

四、构建根文件系统镜像

  1.获取mkyaffs2image工具的源码包

  下载地址:

  http://fatplus.googlecode.com/files/yaffs2-source.tar

  2. 编译mkyaffs2image工具

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# tar xvf yaffs2-source.tar
# cd yaffs2/utils
# make 
# cp mkyaffs2image /usr/local/bin/
View Code

  3.制作根文件系统镜像

  进入/root目录

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
# mkyaffs2image  rootfs  rootfs.img
View Code

五、根文件系统镜像rootfs.img下载与烧写

  下面的操作在开发板复位后的u-boot下载阶段进行:

S5PV210根文件系统的制作(一)S5PV210根文件系统的制作(一)
SMDKV210 # nand erase 0xe00000 0xF200000
SMDKV210 # tftp 0x40000000 rootfs.img
SMDKV210 # nand write.yaffs 0x40000000 0xe00000 0x6aa340 (要把最后一个数字改为实际u-boot下载传输的字节数)
SMDKV210 # set bootargs root=/dev/mtdblock4 rootfstype=yaffs2  rw console=ttySAC0,115200
View Code