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

    在构建根文件系统之busybox中,我们已经实现了配置,编译,安装busybox。即那个init程序的来源。

    首先在pc看一下,/dev/console  和/dev/null的具体信息:

    执行ls /dev/console  /dev/null

    crw------- 1 root root 5, 1 6月 27 08:06 /dev/console   //字符设备 ,主设备号为5,次设备号为1
    crw-rw-rw- 1 root root 1, 3 6月 27 08:06 /dev/null   //字符设备,主设备号为1,次设备号为3

    切换到/work/nfs_root/first_fs目录下,创建/dev/console  /dev/null

    mknod  console  c 5 1

    mknod  null   c  1 3

    这样就完成了console和null设备的创建。

     

    接下来再处理/etc/inittab,你如果不去创建的话,它就会使用默认的配置项。在默认的配置项中,有很多都是我们不需要的,因此需要我们自己处理这个配置项。

    首先创建dev目录,接下来创建配置文件inittab。加入这条信息:

    console ::askfirst:-/bin/sh    //执行时机:askfirst     执行程序或脚本: /bin/sh   标准输入、标准输出、标准错误定位到console中。

     

    接下来安装glibc库

    在我们制作交叉编译工具链arm-Linux-gcc时,已经生成了glibc库,可以直接使用它来构建根文件系统,本文使用的时光盘里自带的压缩库,是arm-linux-gcc3.4.5版本的glibc库。

    如果用arm-linux-gcc是4.3.2的,可不可以使用呢?我试验过:

    1、用arm-linux-gcc -4.3.2,然后将其里面的所谓的glibc库拷到了/work/nfs_root/first_fs/lib,这样根文件系统起不来。

    2、用arm-linux-gcc -4.3.2,,将arm-linux-gcc-3.4.5-glibc-2.3.6.tar中的所谓的glibc库拷到了/work/nfs_root/first_fs/lib,这样根文件系统起不来。

    分析以上情况,是因为glibc库出现了问题。最好索性用的是韦老大制作好的arm-linux-gcc-3.4.5-glibc-2.3.6.tar,成功了。

    在开发板上只需要加载器和动态库,构建的根文件系统的目录为/work/nfs_root/first_fs,操作如下:

    mkdir  -p  /work/nfs_root/first_fs/lib  

    cd  ~/work/gcc-3.4.5-glibc-2.3.6/arm-linux/lib   //每个人存放的位置是不同的。

    cp *.so.*  /work/nfs_root/first_fs/lib -d  注意-d表示,如果本来是一个链接文件,让它保持链接文件

    如果要创建目录A并创建目录A的子目录B,没有用-p的情况下是mkdir 2次

    如果用-p 可以直接创建2个目录 mkdir -p 目录A/子目录B就可以

     

    这样一个最小的文件系统就做好了,怎么把它弄到开发板上呢?需要做一个映像文件。

    所谓制作文件系统的映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这个文件可以直接烧写到存储设备上去。当系统启动后挂接这个设备,就可以看到与原来目录一样的内容。

    怎样做一个映像文件?制作yaffs2的映像文件

    将光盘中的yaffs_source_util_larger_small_page_nand.tar拷贝到~/work目录下

    tar  -xjf yaffs_source_util_larger_small_page_nand.tar   解压得到Development_util_ok,

    cd Development_util_ok/yaffs2/utils

    执行make命令生成mkyaffs2image工具,将其复制到/usr/local/bin目录

     cp mkyaffs2image /usr/local/bin

    加上可执行权限:chmod  +x  /usr/local/bin/mkyaffs2image

    注意:在编译遇到错误时,切换到root权限下试试 

    cd /work/nfs_root目录

    sudo mkyaffs2image first_fs  first_fs.yaffs2

     将first_fs.yaffs2烧到开发板上,我这里用的是tftp

    tftp 30000000  first_fs.yaffs2

    nand  erase  root

    nand  write.yaffs  30000000  0x260000 $(filesize)

    然后重启开发板,你会看到如下的内容:

    Please press Enter to activate this console. 

    然后按下enter键,你又会看到:

    starting pid 763, tty '/dev/console': 'bin/sh'
    #

    这不就是我们在etc/inittab中写入的东西嘛!

  • 相关阅读:
    全选、全不选、反选
    IE Tester 怎样使用firebug 调试工具?
    策略模式
    模板方法模式
    迭代器模式——android中使用
    android 实现圆形波纹动画
    android 窗口的使用
    AlertDialog 基本使用
    国外android 网站
    ViewDragHelper 任意拖动
  • 原文地址:https://www.cnblogs.com/-glb/p/7086815.html
Copyright © 2011-2022 走看看