第10章 制作Linux根文件系统.pdf
![资源得分’ 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)
《第10章 制作Linux根文件系统.pdf》由会员分享,可在线阅读,更多相关《第10章 制作Linux根文件系统.pdf(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、以国家精品课程智能控制基础双语教学为平台,培养工科学生创新实践能力以国家精品课程智能控制基础双语教学为平台,培养工科学生创新实践能力汇报人:师黎第十章:制作第十章:制作Linux根文件系统根文件系统讲课人:罗勇讲课人:罗勇2本章介绍了本章介绍了Linux根文件系统的组织结构,并且分析了根文件系统的组织结构,并且分析了init进程调用文件系统脚本初始化的过程。只有掌握了文件系统的基本构成,才能自己动手定制进程调用文件系统脚本初始化的过程。只有掌握了文件系统的基本构成,才能自己动手定制Linux文件系统。文件系统。学习目标根文件系统组织结构INIT系统初始化过程定制文件系统Linux的根文件系统内
2、容?至少应包括支持Linux系统正常运行的基本内容,包含系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件。根文件系统至少应包括以下内容。1基本的文件系统结构,包含一些必需的目录,如:/dev,/proc,/bin,/etc,/lib,/usr,/tmp等。2基本程序运行所需的库函数,如Glibc/uC-libc。3基本的系统配置文件,如rc,inittab等脚本文件4必要的设备文件支持:/dev/hd*,/dev/tty*,/dev/fd0。5基本的应用程序,如sh,ls,cp,mv等。10.1 根文件系统目录结构?文件系统是操作系统用于明确磁盘或分区上文件的方法和数据结
3、构,即在磁盘上组织文件的方法和数据结构,即在磁盘上组织文件的方法。文件系统的存在,使数据可被有效而透明地存取访问?每种操作系统都有一种把数据保存为文件和目录的方法,从而进行增加和修改等改变。?DOS/Win操作系统,每个磁盘分区作为根目录,如C:,分区根目录下为树状目录结构。不同分区的根目录,各自独立。?Linux的文件系统为一整体,组织到一个树形目录结构之中,目录树的顶端是一个单独的根目录,用/表示。10.1 根文件系统目录结构10.1.1 FHS目录结构目录结构?Linux遵循文件系统科学分类标准FHS。一个定义许多文件和目录的名字和位置的标准。它使得Linux文件组织实现了标准化,Lin
4、ux根文件系统结构如右图所示。1./dev 设备?/dev目录存放设备文件,用于访问系统资源或设备,如软盘、硬盘、内存等。设备文件在Win中不存在,在Linux下,所有设备被抽象成文件。?用户可像访问普通文件一样方便地访问系统中的物理设备。如:可像从文件中读取数据一样,通过读取/dev/mouse文件从鼠标读取输入信息。?在/dev目录下,每个文件都可以用mknod命令建立。各种设备对应的特殊文件以一定的规则命名。?/dev 目录下主要设备文件如下:(1)/dev/console系统控制台,即直接和系统连接的监视器(2)/dev/hdIDE接口的整块硬盘表示为:/dev/hda-z;硬盘不同分
5、区表示为:/dev/hda-zn,其中n表示该硬盘不同分区。如dev/hda指第一个硬盘,hda1指 dev/had的第一个分区。(3)dev/fd软驱设备文件。dev/fd0指系统第一个软驱。(4)dev/tty设备虚拟控制台。如dev/tty1指系统第一个虚拟控制台,/dev/tty2指系统第二个虚拟控制台。(5)dev/sdSCSI接口磁盘驱动器。与IDE硬盘表示方法一致,只将hd换成sd即可。Linux下驱动USB方法采用模拟SCSI设备,所以USB存储设备表示方法与SCSI接口硬盘相同。(5)dev/ttySAC*串口设备文件。dev/ttySAC0是串口1,dev/ttySAC1是
6、串口2?2./root:root用户的主目录,内容包括:引导系统的必备文件、文件系统的挂装信息、设备特殊文件,以及系统修改工具和备份工具等?3./usr 是最庞大目录,主要包含一般不修改的命令程序文件、程序库、手册等其他文档等。Linux内核源码就放在/usr/srv/linux下。?4./var目录包含经常变化的文件,如打印机、邮件、新闻等脱机目录、日志文件及临时文件等。因为该文件系统内容经常变化,若和其他文件系统,如/usr放在同一硬盘分区,文件系统的频繁变化将会提高整个文件系统的碎片化程度。?5./home,用户主目录的默认位置。如名为LY的用户主目录将是/home/LY,系统所有的用户
7、数据保存在其主目录下。?6./proc 目录,./proc文件系统并不保存在系统硬盘中,操作系统在内存中创建这一文件系统目录,是虚拟目录,即系统内存的映射。其中包含系统的相关信息。如CPU等信息。?7./bin目录,包含二进制文件的可执行程序,bin是binary的缩写,许多Linux命令就是放在该目录下的可执行程序,如:ls、mkdir、tar等。?8./sbin目录:与bin目录类似,存放系统编译后的可执行文件、命令。通常只有root用户才有运行权限?5./etc目录,存放系统的很多配置文件。如系统初始化文件/etc/rc等。Linux靠这些文件才得以正常运行,用户可根据需要配置,主要配置
8、文件包括:(1)/etc/rc或/etc/rc.d:启动或改变运行级别时运行的脚本或脚本目录。启动脚本通常位于etc/rc.d/init.d中,系统最先运行的服务是放在/etc/rc.d目录下的文件,而运行级别在文件/etc/inittab中指定。(2)/etc/passwd:存放用户基本信息的口令文件。每行都包含6个冒号分隔的7个域,其中的域给出了用户名、真实姓名、用户起始目录、加密口令和用户的其他信息。(3)/etc/fstab:启动时需要自动安装的文件系统列表。通常,用户在使用过程中,需手动加载许多文件系统。为避免麻烦,让系统启动时自动加载这些系统。Linux使用/etc/fstab 文
9、件完成该功能。fstab 文件中列出了引导时需安装的文件系统类型、加载点及可选参数。进行相应的配置即可确定系统引导时加载的文件系统。(4)/etc/inittab:init的配置文件,后面详述。?10./boot 目录存放系统启动时需要的各种文件,如内核的镜像文件、引导加载器(bootstrap loader)、使用的文件LILO。?11./lib,标准程序设计库,又叫动态链接共享库,作用类似于win下的.dll文件。?12./mnt 该目录用来为其他文件系统提供安装点。如可在该目录下新建一目录myfloppy用来挂载软盘,同样可新建一目录mycdrom用来挂载光盘。#mount -t vfa
10、t dev/hda1 /mnt/win_D即可将硬盘的第一分区挂载到Linux下的/mnt/win_D目录中。?13./tmp:公用的临时文件存储点。?14./initrd:用来在计算机启动时挂载initrd.img映像文件,并载入所需设备模块的目录。切勿随意删除/initrd目录,否则将无法重新启动系统。10.1.2 文件存放规则文件存放规则?FHS标准规定了两级目录,第一级是根目录下的主要目录,根据目录名称可知其中应放什么样的文件,如/etc应放置各种配置文件,/bin和/sbin目录下应该放置相应的可执行文件等。?二级目录主要针对/usr和/var做出了更深层目录的定义。?Linux基于
11、“什么文件放在哪里”的基础建立文件存放的规则。并按该规则把文件放进相应的分级结构中。按照FHS标准,主要存放文件规则如下:10.1.2 文件存放规则文件存放规则1把全局配置文件放入/etc目录下。2将设备文件信息放入/dev目录下,设备名可以作为符号链接定位在/dev中或/dev子目录中的其他设备存在。3操作系统核心定位在根目录/或/boot,若操作系统核心不是作为文件系统的一个文件存在,不应用它。4库存放的目录是/lib。5存放系统编译后的可执行文件、命令的目录是/bin,/sbin,/usr。10.2 添加系统文件添加系统文件10.2.1 添加共享链接库添加共享链接库?Linux的共享库在
12、根文件系统的/lib目录下,应用程序需要共享库才能工作。所以添加共享库对根文件系统是必须的。1.glibc 库和库和uClibc库库?glibc 库是提供系统调用和基本函数的C库,提供了常用文件操作(如打开、读写)、内存管理操作(malloc,free)等函数。所有动态链接的程序都要用它。?许多基于X86架构的Linux系统使用Glibc库。虽然完备,但庞大,内存消耗巨大,因此嵌入式系统常用uClibc。?uclibc 库是一个小型C库,应用于嵌入式Linux开发。它基本实现了glibc库功能。几乎所有glibc库支持的应用程序都能在uclibc上运行。因此,应用程序移植时,只需使用uclib
13、c库重新编译源代码即可?库文件一般放在/lib目录下,展示该目录文件。/lib目录文件2 库文件种类库文件种类?在根文件系统/lib目录下,主要包含4种类型文件1)实际的共享链接库实际的共享链接库此类文件名格式为lib libname version.so,其中,libname是共享库名称,version是版本号。如glibc2.2.3的数学链接库名称为libm-2.2.3.so2)主修订版本的符号链接主修订版本的符号链接主修订版本的符号链接格式为lib libname.so.major-revision-version。如C链接库的符号链接的名称为libc.so.6。程序一旦链接了特定的链接
14、库,它将会使用其符号链接,程序启动时,加载器在加载程序之前,会加载该文件。10.2.1 添加共享链接库添加共享链接库3)与版本无关的符号链接及指向主修订版本的符号链接与版本无关的符号链接及指向主修订版本的符号链接这些符号链接为需要链接特定链接库的所有程序提供一个通用的的条目,与主修订版本的编号或glibc的版本无关。格式为:lib libname.so4)静态链接库静态链接库在编译时,将这些库文件的内容链接到用户程序中,这类文件就是静态库文件。其格式为:lib libname.a。10.2.1 添加共享链接库添加共享链接库3.共享库添加共享库添加?Linux应用程序开发中,应用程序执行离不开共
15、享链接库支持,所以需要将其中的一些文件复制到用户目标板的根文件系统的相应位置。需复制的文件仅仅包括共享链接库和主修改版本的符号链接。因为余下的两类文件只在链接时用到,在执行时不使用。?为明确用户应用程序需要哪些链接库,可使用系统命令ldd来列出应用程序所需的动态链接库。如查看文件复制命令cp所依赖的库,执行指令如下#ldd/bin/cplibtac1.so.1=/lib/libac1.so.1(0 x00701000)libselinux.so.1=/lib/libselinux.so.1(0 x00b87000)libtac1.so.1=/lib/libac1.so.1(0 x0070100
16、0)libtac1.so.1=/lib/libac1.so.1(0 x00701000)libtac1.so.1=/lib/libac1.so.1(0 x00701000)“=”左边表示所需共享库的名称,右边表示该库文件在根文件系统中的实际位置。?动态链接库的配置文件/etc/ld.so.conf中包含有默认的共享库搜索路径,通过查看配置文件来了解默认的共享库搜索路径。例如命令行输入以下:#vi /etc/ld.so.conf/usr/X11R6/lib/usr/lib/usr/local/lib/usr/lib/qt-3.3/lib以上四个路径是共享库的默认搜索路径。?通常,开放源码的程序或
17、函数库都会默认安装到/usr/local目录下,以便与系统自身的程序或函数库区别。?而许多Linux系统的/etc/ld.so.conf文件中默认不包含/usr/local/lib目录。因此,会出现已安装共享库,却找不到共享库的情况。此时,应该检查文件/etc/ld.so.conf,若缺少/usr/local/lib目录,就添加。?uClibc可实现Glibc中的部分组件,如ld,libc,libcrypt,libdl,libm,libpthread,libresolv和libutil。?决定所需组件后,可将它们及相关的符号链接复制到目标板的根文件系统中的/lib目录中。?以下命令将uClib
18、c的所有组件复制到目标系统的根文件系统。如:#cd/lib ;进入主机根文件系统的/lib目录#cp *-*.so /rootfs/lib#cp -d *.so.*0-9 /rootfs/lib第一个cp命令复制实际的共享链接库,第二个cp复制主修订版本的符号链接。?当把uClibc组件安装到目标系统的根文件系统后,应用程序在执行过程中就可以使用这些共享库了10.2.2 添加内核模块添加内核模块?内核模块是一些可让系统内核在需要时加载执行,在不需要时可被系统卸载的模块文件。?在嵌入式系统开发过程中,若想增加系统的某部分功能,有两种方法:?一、将相应部分在编译内核时编译进去。?二、动态调用系统所
19、需的内核模块。?方法一在内核启动时可自动支持相应功能,但会使内核庞大。对于经常用到的部分可直接编译到内核,如网络。?方法二将功能部分编译成模块,生成对应的.o文件,使用时动态加载。优点是内核精简,缺点是开发者需自行调用该模块。10.2.2 添加内核模块添加内核模块1在内核编译过程中自动添加内核模块在内核编译过程中自动添加内核模块?内核编译过程中对模块支持的设置选项包含3项:-Loadable module support*Enable loadable module support Set version information on all module symbols*Kernel mod
20、ule loader第一项:是否支持动态加载内核模块,若不是所有需要的内容都编译到内核里,应选择该项。第二项:设置版本信息,可不选。第三项:让内核在启动时就可加载所需模块。应选10.2.2 添加内核模块添加内核模块?在配置内核相关选项后,对于模块的管理还需执行如下指令:#make modules ;生成对应模块#make modules_install;将模块复制到需要的目录?内核编译后,将编译内核过程中生成的内核模块复制到目标系统的根文件系统。?还需要为目标开发系统添加内核模块配置文件:/etc/modprobe.conf,以便系统运行时自动加载内核模块。?下图是/ect/modprob.c
21、onf文件:/ect/modprob.conf10.2.2 添加内核模块添加内核模块?开机自动挂载模块位于该配置文件中。在该文件中,在该模块中,写入文件的加载命令或模块的别名定义等。若想让一些模块开机自动加载,就可在该配置文件中写入。如写入:alias eth0 8139too系统启动后,将自动加载8139too模块,同时指定网络设备8139too的别名为eth0。10.2.2 添加内核模块添加内核模块2动态添加内核模块动态添加内核模块?Linux为了不需要重新编译内核就可动态加载内核模块,引入了可加载内核模块LKM,LKM不被编译在内核中,它无需重新编译内核就可扩展操作系统内核功能。?可通过
22、lsmod命令,读取/proc/modules文件查看内核已经加载的模块。结果如下图:?图中,module指模块名,size指该模块所占内存页面大小,而Used by指模块被系统调用次数。lsmod动态加载内核模块有2种方法,以下分别叙述。(1)采用modprobe命令加载?modprobe用于挂载模块,在挂载某个内核模块的同时,其所依赖的模块也被同时挂载,指令为:modprobe-v-V-C config-file-n-i-q-o 模块名 模块名 参数modprobe-r -n -i -v 模块名 modprobe-l -t 目录名-a 模块名 模块名不带后缀,举例如下:#modprobe8
23、139too ;挂载8139too模块#modprobevfat;挂载vfat模块(2)采用insmod命令加载?Modprobe在加载模块时不用指定模块文件的绝对路径,也不用带模块文件的后缀.o或.ko;而insmod需要指定模块所在目录的绝对路径,并且包含模块文件名后缀。如:#insmod/lib/modules/2.6.9-11.EL/Kernel/drivers/capiphp.ko10.2.3 添加设备文件添加设备文件?Linux中任何对象(包括设备)都可以认为是文件。Linux将设备分为最基本的2大类:一类是字符设备(Character Device),另一类是块设备(Block
24、Device)。?字符设备特殊文件进行I/O操作不经过操作系统缓冲区,而块设备特殊文件用来同外设进行定长的包传输。?字符特殊文件与外设进行I/O操作时每次只传输一个字符。而对于块设备,在外设和内存之间一次可传送一整块数据?设备文件目录为/dev,该目录内容如下:/dev目录内容10.2.3 添加设备文件添加设备文件?/dev目录下有较多设备。但嵌入式系统是一个定制系统,其设备文件只要满足实际开发需求即可,所以/dev目录只需添加必要的设备文件即可。Linux下添加设备文件方法如下:1使用使用mknod指令来添加设备指令来添加设备命令 新建 权限 设备名 设备类型 主设备号 从设备号mknod-
25、m 666 zero c 1 5mknod-m 666 null c 1 3mknod-m 666 /dev/ttyS0 c 4 64注:所有写入设备null的信息均隐藏。10.2.3 添加设备文件添加设备文件?添加好基本的设备文件后,在/dev目录下还必须包括必要的符号链接。建立符号链接命令格式:ln-s 链接名链接目标举例如下:#ln-s /proc/self/fd fd#ln-s fd/0 stdin#ln-s fd/1 stdout#ln-s fd/2 stderr10.2.3 添加设备文件添加设备文件2在在/dev目录下采用目录下采用MAKEDEV(符号链接(符号链接/sbin/MA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第10章 制作Linux根文件系统 10 制作 Linux 文件系统
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内