zoukankan      html  css  js  c++  java
  • busybox(三)最小根文件系统


    title: busybox(三)最小根文件系统
    tag: arm
    date: 2018-11-14 17:57:08

    busybox(三)最小根文件系统

    引入

    busybox(一)浅析中,得出结论,一个最小的根文件系统需要以下几个元素

    dev/console
    dev/null 
    sbin/init-------------busybox提供,至少需要这个应用程序,这是linux启动的第一个应用程序
    etc/inittab-----------配置文件,定义了一些应用程序 
    配置文件制定的应用程序----配置文件指定的应用程序
    C库--------------------应用程序的C库
    

    构建终端

    首先来创建标准输入输出错误以及其他输出定位

    dev/console
    dev/null 
    

    查看下Linux下的这两个文件的属性

    
    book@book-desktop:~/stu/first_fs$ ls -l /dev/null /dev/console
    crw------- 1 root root 5, 1 2018-11-14 18:00 /dev/console
    crw-rw-rw- 1 root root 1, 3 2018-11-14 17:59 /dev/null
    

    这里插入一下,普通的ls -l文件信息如下,由此可以看到这两个文件是字符设备

    mark

    使用mknod来创建字符设备或者块设备,格式如下:

    mknod(选项)(参数)
    选项
        -Z:设置安全的上下文;
        -m:设置权限模式;
        -help:显示帮助信息;
        --version:显示版本信息。
    参数
        文件名:要创建的设备文件名;
        类型:指定要创建的设备文件的类型;
        主设备号:指定设备文件的主设备号;
        次设备号:指定设备文件的次设备号。
    

    创建设备

    mkdir dev
    cd dev
    sudo mknod console c 5 1
    sudo mknod null c  1 3
    
    book@book-desktop:~/stu/first_fs/dev$ ls -l
    total 0
    crw-r--r-- 1 root root 5, 1 2018-11-14 18:29 console
    crw-r--r-- 1 root root 1, 3 2018-11-14 18:35 null
    
    

    构造inittab

    如果不构造,会使用默认的配置项[参见 busybox(一)浅析],默认的路径在"/etc/inittab,参见busybox浅析

    ::CTRLALTDEL:reboot
    ::SHUTDOWN:umount -a -r
    ::RESTART:init
    ::ASKFIRST:-/bin/sh:
    tty2::ASKFIRST:-/bin/sh
    tty3::ASKFIRST:-/bin/sh
    tty4::ASKFIRST:-/bin/sh
    ::SYSINIT:/etc/init.d/rcS
    

    手动构造一个简单的脚本列表在etc下,将标准输入,输出,错误定位到console

    console::askfirst:-bin/sh
    
    mkdir etc
    vi etc/inittab
    

    配置应用程序

    我们在inittab并没有使用自定义的用户程序,也就不需要配置,跳过

    构建C库

    拷贝所有的.so文件,cp命令中使用-d的目的是:假设源文件为链接格式,那么cp的对象也是链接格式的,没有复制源文件.查看下我们当前的gcc目录,.a表示静态库不需要,使用-d来拷贝.cp命令浅析

    注意这里的源目录是在arm-linux/lib/

    book@book-desktop:~/stu/first_fs$ which arm-linux-gcc
    /work/tools/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc
    
    mkdir lib
    cp /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib/*.so*  lib -d
    

    制作映像文件yaffs

    这里使用yaffs2映像格式,工具包是yaffs_source_util_larger_small_page_nand.tar,这是老师制作好的工具,支持大页和小页的NandFlash.yaffs1支持小页格式(512字节),我们的NANDFLASH是2048字节,使用大页模式,使用yaffs2,可执行文件是mkyaffs2image

    tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 
    book@book-desktop:~/stu$ cd Development_util_ok/
    book@book-desktop:~/stu/Development_util_ok$ ls
    yaffs  yaffs2
    

    编译代码

    cd yaffs2/utils/
    make
    

    查看下工具mkyaffs2image

    
    book@book-desktop:~/stu/Development_util_ok/yaffs2/utils$ ls -l
    total 132
    -rw------- 1 book book  1770 2008-07-08 00:35 Makefile
    -rwxr-xr-x 1 book book 18266 2018-11-14 19:02 mkyaffs2image
    -rw------- 1 book book 19669 2008-07-08 00:36 mkyaffs2image.c
    -rw-r--r-- 1 book book  9412 2018-11-14 19:02 mkyaffs2image.o
    -rwxr-xr-x 1 book book 18126 2018-11-14 19:02 mkyaffsimage
    -rw------- 1 book book 16206 2008-02-29 10:26 mkyaffsimage.c
    -rw-r--r-- 1 book book  8168 2018-11-14 19:02 mkyaffsimage.o
    -rw------- 1 book book  6731 2008-02-29 10:26 nand_ecc.c
    -rw-r--r-- 1 book book  1776 2018-11-14 19:02 nand_ecc.o
    lrwxrwxrwx 1 book book    14 2018-11-14 19:02 yaffs_ecc.c -> ../yaffs_ecc.c
    -rw-r--r-- 1 book book  2496 2018-11-14 19:02 yaffs_ecc.o
    -rw------- 1 book book  1416 2008-02-29 10:26 yaffs_packedtags1.c
    -rw-r--r-- 1 book book  1216 2018-11-14 19:02 yaffs_packedtags1.o
    lrwxrwxrwx 1 book book    22 2018-11-14 19:02 yaffs_packedtags2.c -> ../yaffs_packedtags2.c
    -rw-r--r-- 1 book book  2160 2018-11-14 19:02 yaffs_packedtags2.o
    lrwxrwxrwx 1 book book    23 2018-11-14 19:02 yaffs_tagsvalidity.c -> ../yaffs_tagsvalidity.c
    -rw-r--r-- 1 book book   822 2018-11-14 19:02 yaffs_tagsvalidity.o
    
    

    貌似新的ubuntu中的工具over了,直接使用制作好的mkyaffs2image

    sudo cp mkyaffs2image /usr/local/bin
    sudo chmod +x /usr/local/bin/mkyaffs2image 
    

    直接输入mkyaffs2image查看帮助

    book@book-desktop:~/stu/Development_util_ok/yaffs2/utils$ mkyaffs2image
    mkyaffs2image: image building tool for YAFFS2 built Nov 14 2018
    usage: mkyaffs2image dir image_file [convert]
               dir        the directory tree to be converted
               image_file the output file to hold the image
               'convert'  produce a big-endian image from a little-endian machine
    
    

    制作映像,在当前目录生成yaffs2文件

    mkyaffs2image  first_fs first_fs.yaffs2
    

    使用dnw烧入,启动后输入回车然后有提示,这个和我们设置的脚本类型为askfirst,是一致的,等待回车后执行

    Please press Enter to activate this console. 等待输入回车
    
    starting pid 763, tty '/dev/console': 'bin/sh'
    
  • 相关阅读:
    JavaScript初学者应注意的七个细节
    8个高质量图标的最佳搜索引擎
    Adobe CS5 For Mac综合贴(2011/01/22更新)
    http://apps.hi.baidu.com/share/detail/18571966
    不要使用@import
    【leetcode】Search in Rotated Sorted Array
    【leetcode】Excel Sheet Column Title
    C#Tcp多个客户端与服务器数据与文件传输
    唯一分解定理
    欧拉函数
  • 原文地址:https://www.cnblogs.com/zongzi10010/p/10023717.html
Copyright © 2011-2022 走看看