rootfs 制作
最小 根文件系统
(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 制作的更多相关文章
- linux rootfs制作
http://blog.sina.com.cn/s/blog_6795385f01011ifg.html 作一个嵌入式Linux rootfs,并且实现 web 服务 1. 文件系统简介 •理论上说一 ...
- 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作
过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...
- 制作自己的嵌入式Linux电脑_转
制作自己的嵌入式Linux电脑 http://os.51cto.com/art/201409/450334.htm 原文链接:http://blog.jobbole.com/75414/ 包含器件选择 ...
- BeagleBone Black的内核移植-从零开始制作镜像
很多年前做的针对BeagleBone Black开发板的镜像制作,因为当时涉及到非标准化的,所以把基本的kernel.uboot和跟文件系统rootfs都做了一遍,文中只做移植,不作定制化的修改. 如 ...
- Buildroot构建指南——根文件系统(Rootfs)【转】
本文转载自; 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大 ...
- 【系统移植】Android系统移植
$ . .. Device . SimulatorWhich would you like] Build type choices are. release . debugWhich ...
- 搭建Ubuntu12.04交叉编译服务器
最近在公司学着搭建一台Linux服务器作为交叉编译的主机之用,服务器端选择了Ubuntu12.04 LTS桌面版,客户端采用Windows XP平台,使用SSH工具软件putty登录到Linux主机, ...
- 编译Uboot——错误记录
我使用的是ZLG的EasyARM i.MX280A的开发板.官方提供的编译器时arm-fsl-linux-gnueabihf(gcc 4.4.4).自己尝试使用arm-linaro-linux-gnu ...
- Docker与自动化测试及其测试实践
Docker 与自动化测试 对于重复枯燥的手动测试任务,可以考虑将其进行自动化改造.自动化的成本在于自动化程序的编写和维护,而收益在于节省了手动执行用例的时间.简而言之,如果收益大于成本,测试任务就有 ...
随机推荐
- Docker OpenvSwitch 应用部署
Docker OpenvSwitch 应用部署 安装部署OVS并建立GRE隧道 节点1:192.168.1.198 容器网段:172.17.1.0/24 节点2:192.168.1.199 容器网段: ...
- nrm 安装与使用
1.使用 npm install nrm -global 全局安装 2.安装完成后使用 nrm ls命令查看其维护的镜像地址列表 3.* 星号表示在使用 npm下载资源的时候,默认使用的地址 这里需要 ...
- (转载)UnityShader学习笔记(七) 让贴图纹理动起来(河流瀑布特效、精灵序列帧实现)
大家好,我是Zander.这一章我们将使用纹理贴图实现动画.混合和真实特效来达到理想的效果. 纹理贴图可以使我们的着色器快速的实现逼真的效果,但是如果添加的纹理贴图过多,会非常影响游戏性能,特别是在移 ...
- HDU 6088 Rikka with Rock-paper-scissors(NTT+欧拉函数)
题意 \(n\) 局石头剪刀布,设每局的贡献为赢的次数与输的次数之 \(\gcd\) ,求期望贡献乘以 \(3^{2n}\) ,定义若 \(xy=0\) 则,\(\gcd(x,y)=x+y\) 思路 ...
- IdentityServer4中Code/Token/IdToken对应可访问的资源(api/identity)
{ OidcConstants.ResponseTypes.Code, ScopeRequirement.None }, { OidcConstants.ResponseTypes.Token, Sc ...
- Linux文件结构
/: 根目录,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. /bin: bin 就是二进制(binary)英文缩写.在一般的系统当中,都可以在这个目录下找到 ...
- $set()的正确使用方式
vue给对象新增属性,并触发视图更新 如下代码:给student对象新增age属性 data () { return { student: { name: '', sex: '' } } } 众所周知 ...
- Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...
- robot framework学习五——AutoltLibrary库
安装中遇到的问题: 安装好了AutoItLibrary,但是导入到RIDE后,仍然红色显示 搜索了下解决办法,说要安装下autoit-v3-setup.exe https://www.autoitsc ...
- js实现往数组中添加非存在的对象,如果存在就改变键值。
let arr = [] // 数组中元素数据类型为{name: 'bb', age: 12} // 现在需求是,将每次获得的新对象{name: '', age: }push到数组arr中,但前提是数 ...