zoukankan      html  css  js  c++  java
  • 构建最小根文件系统

    http://blog.sina.com.cn/s/blog_7943319e01018g5w.html

    构建最小根文件系统

    一个最小根文件系统必须的项:

    1. /dev/console   这个在内核启动时打开:sys_open((const char __user *) "/dev/console", O_RDWR, 0) 

     /dev/null              当不设置标准输入输出标准出错时,就会定位到/dev/null

    2. init本身,即busybox

    3. /etc/inittab配置文件

    4. inittab配置文件中指定的应用程序或脚本

    5. 相应的库(如glibc库)

     

     

    下面分三步对如何构建一个根文件系统进行说明

     

    一.busybox创建基本的根文件系统。

    这个工具可以生成基本的目录和一些基本的命令,这些基本的命令都是一些软连接,连接到/bin/busybox名称的应用程序。执行这个命令实际就执行busybox这个程序,busybox应用程序具体再执行这个命令所代表的功能。

     

    busybox的安装

    首先在Makefile中指定交叉编译器:

    找到并更改为:CROSS_COMPILE ?= arm-linux-

    安装:

     

    1.make menuconfig    //这个可以配置一些选项

    2.make

    3.make CONFIG_PREFIX=/home/smb/work/root_fs_mn install //一定要指定要释放的目录,否则会释放的主机的根目录下。

     

    这样就完成了根文件系统所需的第二项init本身,即busybox,接下来就是在此基层上完善!

     

    二.构建最小根文件系统

    1.首先要先把C库拷到生成的根文件系统中,busybox(选择动态编译)和将要运行的应用程序都将用到。操作如下:

    (1)在生成的根文件系统根目录中创建lib目录。mkdir lib

    (2)在交叉编译器目录中找到glibc库的的目录lib

    (3)复制glibc到lib目录 cp *.so*  /home/smb/work/root_fs_mn/lib –d (-d表示将连接符号还按符号复制)

     

    本步骤完成了根文件系统所需的第五项,即所需的库!

     

    2.创建etc/inittab文件

    Busybox读取此文件来注册一些要运行的配置。

    1. ::sysinit:/etc/init.d/rcS
    2. console::askfirst:-/bin/sh
    3. ::shutdown:/bin/umount -a -r

    本步骤完成了最小根文件系统所需的inittab配置文件的建立!

    3.创建etc/init.d/rcS文件

    这个shell脚本文件添加想要自动运行的任务。

    1.  #!/bin/sh
    2.   ifconfig eth0 192.168.1.23    #配置开发板IP
    3.   mount -a                #挂载在etc/fstab中配置的挂载项
    4.   mkdir /dev/pts        #支持外部网络连接的虚拟终端telnet
    5.   mount -t devpts devpts /dev/pts
    6.   echo /sbin/mdev > /proc/sys/kernel/hotplug #热插拔
    7.   mdev –s    #在dev目录下生成内核支持的所有节点

     

    这样etc/inittab配置文件中指定的相关执行脚本就完成了,完成了根文件系统所需的第四项,但rcS脚本中的 mount –a指令需读取etc/fstab配置文件中的挂载内容,所以还要创建etc/fstab文件,如下!!

     

    4创建etc/fstab文件

    这个文件控制mount命令的行为,在mount –a命令执行时。将读取这个文件中的配置挂载相应的内容。

    1. # device    mount-point    type        options    dum        fsck        order
    2. proc          /proc              proc        defaults   0     0 
    3. tmpfs               /tmp               tmpfs      defaults   0     0
    4. sysfs         /sys         sysfs       defaults   0     0
    5. tmpfs               /dev               tmpfs      defaults   0     0

    proc:Linux 内核提供了一种通过/proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

    Sys: sysfs 文件系统总是被挂载在 /sys 挂载点上. 这里sysfs文件系统是为了支持mdev。为了减少写入flash。将dev目录挂载为tmpfs使写入操作在内存中。

    在busybox运行mdev创建所有设备节点之前,init进程需要dev/console和dev/null设备节点:

    1. mknod dev/console c 5 1
    2. mknod dev/null c 1 3

     

    到此根文件系统所需的所有项就完成了!!!

    5 构建其他目录

    包括proc mnt tmp sys root。

    1. mkdir proc mnt tmp sys root

     

     

    三.挂接根文件系统

    1.如果要烧入Nand flash中运行,则制作为yaffs映像。制作yaffs的工具可以用已经编译好的文件,因为的源码包要打

     

    补丁才能制作出和内核匹配的映像。主要是生成oob数据区的位的问题。因为我手里有友善制作好的现成的二级制文件,

     

    512字节每页大小的Flash用mkyaffs2image 2K的用mkyaffs2image-128M,命令格式为

    mkyaffs2image(-128M) 要制作的根文件系统目录 将生成的文件 eg.mkyaffs2image-128M /home/smb/work/root_fs_mn    my_root.yaffs2

    如果利用uboot烧写yaffs文件系统。要使用nand.yaffs,当然uboot是添加好了支持yaffs烧写的功能。同时要注意写入数据的大小应是Nand flash 页大小的整倍数。

     

    uboot的bootargs参数中设置root=/dev/mtdblock3 。mtdblock3是和你的内核的mtd分区设置有关。改写内核

     

    arch/arm/mach-s3c2440/mach-mini2440.c文件中的 mtd_partition类型数组,可以设置mtd分区。

     

    2.如果以nfs挂载。

    PC端:

    (1).首先确保安装好了nfs功能。

    (2)在/etc/exports文件中配置nfs服务,内容如下:

    /home/smb/work/root_fs_mn  192.168.1.23(rw,sync,no_root_squash)

    说明:

    /home/smb/work/root_fs_mn 为要共享的路径

    192.168.1.23是接受连接的ip(这里可以是*,表示接受所有的IP连接)

    rw:读写权限.

    sync: 同步写入.

    no_root_squash:表示如果客户端端(开发板)是root权限的话,那么对于这个分享的目录来说,他就具有写权限。

    (3)重启nfs服务 /etc/init.d/nfs restart。

    此时可以自己本地挂接测试一下。mount-t nfs  主机ip:/home/smb/work/root_fs_mn 

     

    开发板端:

           如果是以uboot作为bootloader,给内核传递参数。则bootargs大致设置为:  

     bootargs=init=/linuxrc rootfstype=nfs root=/dev/nfs nfsroot=192.168.1.1:/home/smb/work/root_fs_mn  ip=192.168.1.23:192.168.1.1:192.168.1.50:255.255.255.0::eth0:off console=ttySAC0,115200

     其中192.168.1.1为PC端地址 192.168.1.23为嵌入式端地址

     关于nfsroot的设置说明可参见linux内核中的nfsroot.txt说明文档

  • 相关阅读:
    HDU 1698-Just a Hook
    HDU 1394 Minimum Inversion Number(线段树)
    HDU 4253-Two Famous Companies(二分+最小生成树)
    POJ 3279
    POJ 2251 Dungeon Master
    POJ1321 棋盘问题
    Charlie's Change POJ
    Coins —— POJ-1742
    sublime text主要快捷键列表
    根据电脑分辨率调整网站的布局
  • 原文地址:https://www.cnblogs.com/liulipeng/p/3386351.html
Copyright © 2011-2022 走看看