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中写入的东西嘛!

  • 相关阅读:
    关于js计算非等宽字体宽度的方法
    [NodeJs系列]聊一聊BOM
    Vue.js路由管理器 Vue Router
    vue 实践技巧合集
    微任务、宏任务与Event-Loop
    事件循环(EventLoop)的学习总结
    Cookie、Session和LocalStorage
    MySQL 树形结构 根据指定节点 获取其所在全路径节点序列
    MySQL 树形结构 根据指定节点 获取其所有父节点序列
    MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
  • 原文地址:https://www.cnblogs.com/-glb/p/7086815.html
Copyright © 2011-2022 走看看