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文件信息如下,由此可以看到这两个文件是字符设备

使用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'

busybox(三)最小根文件系统的更多相关文章

  1. 移植busybox构建最小根文件系统

    Busybox:瑞士军刀,里面装有很多小命令. STEP 1:构建目录结构  创建根文件系统目录,主要包括以下目录/dev  /etc /lib  /usr  /var /proc /tmp /hom ...

  2. 运用busybox构建最小根文件系统

    平台:vmware下ubuntu14.04前期准备:安装交叉编译环境arm-linux-gcc-4.5.1;下载完成BusyBox 1.23.2一.busybox构建1.make menuconfig ...

  3. 使用BusyBox制作Linux根文件系统

    STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录/dev  /etc /lib  /usr  /var /proc /tmp /home /root /mnt /bin  /sbin  ...

  4. ROS学习(三)—— ROS文件系统

    一.预备工作 使用ros0tutorials程序包,先下载: sudo apt-get install ros-<distro>-ros-tutorials 其中<distro> ...

  5. Linux磁盘及文件系统(三)Linux文件系统

    一.文件系统的组成 Linux常见的文件系统类型有ReiserFS,ext2,ext3,ext4,vfat,XFS等,文件系统是对一个存储设备上数据和元数据进行组织的机制.他的最终目的是把大量数据有组 ...

  6. 使用BusyBox制作linux根文件系统(CramFS+mdev)

    转:http://www.360doc.com/content/10/0428/11/496343_25245348.shtml 操作系统:Ubuntu9.04 内核版本:linux-2.6.24.7 ...

  7. hadoop(三)HDFS 文件系统

    Hadoop 附带了一个名为 HDFS(Hadoop 分布式文件系统)的分布式文件系统,专门 存储超大数据文件,为整个 Hadoop 生态圈提供了基础的存储服务. 本章内容: 1) HDFS 文件系统 ...

  8. mini2440 最小根文件系统制作和nfs启动

    mini2440 内核启动后,可以用busybox制作一个简单的根文件系统并用nfs来启动该文件系统 启动mini2440, 按任意键进入uboot,按q键进入uboot命令行: 执行以下命令: se ...

  9. Linux移植到自己的开发板(三)根文件系统

    @ 目录 1 Linux内核配置 2 ramdisk制作 3 busybox配置 4 genext2fs生成镜像 为了快速调试,采用ramdisk进行根文件系统测试.要使内核能挂载ramdisk根文件 ...

随机推荐

  1. 20181112-PostgreSQL数据库dmp文件导入(记录一次数据导入)

    20181112-PostgreSQL数据库dmp文件导入 标注:dmp文件导入,场景:多个schema导入 1. 环境准备: postgres集群master节点上,postgres用户执行以下操作 ...

  2. oracle 10g函数大全--日期型函数

    sysdate [功能]:返回当前日期. [参数]:没有参数,没有括号 [返回]:日期 [示例]select sysdate hz from dual; 返回:2008-11-5 add_months ...

  3. 自动化测试之路3-selenium3+python3环境搭建

    1.首先安装火狐浏览器  有单独文章分享怎么安装 2.搭建python环境 安装python,安装的时候把path选好,就不用自己在配置,安装方法有单独文档分享 安装好以后cmd打开输入python查 ...

  4. windows下安装mysql数据库修改端口号

    Window版本 卸载原本的mysql sc delete MySQL //删除mysql 1.下载 1 2 3 MySQL   https://dev.mysql.com/downloads/ins ...

  5. WebRtc编译好的vs2015源码

    一直想看webrtc的源码,苦于FQ能力有限且整个编译过程耗时巨大,故求助于互联网.在互联网寻找许久编译好的Webrtc源码,好多版本下载下来总是报各种错误,很是失落. 皇天不负有心人,终于寻得一版可 ...

  6. 【Python 20】BMR计算器4.0(异常处理)

    1.案例描述 基础代谢率(BMR):我们安静状态下(通常为静卧状态)消耗的最低热量,人的其他活动都建立在这个基础上. 计算公式: BMR(男) = (13.7*体重kg)+(5.0*身高cm)-(6. ...

  7. Python开发【第一篇】基础题目一

    1.求1-2+3-4+5.....99的所有数的和 n = 1 s = 0 while n<100: temp = n%2 if temp == 0: #偶数 s = s-n else: s = ...

  8. java程序启动 环境属性的获取

    System.getProperties().list(System.out); 如果要获取某一个属性,例如常见的“操作系统” 则  System.getProperty("os.name& ...

  9. 关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转

    情景: 在进行正常页面跳转操作后(页面A跳转到页面B),点击浏览器的左上角的‘后退’按钮,点击后,可以看到url地址已经发生了变化(url由页面B变为页面A),hash值也已经是上一页的路由,但是浏览 ...

  10. c# 小数四舍五入,向上取整,向下取整,见角进元保留多个小数位数

    /// <summary> /// 实现数据的四舍五入法 /// </summary> /// <param name="v">要进行处理的数据 ...