Chinaunix首页 | 论坛 | 博客
  • 博客访问: 265364
  • 博文数量: 49
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-08 10:33
文章分类

全部博文(49)

文章存档

2010年(2)

2009年(30)

2008年(17)

我的朋友

分类: LINUX

2009-07-30 13:53:14

    建立NFS根文件系统,主要是因为在开发的时候,很方便。在PC机上把需要的文件拷贝到共享目录下,在开发板的文件系统里就可以对应看到此文件。
    本文旨在建立一个最小的根文件系统。大家熟知的根文件系统,都包含一/bin、/sbin、/usr、/etc、
/lib等目录。通过busybox工具来编译生成根文件系统下的可执行文件。
    本编译器是arm-linux-gcc 3.4.5版本的。
 
    1.下载busybox-1.7.0,从下载,之后解压。
    tar xjf busybox-1.7.0.tar.bz2
    2.配置busybox,跟配置内核的界面差不多。
     若使用静态编译,可以选择
     Build Options
        []Build Busybox as a static binary(no shared libs)
     本文件系统采用动态编译的方法。
    3.编译和安装busybox
      首先修改busybox的根目录下的Makefile,
      将ARCH CROSS_COMPILE变量修改如下
        ARCH  ?= arm
        CROSS_COMPILE ?= arm-linux-
     然后可执行make命令来进行编译。最后是安装 make install,就会在busybox根目录下的_install 目录下生成如下文件:
     drwxr-xr-x 2 yuaf yuaf 4096 2009-07-30 11:01 bin
     lrwxrwxrwx 1 yuaf yuaf   11 2009-07-30 11:01 linuxrc -> bin/busybox
     drwxr-xr-x 2 yuaf yuaf 4096 2009-07-30 11:01 sbin
     drwxr-xr-x 4 yuaf yuaf 4096 2009-07-30 11:01 usr
    把此文件下所有的文件拷贝到你的NFS共享文件夹下,如我的共享文件夹是:/home/yuaf/root_nfs
   4.建立/lib目录。使用动态链接库连接,把你所安装的交叉编译器路径下的lib目录拷贝到此目录下就行。
    $pwd
    /usr/local/arm/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
    $cp *.so* /home/yuaf/root_nfs/lib/
   5.构建/etc目录
    init进程根据/etc/inittab文件来创建其他子进程。
    创建etc/inittab文件,仿照Busybox的examples/inittab文件。内容如下:
    #/etc/inittab
    ::sysinit:/etc/init.d/rcS
    ttySAC0::askfirst:-/bin/sh
    ::ctrlatldel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    创建etc/init.d/rcS文件,内容如下:
    #!/bin/sh
    ifconfig eth0 192.168.0.100
    mount -a
    最后还得改变它的属性,使它能够执行
    $chmod +x etc/init.d/rcS
    创建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
    其具体的每个字段的意思可以上网去搜。
   6.构建/dev目录
     通过mdev,读取内核信息来创建设备文件。要使用mdev,需要内核支持sysfs文件系统,为了减少对Flash的读写,还要支持tmpfs文件系统。确保内核支持CONFIG_SYSFS、CONFIG_TMPFS配置项。
     要自动运行mdev,需要修改etc/fstab文件。其修改后的文件,见其上面etc/fstab内容。
     修改etc/init.d/rcS
     在其后面加入下面几行
     mkdir   /dev/pts
     mount -t devpts devpts /dev/pts
     echo /sbin/mdev > proc/sys/kernel/hotplug
     mdev -s
     修改etc/inittab文件
     因为开发板通过mdev生成的/dev目录中,s3c2410的串口名是s3c2410_serial0、s3c2410_serial1,不是ttySAC0、ttySAC1等。
    建立/dev/console /dev/null 设备文件
    $sudo mknod console c 5 1
    $sudo mknod null c 1 3
  7.构建其他目录
   $mkdir proc mnt tmp sys root
   这样一个最小的根文件系统就建立起来啦。
   在U-Boot启动时,设置linux内核启动参数,挂载nfs文件系统。
   其u-boot设置启动参数如下:
   setenv linux_arg "console=ttySAC0 root=/dev/nfs init=/linuxrc nfsroot=192.168.0.50:/home/yuaf/root_nfs ip=192.168.0.100:192.168.0.50:192.168.0.1:255.255.255.0:"
   其中init=/linuxrc,很重要。初始化文件系统。我就因为没有加这条启动参数,耽误了几天时间。


   
   
阅读(2287) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~