MyException - 我的异常网
当前位置:我的异常网» 系统运维 » Linux内核驱动学习(2)-根文件系统的构成 (root fi

Linux内核驱动学习(2)-根文件系统的构成 (root filesystem)

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
Linux内核驱动学习(二)----根文件系统的构成 (root filesystem)

1、建立根文件系统目录和文件

1.1创建目录

1.2创建设备文件(命令mknod);必须创建设备文件---consle\null

1.3创建配置文件---复制已有的/etc目录下的文件


1.4添加内核模块
进入Linux内核目录下,(注意,应该先编译内核,即命令make uImage ARCH=arm  CROSS_COMPILE=arm-linux-)

1.4.1、编译内核模块---命令 make modules ARCH=arm CROSS_COMPILE=arm-linux-


1.4.2、将编译好的内核模块集中到一起,并将其放置到新建文件系统目录下/rootfs-->
命令 make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs


1.5编译/安装busybox(含有Linux下的执行命令)
1.5.1、配置busybox
make menuconfig 
主要配置的选项有
**Busybox Settings ->build Options->
选中 “build busybox as a static binary”,静态链接
cross compiler prefix (arm-linux-)  ,编译交叉工具链

**Busybox Settings ->Installation Options -> 
选中“donot use /usr”,,选中该项可以避免busybox被安装到宿主系统的/usr目录下,破坏宿主系统
busybox installation prefix(/xxx/rootfs)  该选项表明编译后的busybox的安装位置

1.5.2、编译、安装
编译命令: make
安装: make install
安装后的效果 /xxx/rootfs/bin目录下多出了许多命令




2、挂载根文件系统到内核


2.1关于文件系统介绍及分类

根据存储设备的硬件特性(NOR Flash? nandflash?)、系统需求(可读可写? 只读?),且不同的文件系统类型有不同的应用场合。
2.1.1、基于nandflash的文件系统
a>yaffs2主要用于nand型flash,支持跨平台。
b>ubifs
以上两种均为可读可写的文件系统

2.1.2、基于norflash的文件系统
a>Jffs2(可读可写)
主要用于nor型flash,特点是可读写,支持数据压缩的日志型文件系统。

2.1.3、基于内存的文件系统
a>Ramdisk
基于ram的文件系统。是将一部分固定大小的内存当做块设备来用。它并非是一个实际的文件系统,而是一种将实际的文件系统装入内存的机制。将一些经常访问而又无需更改的文件通过ramdisk放在内存中,可以明显的提高系统的性能。
b>Initramfs(现在多使用,启动系统非常快,缺点:不可保存用户数据)
基于ram的文件系统。initramfs出现在2.6内核中,它类似于tmpfs,是一种基于内存的文件系统,它的使用不需要创建内存块设备。增加文件到ramfs会自动配置更多的内存,并删除或截去文件以释放内存。(若ramdisk没有满,已被占用的额外的内存也不能用来做其它事情,若ramdisk满了,但其它仍有闲置的内存,也必须重新格式化以后才能扩展使用)

2.1.4、基于网络的文件系统
a>NFS(主要在开发阶段使用)
是由sun开发的一种在不同机器之间通过网络共享文件的技术。在嵌入式linux系统的开发调试阶段,可以利用该技术在主机上建立基于nfs的根文件系统,挂载到嵌入式设备,可以很方便的修改根文件系统的内容。
实际使用时可使用混合操作系统。。利用各个文件系统的优势。

2.2使用Initramfs 文件系统

Initramfs 文件系统是与内核固定在一起的,修改文件系统中的内容后不会立即生效,需重新编译内核。(在建立好的文件系统下操作 /xxx/rootfs/)

2.2.1、执行命令(建立软链接的原因:initramfs文件系统启动时会在根文件系统中执行第一个init程序,它对uboot传过来的参数init=/linuxrc不予理睬,所以需要在制作的根文件系统里的根目录加入init程序,否则无法启动。init程序和linuxrc程序一样都是符号链接文件,它们都是指向/bin/busybox程序。)
ln -s ./bin/busybox init

2.2.2、配置Linux内核,支持initramfs   如下图



2.2.3编译内核

2.2.4、设置uboot环境变量(传给内核的启动参数)
setenv bootargs noinitrd console=ttySAC0,115200

2.2.5、在uboot命令行下可以查看其文件系统的内容,如下



2.3使用NFS文件系统

(相对于Initram文件系统,在nfs服务器上修改文件系统内容时,在开发版会立即生效。。而Initramfs文件系统需要重新编译内核,即静态编译)
2.3.1、取消在制作Initram文件系统的以下选项

2.3.2、**file systems-->Network File Systems--->Root file system on nfs选中该选项


2.3.3、编译内核

2.3.4、启动参数配置(uboot 中)
setenv bootargs noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.112:/home/kindlyde/Desktop/arm-5/lesson4/rootfs ip=192.168.1.130:192.168.1.112:192.168.1.1:255.255.255.0:  :eth0:off


noinitrd :
console=ttySAC0,115200 :串口,波特率//错误:console写成了consoles,,造成信息出现在开发版上。。串口中没出现
init=/init 
root=/dev/nfs :nfs作为根目录:----》但在Linux系统中或制作的文件系统中均未发现此根目录??
rw :可读可写
nfsroot=192.168.1.112:虚拟机IP(NFS服务器地址)
:/home/kindlyde/Desktop/arm-5/lesson4/rootfs 创建的文件系统路径
ip=192.168.1.130:(开发板的IP)
192.168.1.112(NFS服务器地址)
:192.168.1.1(网关地址)
:255.255.255.0(掩码地址)
:(开发板的主机名,未取名,所以为空)
:eth0:off

2.3.5、将内核通过tftp下载到开发板中,之后启动开发板。结果如下图所示



注意事项以及实现系统挂载时出现的错误:

需同时设置NFS服务器的主目录地址(/etc/exports)---设计详见笔记--《配置NFS服务器》




使用NFS服务器挂载文件系统时;
出现如下错误:Unable to mount root fs via NFS, trying floppy.

出错原因:
1、在下载内核的后启动内核而出现的这个问题,那么就是下载内核之前设置引导参数的时候没有设置正确,可能是nfs的解压路径不正确,

2、NFS的目录内容改变了。。解决方法:重启NFS服务

3、查看nfs服务器是否配置正确。。如下



学习博客:http://blog.csdn.net/suiyuan19840208/article/details/7246390

文章评论

当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
编程语言是女人
编程语言是女人
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
我的丈夫是个程序员
我的丈夫是个程序员
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
漫画:程序员的工作
漫画:程序员的工作
中美印日四国程序员比较
中美印日四国程序员比较
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
代码女神横空出世
代码女神横空出世
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
 程序员的样子
程序员的样子
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员必看的十大电影
程序员必看的十大电影
旅行,写作,编程
旅行,写作,编程
10个调试和排错的小建议
10个调试和排错的小建议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
老程序员的下场
老程序员的下场
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Java程序员必看电影
Java程序员必看电影
为什么程序员都是夜猫子
为什么程序员都是夜猫子
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
鲜为人知的编程真相
鲜为人知的编程真相
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员都该阅读的书
程序员都该阅读的书
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员和编码员之间的区别
程序员和编码员之间的区别
每天工作4小时的程序员
每天工作4小时的程序员
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有