linux移植文件系统.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《linux移植文件系统.docx》由会员分享,可在线阅读,更多相关《linux移植文件系统.docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如果Linux是你每天必用的工作平台,应该已经熟悉以上提到的目录了。不过,现在 让我们来进一步检查嵌入式Linux系统如何使用这些典型的根文件系统内容。首先,为多用户提供可扩展的所有目录(如/home、/mnt、/opt、/root)都应该省略。 调整根文件系统的时候,我们甚至可以进一步移除/mnt/和/var ,不过这么做可能会危 害到某些软件的运行。因此不建议采用这种过于简化的做法。根据引导加载程序和它的配置情况,可能不需要/boot目录。这取决于引导加载程序是否 会在内核被启动之前从根文件系统取回内核映像。在此我们可以不要,日后如果觉得有此需 要,还可以重新设计根文件系统。其余的目录,/
2、bin、/dev、/etc、/lib、/proc、/sbin和/ usr ,都是不可或缺的。极端情况下我们还可以省略/proc ,因为它只能用来安装与其同名的虚拟文件系统。然而 这么做之后,如果需要实地分析目标板,将会很难了解目标板发生了什么事。如果为了缩减 存储空间,可能会将内核设定成不支持/proc,但是还是建议尽可能启用此功能。/usr和/var这两个顶层目录与根目录非常像,有自己的目录结构。在接下来的步骤中, 当我们在摆放这两个目录的时候,将会简述它们的目录结构。令人困惑的相似性根文件系统最令人困惑的一点就是有些目录看起来具有类似的用途。尤其是,新手常会问、 不同目录包含的二进制文件,
3、以及不同目录包含的链接库,有何差异。在根文件系统上,存放二进制文件的目录主要有四个:/bin、/sbin、/usr/bin和/usr/sbin。 二进制文件要放在其中哪个目录,这与它在系统中所扮演的角色有很大的关系。如果这是用 户和系统管理员必备的二进制文件,就会放在/bin o如果这是系统管理员必备、但是一般 用户根本不会用到的二进制文件,就会放在/sbin o相对而言,如果不是用户必备的二进 制文件,多半会放在/usr/bin ;如果不是系统管理员必备的工具,多半会放在/usr/bin。 至于链接库的摆放位置,也是同样的道理。系统引导以及执行最基本命令需要的链接库摆在 /lib o所有其他
4、的链接库则会摆在/usr/lib。通常,套件安装时,会在/usr/lib中产生子 目录,以便摆放它自己的链接库。以Perl 5.x为例,它会产生/usr/lib/perl5目录,里面 摆放的都是与Perl有关的链接库和模块。回过头来看看自己使用的Linux工作站,可以从它的根文件系统看到,发行套件设计者应 用这些标准的实际范例。为了建立根文件系统,我们可以建立以下目录:rootBinnary # mkdir rootfsrootBinnary #cd rootfs现在我们可以针对系统的需要建立根文件系统的顶层目录:rootBinnary rootfs #mkdir bin dev etc li
5、b proc sbin tmp usr var rootBinnary rootfs #chmod 1777 tmp请注意:我们并未建立/boot。如果日后需要再建立也不迟。同时请注意,我们变更了 /tmp目录的使用权,让它开启sticky位,为/tmp目录的使用权开启此位,可确保 /tmp目录底下建立的文件,只有建立它的用户有权删除。嵌入式系统多半是单用户系统, 不过有些嵌入式应用一定不能用root的特权来执行,因此需要遵照根文件系统权限位的一 些基本规定。如OpenSSH套件便属于此类应用。接着我们可以建立/usr的目录结构:rootBinnary rootfs # mkdir usr/b
6、in usr/lib usr/sbin在一个全功能的根文件系统上,/usr目录通常会包含更多条目。你只要在自己的工作站上 键入Is -al /usr这个命令就能够展示这样的简单范例。你将会发现如man、src和 local等这样的目录。FHS中有一节专门探讨此目录的布局。然而,以大多数嵌入式Linux 系统的用途来说,上面所建立的这三个目录已经够用了。最后我们可以建立/var的目录结构:rootBinnary rootfs # mkdir var/lib var/lock var/log var/run var/tmp rootBinnary rootfs #chmod 1777 var/tm
7、p同样地,此目录通常会包含更多的条目。尽管cache、mail和spool等目录对工作站 或服务器来说很有用,但是嵌入式系统多半不需要这些目录。我们建立的目录必须符合能 够让嵌入式Linux系统上可以找到的大多数应用程序正常运行这个最起码的要求。当然, 如果需要Web服务或打印功能,那么你或许会想要加入额外的目录,以符合应用程序提 供功能的需要。FHS和应用程序提供的文档可以找到实际需求。装备好根文件系统的骨架之后,让我们将各软件组安装到正确的位置上去。以不同的根文件系统结构来执行Linux正如前所说,可以在FHS中找到建立根文件系统的规则。尽管大多数的Linux应用和发 行套件都会遵照这些规
8、则,但是Linux内核本身并未强制实施这些规则。事实上,内核源 码与根文件系统结构的几乎没有什么关联。它让你可以使用截然不同的根文件系统结构来建 立嵌入式Linux系统。然后你必须修改大多数软件套件的默认值,以便与新的结构相符。 有些人甚至采取更极端的做法,建立完全没有根文件系统的嵌入式Linux系统。我会建立 你别这么做。以上描述的根文件系统的规则,是开放源码和自由软件所有开发者一致奉告的 原则。如果使用其他规则来建立嵌入式Linux系统,无疑将自己排斥在大多数的开放源码 和自由软件套件有以及它们的开发者之外。设备文件依照Unix的传统,在Linux系统中任何对象都可以视为文件。在Linux
9、根文件系统中, 所有的设备文件(也称为设备节点)都放在/dev目录里。对各种可能的系统变体来说,大 多数的工作站和服务器发行套件为/dev目录附带了内容,这个数目超过了 2000套。因 为嵌入式Linux系统是个定制的的系统,所以目标板的/dev目录里并不需要像Linux 工作站和服务器那样填入那么多条目。事实上,只需建立让系统正常操作的必要条目即可。 如果手上没有可供参考的信息,很判断自己需要哪些条目。倘若选择用devfs(设备文件系 统)来取代固定的静态设备文件,则可免去寻找设备信息的麻烦。然而,devfs并没有得到 广泛采用,静态的设备仍是标准。先前我们也说过静态设备主要和次要编号的信息
10、。下表列出了 /dev目录中需要填入的最基本条目。根据设备情况,或许应该加入若干额外 的条目。在某些情况下,可能甚至需要使用下表以外的条目。如在某些系统上第一个串行端 口并非ttySO,StongARM-base系统的第一个串行端口则是ttySACO(主要编号:204, 次要编号:5)o表:基本的/dev条目文件名说明类型主编号次编号权限位mem物理内存字符11660 null 黑洞 字符 1 3 666 zero 以null byte(零值字节)为数据来源 字符15666random真随机产生器字符18644ttyO现行的虚拟控制台字符40600ttyl第一个虚拟控制台字符41600ttyS
11、O第一个UART串行端口字符464600tty现行的TTY设备字符50666console系统控制台字符51600rootBinnary rootfs #mknod -m 600 console c 5 1rootBinnary rootfs #mknod -m 666 null c 1 3主要的系统应用程序除了内核的功能以及根文件系统的结构,Linux还继承了 Unix极其丰富的命令集。问题 在于标准的工作站或服务器发行套件者配备有数以千计的二进制命令文件,而且不同发行套 件还各不相同。显然,开发者没有能力逐一交叉编译这么多二进制文件,而且大多数嵌入式 系统也不需要这么多二进制文件。因此有两
12、种做法:不是只挑选若干标准命令,就是尽可能将命令集浓缩成仅仅实现必要功能 的极少数应用程序。接下来,我们会看第一种做法。然后我们再探讨第二种做法,这里面包 括BusyBox、TinyLogin和Embutils这三个作为此用途的主要套件。完整的标准应用程序如果想有选择地利用主流发行套件中可以找到的若干标准应用程序,最好的对策就是以Linux From Scratch 计划位于的网站为起点。此计划提供有各种套件的说明和链接,其目的在于协助你定制自己的发行套 件。该网站提供的Linux From Scratch便是此计划的主要文档,它逐一列出了每个应 用程序的建立提示以及相关链接,并且为每个套件提
13、供了建立时间和磁盘空间的估算值。 或者,可以从网络逐一下载应用程序并且依照每个套件的指示进行编译和交叉编译。因为只 有少数套件提供有交叉编译的完整说明,所以你可能需要检查套件的Makefile ,并据此 决定适当的建立标志或套件进行适当的修改,让交叉编译顺利完成。BusyBoxBruce Pcrens于1996年发起的BusyBox计划,目的在于协助Debian发行套件建 立安装磁盘。从1999年开始,此计划由uClibc的维护者Erik Andersen接手维护, 它最初是Line。开放源码成果的一部分,目前是个与厂商无关的计划。其间,BusyBox计 划发展很快,它现在是许多嵌入式Linu
14、x系统的基石之一。它被收纳在大多数嵌入式 Linux发行套件之中,并且拥有非常活跃的用户群。此计划的网站目前位于 o此计划网站包括了文档、链接以及以往的邮件清单记录。如果愿意接受GNU GPL的许 可条款,可在同一个网站下载BusyBox套件。BusyBox之所以受到热烈的欢迎是因为它能够以一个极小型的应用程序来提供整个命令 集功能。BuxyBox实现了许多命令,以下列举一二:ar、cat、chgrp chmod chown chroot cp cpio date dd、df ifeonfig 等等。尽管BusyBox并不支持这些的命令的所有选项,它提供的子集已足以满足大多数应用的 要求。你可
15、以在BusyBox发行套件的docs目录里看到若干不同格式的文件。它可以用 静态和动态的方式链接glibc或uClibCo有关版本的问题:Makefile和make menuconfig。酉己置、编译和安装BusyBox-1.0rootBinnary rootBinnary #cd busybox-1.00rootBinnary busybox-1.00 #make menuconfig General configuration Build Options Build BusyBox as a static binary (no shared libs)Do you want to buil
16、d BusyBox with a Cross Compiler?对BusyBox进行了配置后下面就可以对其进行编译了。rootBinnary busybox-1.00 # makerootBinnary busybox-1,00 #make install用法当你使用Busybox提供的shell时,例如ash lash或msh、可以使用/etc/profile 文件为所有的shell用户定义全局变量。下面为单用户的目标板定义的/etc/profile范例 文件:#set pathPATH=/bin:/sbin:/usr/bin:/usr/sbinexport PATH系统初始化系统初始化是U
17、nix系统的另一个特性,内核最后一个初始化动作就是启动init程序。此 程序在终结系统启动程序之前会衍生各种应用程序,并且启动若干关键的软件组件。大多数 Linux系统使用的init跟System V的init相仿,配置设定的方式也极为相似。对嵌 入式Linux系统来说,System V init过于灵活,因为此类系统很少会被当成多用户系统 来使用。根文件系统上其实并不需要配置标准的init程序,例如System V init。内核本身并不 在意所执行的是否为init程序。内核只要求系统完成初始化动作之后,它可以启动一个应用程 序。例如你可以加入init=PATH_TO_YOUR_INIT这个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 移植 文件系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内