ARM Linux根文件系统(Root Filesystem)的制作
ARM Linux根文件系统(Root Filesystem)的制作
2008年01月06日 星期日 22:28
http://xianzilu.spaces.live.com/blog/fakehandlerpage.aspx?wa=wsignin1.0
http://xianzilu.spaces.live.com/blog/cns!4201FDC93932DDAF!290.entry
关于根文件系统的制作,网络上有很多文章,大多数都只讲到建几个目录,然后用Busybox做个Shell,有很多关键的东西没有说。经过很长时间的摸爬滚打,我终于能够白手起家建立一个根文件系统了。其实我也不懂得原理,只是告诉大家我的作法,其中也不免有错误,欢迎大家指正。
首先介绍根文件系统的组成:目录、Shell、库、脚本,一个个来。
目录
根文件系统要包含这些必须有的目录:/dev、/bin、/usr、/sbin、/lib、/etc、/proc、/sys
/dev是devfs(设备文件系统)或者udev的挂在点所在。在使用devfs的内核里如果没有/dev,根本见不到Shell启动的信息,因为内核找不到/dev/console;在使用udev的系统里,也事先需要在/dev下建立console和null这两个节点。关于devfs和udev的区别,网上很多文章说。当然如果你的内核已经不支持devfs了(2.6.12以后),可以使用纯纯的静态节点。也就是用mknod人工生成。
/bin、/usr/bin、/usr/sbin、/sbin是编译Busybox这个Shell时候就有的,用于存放二进制可执行文件,就不多解释了。
/lib用于存放动态链接库。网上很多文章都说静态编译Busybox,可以省去建库的麻烦过程。这样做只能让Busybox启动,我们自己写的,或者是编译的软件包还是需要动态库的。除非全部静态编译,你可以试试,一个Hello world就要几百k。关于库的内容后面仔细说。
/etc是用来存放初始化脚本和其他配置文件的。关于初始化脚本的内容后面仔细说。
/proc是用来挂载存放系统信息虚拟文件系统——“proc文件系统”,“proc文件系统”在内核里面可以选。如果没有“proc文件系统”,很多Shell自己的命令就没有办法运行,比如ifconfig。“proc文件系统”不像devfs可以自动挂载,它需要使用初始化脚本挂载。另外,udev也需要“proc文件系统”的支持。
/sys用于挂载“sysfs文件系统”,“sysfs文件系统”在内核里面可以选。目前我认为它就是给udev提供支持的,呵呵。“sysfs文件系统”也需要使用初始化脚本挂载。
另外还可以有/tmp、/mnt、/swp、/var这样的不是嵌入式系统必须的目录,在说完Shell的制作之后,我
相关文档:
tty是Teletype的缩写
终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写。Teletype是最早出现的一种终端设备,很象电传打字机,是由Teletype公司生产的。设备名放在特殊文件目录/dev/下,终端特殊设备文件一般有以下几种:
1.串行端口终端(/dev/ttySn)
串行端口终 ......
高手进阶 Linux系统下MTD/CFI驱动介绍
2007-06-16 04:00作者:出处:论坛整理责任编辑:原野
某些Intel的FLASH芯片(如StrataFlash系列)支持多分区,也就是各个分区可以同时进行操作。应该说这是不错的特性,但是也会带来些问题。记得当初移植Linux-2.4.21,挂JFFS2文件系统的时候,经常会报一些"Magic bitm ......
这里提到的块设备泛指各种可以实现固定大小数据随机传输的设备,如FLASH、SD Card、RAMDISK等,块设备驱动移植的过程实际上是将硬件厂商提供的底层驱动代码与LINUX系统集成起来的过程。
在LINUX中,块设备能够以文件系统的形式为OS所访问,其大体架构如下:
LINUX Application
---------------------------------- ......
六、另类风格的makefile
即然我们的make可以自动推导命令,那么我看到那堆[.o]和[.h]的依赖就有点不爽,那么多的重复的[.h],能不能把其收拢起来,好吧,没有问题,这个对于make来说很容易,谁叫它提供了自动推导命令和文件的功能 呢?来看看最新风格的makefile吧。
objects = main.o kbd.o command.o ......
在fcd的项目中,使用vim作为ide。那么cscope可以帮助vim扩展类似于函数、对象的查找、交叉引用查询等功能。
命令行为:
cscope -Rbkq
生成当前目录下cscope.out文件信息,保存着交叉引用的信息。
vim中,cscoup使用:
cs add cscope.out
然后查找:
cs find s 要查找的名称
其中s处可以是:
......