最小 根文件系统 

(1)/dev/console(终端控制台, 提供标准输入、标准输出以及标准错误)

/dev/null (表示空设备终端, 所有写到这个文件中的数据都会被丢弃掉。)

(2)init进程的程序(也就是busybox,因为init程序位于busybox中,已经完成)

(3)/etc/inittab(用于init进程读取配置, 然后执行inittab里的指定应用程序)

(4)应用程序(被inittab配置文件调用的应用程序)

(5)C库(glibc,被应用程序调用的C库函数,比如:printf,strcmp,fopen等)

注:以下操作均是在/home目录下操作,实操前请注意修改path

1、创建终端文件(/dev/console 和 /dev/null)

  mkdir first_fs;cd  first_fs

  1.1查看pc /dev/console 和 /dev/null  

  ls /dev/console /dev/null -al
  crw------- 1 root root 5, 1 Feb 21 18:53 /dev/console
  crw-rw-rw- 1 root root 1, 3 Feb 12 22:08 /dev/null

  1.2参照pc 创建字符设备/dev/console 和 /dev/null

  mkdir dev;cd dev

  sudo mknod console c 5 1    //创建console字符设备, 5:主设备号 1:次设备号

  sudo mknod null c 1 3    //创建null 字符设备

  cd -

  

2、busybox已做好,所以init进程的程序也就做好了

3、构造/etc/inittab

  mkdir etc

  touch etc/inittab

  vi  etc/inittab

  输入

  console::askfirst:-/bin/sh      //action值必须小写  id可以写成/dev/xx或xx

  表示action= askfirst(每次启动/bin/sh进程之前等待用户按下enter键),然后指定/bin/sh的终端对应/dev/console字符设备

  

4、应用程序

  因为是最小根文件系统,所以用户程序可以先不制作。

5、安装 glibc lib(cross  compile lib)

  mkdir lib

  cd /home/gcc-3.4.5-glibc-2.3.6/arm-linux/lib     //进入源目录

  cp *.so* /home/first_fs/lib -d //复制glibc库到lib目录(*:匹配符,-d:保持链接)

6、完善系统(内核虚拟文件系统proc制作)

  它是通过proc虚拟文件系统挂接到proc目录,然后当前进程的信息会以文件的形式保存到proc目录

  以ps命令为例:

  mkdir proc                    //创建proc目录

  6.1 inittab配置文件中追加内容,避免手动mount挂载proc

  方法1:

  在inittab里追加内容:

  ::sysinit:/etc/init.d/rcS                  //将/etc/init.d/rcS脚本设置成系统的初始化文件

  

  创建etc/init.d/rcS文件

  mkdir -p etc/init.d

  vi etc/init.d/rcS              //添加一行命令(也可以添加其它命令)

  mount -t proc none /proc              //挂载proc(前提根文件系统有proc目录)

  sudo chmod +x etc/init.d/rcS                   //加上可执行权限使脚本rcS能够执行命令

  

  方法2:

  除了使用在rcS中添加mount -t proc non /proc命令

  也可以用mount -a  作用是加载文件/etc/fstab中配置的所有设备

  它会依赖一个配置文件/etc/fstab

  在inittab里追加内容:

  ::sysinit:/etc/init.d/rcS                  //将/etc/init.d/rcS脚本设置成系统的初始化文件

  

  创建etc/init.d/rcS文件

  mkdir -p etc/init.d

  vi etc/init.d/rcS, 添加一行命令

  mount -a      //加载文件/etc/fstab中配置的所有设备

  

  创建fstab文件

  vi  etc/fstab

  输入内容:

  #device mount-point type options dump fsck order
  proc /proc proc defaults 0 0

  

 7、完善系统——使用udev自动在/dev下创建设备节点

  在dev下只有2个字符设备(/dev/console /dev/null),如果大量增加设备的话,手动创建太麻烦,可以使用udev 自动创建/dev/设备节点。

  busybox 中mdev 是udev的一个迷你版, 它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能

  7.1 创建sysfs、devpts要挂载的目录

  mkdir   sys                     //创建sysfs要挂载的目录

  7.2、vi  etc /fstab,添加sysfs、tmpfs挂载内容:

  sysfs /sys sysfs defaults 0 0
  tmpfs /dev tmpfs defaults 0 0

  

  7.3  vi etc/init.d/rcS, 追加热拔插命令和配置/dev设备,添加内容如下:

  mount -a
  mkdir /dev/pts
  mount -t devpts devpts /dev/pts
  echo /sbin/mdev > /proc/sys/kernel/hotplug
  mdev -s

  

rootfs 制作的更多相关文章

  1. linux rootfs制作

    http://blog.sina.com.cn/s/blog_6795385f01011ifg.html 作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一 ...

  2. 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作

    过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...

  3. 制作自己的嵌入式Linux电脑_转

    制作自己的嵌入式Linux电脑 http://os.51cto.com/art/201409/450334.htm 原文链接:http://blog.jobbole.com/75414/ 包含器件选择 ...

  4. BeagleBone Black的内核移植-从零开始制作镜像

    很多年前做的针对BeagleBone Black开发板的镜像制作,因为当时涉及到非标准化的,所以把基本的kernel.uboot和跟文件系统rootfs都做了一遍,文中只做移植,不作定制化的修改. 如 ...

  5. Buildroot构建指南——根文件系统(Rootfs)【转】

    本文转载自; 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大 ...

  6. 【系统移植】Android系统移植

    $ . .. Device     . SimulatorWhich would you like] Build type choices are. release     . debugWhich ...

  7. 搭建Ubuntu12.04交叉编译服务器

    最近在公司学着搭建一台Linux服务器作为交叉编译的主机之用,服务器端选择了Ubuntu12.04 LTS桌面版,客户端采用Windows XP平台,使用SSH工具软件putty登录到Linux主机, ...

  8. 编译Uboot——错误记录

    我使用的是ZLG的EasyARM i.MX280A的开发板.官方提供的编译器时arm-fsl-linux-gnueabihf(gcc 4.4.4).自己尝试使用arm-linaro-linux-gnu ...

  9. Docker与自动化测试及其测试实践

    Docker 与自动化测试 对于重复枯燥的手动测试任务,可以考虑将其进行自动化改造.自动化的成本在于自动化程序的编写和维护,而收益在于节省了手动执行用例的时间.简而言之,如果收益大于成本,测试任务就有 ...

随机推荐

  1. 使用curl自动签到smzdm

    curl -H 'cookie:urcookies' -e 'http://www.smzdm.com/qiandao/' -k 'https://zhiyou.smzdm.com/user/chec ...

  2. freeswitch 显示主叫名称和主叫号码

    1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...

  3. 【Git】git error记录之 "unpacking the sent packfile failed on the remote"

    错误信息: error: cannot open .git/FETCH_HEAD: Permission denied unpacking the sent packfile failed on th ...

  4. Learning-Python【4】:Python流程控制与循环

    一.if...else分支 1.什么是if判断 判断一个条件如果成立则如何,不成立则如何 2.为何要有if判断 让计算机能像人一样具有判断能力 语法1:if...else if 判断条件: 代码块1 ...

  5. 【Visual Studio 扩展工具】使用 ComponentOne迷你图控件,进行可视化数据趋势分析

    概述 迷你图 —— Sparklines是迷你的轻量级图表,有助于快速可视化数据. 它们是由数据可视化传奇人物Edward Tufte发明的,他将其描述为“数据密集,设计简单,字节大小的图形.”虽然迷 ...

  6. 函数func_get_args详解

    func_get_args ------获取一个函数的所有参数 function foo() { $numargs = func_num_args(); //参数数量 echo "参数个数是 ...

  7. Codeforces 1064 D - Labyrinth

    D - Labyrinth 对于位置(i,j), j - c = R - L = const(常数), 其中R表示往右走了几步,L表示往左走了几步 所以R越大, L就越大, R越小, L就越小, 所以 ...

  8. SSH 远程登陆

    2019-03-10 20:41:39 一.什么是SSH 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登 ...

  9. Java原生API访问MongoDB

    1.pom.xml <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java ...

  10. nginx ----> 官网about页面(翻译)

    Nginx about链接:https://nginx.org/en/ nginx 基本的HTTP服务器功能其他HTTP服务器功能邮件代理服务器功能TCP / UDP代理服务器功能架构和可扩展性经测试 ...