nfs起根文件系统

  这两天做了下nfs起根文件系统,在此总结下。对于nfs的配置就不说了,参考http://www.cnblogs.com/zjfdbz/archive/2013/01/17/2865133.html
  还有我所用的交叉编译工具链也如上述网址进行配置的。

  配置环境:Ubuntu 12.04

  1.配置内核  
  首先解压内核到工作目录,然后进入内核目录,执行如下语句。

  #sudo su
  #make menuconfig       (如ubuntu下的用户不能执行该命令则先执行如下命令 sudo apt-get install libncurses5-dev
  要使内核支持nfs起根文件系统,内核必须选上如下配置选项:
              File systems -->Network File System →
                     <*> NFS client support
                     [*]  NFS client support for NFS version 3
                     [*]  Root file system on NFS 
  保存退出。

       2.编译内核
       执行如下命令:
              #make clean
              #make              (或直接make uImage  跳过第三步)
       编译后生成的内核映像zImage位于arch/arm/boot目录下。将其拷贝到/nfs目录下
              #cp arch/arm/boot/zImage /nfs
 

       3.制作uImage
       将uImage制作工具mkimage拷贝到/nfs目录下
              #cd /opt/workspace/u-boot_dir/tools
              #cp mkimage /share   (需要事先编译过uboot才有)
       制作uImage
              #cd /nfs
              #./mkimage -A arm -O linux -T kernel -C none -a 0x82000000 -e 0x82000040 -n linux-2.6.32 -d zImage uImage
   关于mkimage的使用方法参见http://www.cnblogs.com/zjfdbz/archive/2013/01/18/2865683.html

   4.制作根文件系统  (此步我并没怎么做,因为我光盘资料自带了~~,对根文件系统也不是很了解,还得花时间再研究研究,以下是网上摘来的)
    a)创建根文件系统目录:
    #cd /nfs
    #mkdir rootfs
    #cd rootfs
    #mkdir bin dev etc lib proc sbin sys usr mnt tmp var
    #mkdir usr/bin usr/lib usr/sbin lib/modules

    b)创建最基本的设备文件:      (此步若不做在之后的操作中会出warning:unable to open an initial console警告 )
    #cd dev
    #mknod -m 666 console c 5 1
    #mknod -m 666 null c 1 3
    #cd ..

    c)安装/etc配置文件:
    可从下面地址下载etc配置文件,其中包含了之后要用到的busybox。
    http://download.csdn.net/detail/xgg0602/4012229
    将etc配置文件直接解压到安装目录下:
    tar zxvf etc.tar.gz -C /nfs/rootfs

    d)编译内核模块:
    #cd /opt/workspace/kernel_dir/
    #sudo su
    #make modules

    e)安装内核模块:
    #make modules_install ARCH=arm INSTALL_MOD_PATH=/nfs/rootfs

    f)配置busybox
    将之前下载的busybox解压,放到你的工作目录下,并进入busybox目录,执行如下命令
    #sudo su
    #make menuconfig
      Busybox Settings -> build Options ->选中"Build busybox as a static binary“,即静态链接,免去拷贝大量的库文件。
      同时在“Build Busybox as a static binary”同一个页面的下面“ Cross Compiler prefix”,按键盘Enter键进入,然后输入 /opt/Tools/arm-2009q1/bin/arm-none-linux-gnueabi-                  (说明这是我自己安装的交叉编译工具链的位置)
      Installation Options -> 选中"Don't use /usr",以免busybox不慎被安装到宿主机系统的相应目录下,破坏宿主机系统。
      Busybox Installation Prefix (/nfs/rootfs),修改该选项表明编译后的busybox将安装到该位置。

    g)编译、安装busybox
       #make                          
      编译完成后安装
       #make install

    这样文件系统就制作完了。
     

    5.用网线和串口线连接好开发板和电脑(暂不开启开发板),打开minicom
                     #sudo minicom
         接通开发板的电源,当出现如下字符后Hit any key to stop autoboot ,敲击键盘空格键进入uboot
      

         6.使用uboot命令配置环境变量
        #setenv serverip 10.0.0.1
        #setenv ethaddr 00:26:6c:5a:a7:51 
      说明:该硬件地址是自己主机的硬件地址,在另一个终端下执行ifconfig eth0 查看
        #setenv ipaddr 10.0.0.2
                     #setenv bootargs root=/dev/nfs rw nfsroot=10.0.0.1:/nfs/rootfs ip=10.0.0.2:10.0.0.1::255.255.255.0 console=ttyS2,115200n8  mem=64M                (这个要根据你自己的情况进行设置
                   #saveenv

        7.在另一个终端下执行如下命令配置主机ip地址
                 #sudo ifconfig eth0 10.0.0.1
       

    9.使用uboot下载内核
                 #nfs 0x82000000 10.0.0.1:/nfs/uImage    

        10.启动内核
                 #bootm 0x82000000

    

    到此就算大功告成了~~~

 

  参考:http://blog.csdn.net/xgg0602/article/details/7190233

posted @ 2013-01-26 10:28  wust.zjf  阅读(878)  评论(0编辑  收藏  举报