首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» 嵌入式根文件系统的构建
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
嵌入式根文件系统的构建
发短消息
加为好友
苹果也疯狂
当前离线
UID
852722
帖子
10369
精华
0
积分
5185
阅读权限
90
在线时间
277 小时
注册时间
2011-8-30
最后登录
2016-7-18
论坛元老
UID
852722
1
#
打印
字体大小:
t
T
苹果也疯狂
发表于 2015-8-18 10:34
|
只看该作者
嵌入式根文件系统的构建
windows
,
嵌入式
,
初学者
,
操作系统
,
Linux
我将从一个初学者的视角,全面的介绍根文件系统的构建,力求最通俗,最易懂,最简洁。
首先我们来了解一下什么叫做根文件系统
一,什么叫根文件系统
用一句话来讲就是"操作系统提供给用户的一个接口",比如说windows,你要是没有C盘,D盘之类的构架,你程序怎么存入硬盘?你如何操作硬盘数据?进程如何从硬盘读取数据?
Linux操作系统更能体验接口这个概念,因为他把所有的设备都虚拟成一个文件,对设备的操作就是对文件的操作。在Linux中如果没有文件系统的话,用户就和操作系统的交互就断开了,我们无法通过shell要求操作系统执行各种命令,也无法运行各种程序。
更细致的来说根文件系统,它其实包括管理目录和数据的方法和文件•目录的组织方法,及所有文件和目录构成一个根文件系统
根文件系统有很多种种类,最常用的有
MS-DOS的FAT32
Linux发行版经常用的ext3 etx4
嵌入式经常用的ramfs yaffs
不同的种类的根文件系统有不同组织文件的方法和数据的组织方法。如想了解的更深入点,去查百度百科。
二linux根文件目录结构
所有Linux的遵循一个文件系统标准叫"FHS"(filesystem hierarchy standrad),
http://www.pathname/
该网站可以看
通常一个Linux文件系统应该如下
/dev device的简写,意思是这个目录存放的全部是设备文件,linux将所有设备都抽象成文件放在这个目录,通过对文件的操作就可以控制设备,比如说硬盘,一般是sda打头的,可以通过 mount /dev/sda /mnt来挂载硬盘
/root 这个是系统管理员专用的目录,这里存放了一些引导系统的备份文件,文件系统挂载信息,系统修复工具备份工具等
/usr 这个目录存放的是共享、只读的程序和数据。
/var variable的简写,存放的是一些可变的数据,日志文件,临时文件什么的
/home 家目录,大家用过Linux应该都知道这个目录是干嘛的,这个目录相当于windows的我的文档,一般工作都在这个目录里进行。
/proc这是一个空目录,不过系统跑起来之后就不是空的了,里面的目录文件都是由系统生成的,但他并不在物理存储设备上有数据,是系统在内存上构建的,所有是个虚拟的家伙。里面包含了一些系统信息,cpu信息什么的
/bin 存放的普通命令的可执行文件
/sbin 存放的是系统命令的可执行文件
/etc 存放了很多配置文件,比如系统初始化脚本,挂载文件的配置文件等等
/boot 存放的是系统的bootloader和内核及其配置文件,一般嵌入式系统不需要这个目录,因为嵌入式bootloder都是单独放的一个分区
/lib 系统的库文件
/initrd 这个目录是空的,用来启动时挂载initrd.img镜像的,initrd.img镜像也是一种根文件系统,一般发行版得linux使用两阶段挂载根文件系统,第一次阶段使用initrd.img根文件系统,根文件直接在内存里运行,速度快,然后挂载硬盘上的根文件系统,这样可以加快速度,嵌入式一般不需要这个目录。
/tmp 临时文件目录
/mnt 临时挂载点
三,yaffs2文件系统的构建
Yaffs2能很好的支持flash,在嵌入式领域应用广泛,所以我们选择yaffs2
1 首先我们要根据需要创建一个根文件系统框架
参考上面的目录结构,我们不需要的是boot,initrd这两个目录,并增加一个sys目录,这个sys目录是busyBox的一个支持热拔插的程序mdev需要的目录
首先建一个总目录我命名为root_fs,然后建立好子目录
mkdir root_fs
cd root_fs
mkdir bin dev etc home lib mnt proc root sbin sys tmp
2 安装好busybox
进入busybox目录
Make menuconfig
进入busybox setting->
Build options->
选中 build busybox as a static binary和bulid with lager file support选项
表示使用静态库编译,支持大文件
再进入 busybox library tuning
选中vi-style line editing commands和fancy shell prompts设置命令行风格
然后编译,
Make
安装 make install
然后拷贝安装目录 _install下的所有文件 到我们先前建的root_fs目录下
cp _install/* ../root_fs -rf
3 在dev目录下创建两个设备节点
mknod console c 5 1
mknod null c 1 3
这两个是系统运行第一个初始化进程必需要使用的使用的俩个设备
C表示字符设备 再后面是主设备号和次设备号 用来指示操作系统找到驱动的
拷贝busybox的实例配置文件到etc下面
Cp ../busybox-1.15/examples/bootfloopy/etc/* ./
这里面有四个文件
Fstab init.d inittab profile
Busybox构建的根文件系统启动流程是这样的,先根据命令行参数init=linuxrc
启动linuxrc程序
Linurc根据inittab配置文件来启动相应的脚本或进程
Inittab格式:<id>::<runlevels>:<action>:<process>
现在我们修改inittab如下
这表示
运行的rcS脚本,运行级别为sysinit,该脚本要使用使用控制台
运行shell解释器,运行级别为askfirst,该进程要使用串口一
这个名字是由busybody产生的,s3c2410 s3c2440都是这个名
运行umount -a -r当按下ctr alt del组合键的时候
这里可以看到linuxrc通过inittab启动了rcS脚本
现在我们修改init.d目录下的rcS文件为
这文件是先设置PATH变量
再设置runlevel 和 prelevel变量
Mount -a会根据fstab挂载目录,修改fstab如下
挂载所需的文件系统
然后设置文件默认属性
然后挂载devpts文件系统 这个是用来支持外部网络链接虚拟中端得
重定向mdev输出到内核的hotplug文件来支持热拔插
运行mdev -s在/dev目录下生成内核支持的所有设备文件
从HOSTNAME文件读取主机名
所以
在/dev/下创建sysconfig目录再在此目录下创建HOSTNAME文件
修改HOSTNAME文件为JustDo
最好
修改profile
这是你登陆命令解释器的配置文件,他能够改变你命令行前面显示的内容
/W是当前目录名
最后一步:将所需的库文件全部拷贝到lib目录下,这个库文件在你所使用的交叉工具链中
cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/* ./lib
好了 完成上面所有的步骤之后
使用mkyaffs2image工具编译好之后下载到开发板的根文件分区就可以跑了
如果出现
"Failed to execute /linuxrc. Attempting defaults...
Kernel panic - not syncing: No init found. Try passing init= option to kernel. "
有可能是你使用的mkyaffs2image工具不支持128M的flash
我的另外一篇博客已经提到怎么解决了
综上 系统启动的流程大概是这个样子的到处必要的环境变量,Mount上所需的分区,最后运行脚本解释器
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议