您的位置:首页 > 其它

制作根文件系统并以NFS方式挂载成功

2014-05-12 20:14 477 查看
接着前面一篇:在OK2440/FL2440上移植linux-2.6.35.4  来完成制作一个根文件系统,并用前面制作好的uboot和内核通过NFS服务来挂载。

制作一个根文件系统,主要分为两步:

1.创建根文件系统下的各级目录,包括安装内核驱动模块。

2.用busybox来生成此根文件系统的各种命令,将各级目录关联起来。

首先下载busybox1.13.3和根文件系统用到的etc目录:点击下载

在虚拟机根目录下创建一个工作目录/forlinx/s3c2440,接下来所有工作都在这个目录里完成;

执行命令进入该目录:cd  /forlinx/s3c2440

把下载解压后最终得到两个文件夹 busybox1.13.3 和etc ,把这两个文件夹拷贝到工作目录 /forlinx/s3c2440/中;

到这里准备工作已完成;

进到工作目录 /forlinx/s3c2440/下,开始制作根文件系统:

1.新建一个文件mkrootfs,文件内容如下:

#!/bin/sh
echo "makeing rootdir"
mkdir rootfs
cd rootfs

echo "makeing dir: bin dev etc lib proc sbin sys usr"
mkdir bin dev etc lib proc sbin sys usr
mkdir usr/bin usr/lib usr/sbin lib/modules
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3

echo "making dir: home root boot"
mkdir home root boot
echo "makeing dir:jacob"
mkdir home/jacob
echo "done"
保存这个文件后退出。这是一个脚本文件,我们通过运行这个脚本文件自动创建根文件系统的各级目录;

执行下面两条命令:

chmod 777 mkrootfs
sh mkrootfs
第一条是修改文件权限的,第二条是运行脚本文件的,在当前目录下你会看到新增一个rootfs文件夹,进去后会看到bin dev etc lib proc sbin sys usr等目录,到此就完成了第一步创建各级目录;

2.把解压出来的etc拷到rootfs目录中,替换掉rootfs目录中已有的etc文件夹;

3..进入linux-2.6.35.4源码包目录,编译内核模块,编译的命令是:

make modules ARCH=arm CROSS_COMPILE=arm-linux-  

4.安装内核模块

makemodules_install ARCH=arm INSTALL_MOD_PATH=/forlinx/s3c2440/rootfs  

这里的/forlinx/s3c2440/rootfs表示将内核模块安装到这个路径下,这里刚好是我们制件的根文件系统总目录。

5.配置busybox,进入busybox1.13.3目录下;执行命令:make
menuconfig

进行如下配置:

Busybox Settings--->  

    General Configuration --->  

            Buffer allocation policy (Allocatewith Malloc) --->  

        [*] Show verbose applet usage messages  

        [*] Support --install [-s] to installapplet links at runtime  

        [*] Enable locale support (system needslocale for this to work)  

        [*] Support for devfs  

        [*] Use the devpts filesystem forUnix98 PTYs  

        [*] 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 busybox as a static binary",静态链接  

   

        [*] Build with Large File Support (foraccessing files > 2 GB)  

              [*]Do you want to build BusyBoxwith a Cross Compiler?  

              (arm-linux-) cross Compiler prefix   //  填写交叉编译前缀  

    Installation Options --->  

        [ *] Don't use /usr         //选中“Don'tuse /usr”,选中该项可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统  

            Applets links (as soft-links)--->  

        (/xxxx/rootfs) BusyBox installationprefix   //填写你的安装路径,我这里是填:/forlinx/s3c2440/rootfs/  

    Busybox Library Tuning --->  

        (2) MD5: Trade Bytes for Speed  

       

Linux ModuleUtilities --->  

    (/lib/modules) Default directory containingmodules  

    (modules.dep) Default name of modules.dep  

    [*] insmod  

    [*] rmmod  

[*] lsmod  

       [*]lsmodpretty output for 2.6.x Linux kernels  

[*] modprobe  

[*]  Multipleoptions parsing  

    --- Options common to multiple modutils  

    [*] Support tainted module checking withnew kernels  

    [*] Support version 2.6.x Linux kernels  

配置完了保存退出。

6.编译,安装busybox,执行命令:

make arch=ARM CROSS_COMPILE=arm-linux-
make install
进入目录/forlinx/s3c2440/rootfs/sbin中看init检查busybox安装成功与否

至此根文件系统制作完成。

接着就是在虚拟机上安装NFS服务器(安装步骤我写在另外的一篇文章里:在ubuntu上安装tftp服务器与nfs服务器)。

由于前面的uboot中设置的bootargs参数里设置的路径正好也是:/forlinx/s3c2440/rootfs;所以此时启动内核后就可以挂载上面制作完成的根文件系统rootfs.

如下图所示:



附:上图中[ok2440v3@luo] 是通过修改/forlinux/s3c2440/rootfs/etc/profile文件的,你可自定义,profile文件内容如下:

# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "
export PS1="[ok2440v3@luo]# "
echo "Done"
echo


注意:本根文件系统移植是busybox中是用静态链接生成,所以在交叉编译文件时要加上 -static 参数,形如:arm-linux-gcc -static hello.c -o hello; 然后再在板子上运行./hello;

接下来要解决的问题的:要用动态链接库制作一个最小的yaffs2根文件系统,下载到板子上。因为这里的tftp 下载有个问题就是文件过大(大于60M)会下载不成功。如有大牛知道这个问题的解决方法,还望赐教。

感谢网上的各位大牛,本博文主要参考:

http://blog.csdn.net/eastmoon502136/article/details/7905960

http://blog.csdn.net/jacobywu/article/details/6844794



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息