1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,上章回顾,Kconfig,用法与作用,Makefile,作用,Linux,内核配置、编译与烧录,Linux,内核启动过程分析,构建,Linux,根文件系统,第,4,章,预习检查,常见,Linux,文件系统具有哪些子目录?,列举你所了解的,Linux,根文件系统?,本章目标,了解,Linux,的文件系统层次标准,了解根文件系统下各目录的作用,掌握构建根文件系统的方法,掌握制作,yaffs,文件系统镜像文件的方法,本章结构,Linux文件系统概述,构建,Linux,根文件系统,使用glibc库,Linux文件系
2、统的特点,Linux,文件属性介绍,Linux根文件系统目录结构,移植Busybox,构建根文件系统,Linux,文件系统概述,Windows,下分区:,C,、,D,、,E,盘,Linux,下:根目录,/,、,/bin,、,/home,Linux,中并没有,C,、,D,、,E,等盘符的概念,它以树状结构管理所有目录、文件,其他分区 挂接在某个目录上,这个目录被称为挂接点或安装点,(mount point),,然后就可以通过这个目录来访问这个分区上的文件。,Linux,下文件系统类型,在一个分区上存储文件时,需要遵循一定的格式,这种格式称为文件系统类型,比如:,fat16,、,fat32,、,e
3、xt2,、,ext3,、,jffs2,、,yaffs,等,Linux,根文件系目录结构,FHS:,filesystem,hierarchy Standard,使,Linux,文件系统布局实现标准化,FHS,目录结构,/dev,设备文件,/dev/console,系统控制台,/dev/,mtdblock,*,mtd,块设备,/dev/,tty,设备虚拟控制台,/dev/,ttySAC,*,串口设备文件,FHS,目录结构,/proc,,,/sys,属于内存文件系统,包含一些系统相关的信息,/bin,和,/,sbin,用于存放可执行文件,sbin,是指只有,root,权限才可以执行,/lib,用于存
4、放动态链接共享库的地方,也包含静态库,FHS,目录结构,/etc,/etc/,rc,或,rc.d,启动和改变运行级别时运行的脚本的目录,/etc/,passwd,存放用户基本信息的文件,/etc/,fstab,启动时需要自动安装的文件系统列表,FHS,目录结构,/etc/,inittab,init,程序的配置文件,文件存放规则,把全局配置文件放入,/etc,目录下,把设备结点放入,/dev,目录下,或者是,/dev,的子目录下,库存放的目录是,/lib,存放编译后的可执行文件,目录是,/bin,/,sbin,/usr,/lib,下的共享库文件来自何处?,glibc,的共享库,标准的,GNU C
5、 lib,的动态库,uclibc,的共享库,用于,uclinux,的动态库,Size,比较小,常用于嵌入式系统,从交叉编译工具的目录中取来,Linux,文件类型,常用,Linux,根文件系统类型,NFS(Network,File System),网络文件系统,开发阶段常用的根文件系统,需要网络支持,开发主机负责导出目标板的根文件系统,目标板内核必须支持,NFS,作为根文件系统,Ext2 over,Ramdisk,:,目标板内核必须支持,ext2,的文件系统,需要存储介质,JFFS/JFFS2,目标板内核必须支持,jffs/jffs2,的文件系统,需要,MTD,Nor,Flash,YAFFS/Y
6、AFFS2,目标板内核必须支持,yaffs/yaffs2,的文件系统,需要,MTD,Nand,Flash,其他,cramfs,cromfs,等等,Busybox,简介,1996,年,集成了一百多个,Linux,的常用命令和工具软件,支持,glibc,和,uclibc,支持静态库和动态库两种方式,减小常用命令所占有存储空间,简化嵌入式根文件系统的制作,内核启动,init,进程的过程,init,进程位于,init/,main.c,,内核启动,init,进程的过程如下:,(1),打开标准输入、标难输出、标准错误设备。,(2),如果,ramdisk_execute_command,变量指定了要运行的程
7、序,启动它。,(3),如果,execute_ command,变量指定了要运行的程序,启动它。,(4),依次尝试执行,/,sbin,/init,、,/etc/init,、,/bin/init,、,/bin/,sh,。,Busybox,init,程序流程,/etc/,inittab,Busybox,init程序解析/etc/inittab文件,然后按照它的指示创建各种子进程,;,否则使用默认的配置创建子进程,。,/etc/,inittab,文件中每个条目用来定义一个子进程,并确定它的启动方法。格式如下:,例如:,:,ttySAC0:askfirst:-/bin/sh,/etc/,inittab,
8、/etc/,inittab,文件,,各字段的作用:,:,表示这个子进程要使用的控制台(即标准输入、标准输出、标准错误设备,)。,如果省略,则使用与init进程一样的控制台,。,:对干,Busybox,init程序,这个字段没有意义,可以省略,。,:表示init进程如何控制这个子进程,有如表17.6所示的8种取值。,:要执行的程序,它可以是可执行程序,也可以是脚本。,/etc/,inittab,文件,字段的意义,Step1,解压缩文件,Step2,使用,make,menuconfig,#make,menuconfig,Busybox,Settings,Busybox,的性能微调,设置“,TAB”
9、键补全,连接,/,编译选项,选定使用静态连接:,Archival,Utilities选项,选择,tar,命令:,Linux Module,Utilities选项,要使用可加载模块,下面的配置要选上,:,Networking,Utilities选项,除其他默认配置外,增加ifconfig命令,:,编译和安装,Busybox,修改,Makefile,修改前:,修改后:,ARCH?=$(SUBARCH),CROSS_COMPILE?=,ARCH?=arm,CROSS_COMPILE?=arm-,linux,-,编译和安装,Busybox,编译:,make,安装,Busybox,:,将在,/work
10、/,nfs_root/fs_mini,目录下生成如下文件、目录,:,make TARGET_ARCH=ARM PREFIX=/home/student/,root_fs/fs_mini,all install,查看目标板的命令,ls,实际上是,busybox,的符号链接,一般的命令都是,busybox,的符号链接,xxx,与执行,busybox,xxx,是一样的,如何建立符号链接?,#,ln,s,busybox,ls,#,ln,s,busybox,cp,使用glibc库,glibc,库的位置是,/usr/local/arm/3.4.1/arm-linux/lib,glibc,库包括的主要文件:
11、静态库文件,(.a),动态库文件,(.so,、,.so.0-9*),安装glibc库,mkdir,p/home/student/,root_fs/fs_mini/lib,cd,/home/student/,root_fs/fs_mini/lib,cp/usr/local/arm/3.4.1/arm-linux/lib/*.s*./-d,cp/usr/local/arm/3.4.1/arm-linux/lib/*.a./-d,在开发板上只需要加载器和动态库,假设要构建的根文件系统目录为,/home/student/,root_fs/fs_mini,,操作如下:,构建根文件系统,构建根文件系统基
12、本步骤:,构建,etc,目录,构建,dev,目录,构建其他目录,比如:,home,mnt,proc sys,tmp,var,制作,/,烧写,yaffs,文件系统镜像文件,构建,etc,目录,#System initialization.,:,sysinit:/etc/init.d/rcS,:,sysinit:/bin/sh,:,ctrlaltdel:/sbin/reboot,:shutdown:/bin/,umount,-a-r,创建,etc/,inittab,文件:,构建,etc,目录,none/procprocdefaults,0 0,none/dev/pts,devpts,mode=06
13、220 0,tmpfs,/,tmp,tmpfs,defaults,0 0,proc,/proc,proc,defaults,0 0,创建,etc/,fstab,文件:,构建,etc,目录,#!/bin/,sh,mount-a,创建,etc/,init.d/rcS,文件:,构建,dev,目录,cd,/home/student/,root_fs/fs_mini/dev,mknod,console c 5 1,mknod,null c 1 3,mknod,ttySAC0 c 204 64,mknod,mtdblock0 b 31 0,mknod,mtdblock1 b 31 1,mknod,mtdb
14、lock2 b 31 2,在,/dev,目录下静态创建各种节点,(,即设备文件,),:,构建其他目录,cd,/home/student/,root_fs/fs_mini,mkdir,home,mnt,proc sys,tmp,var,其他目录可以是空目录,比如,proc,、,mnt,、,tmp,、,sys,、,root,等,如下创建:,制作,/,烧写,yaffs,文件系统镜像文件,cd,/home/student/,root_fs,mkyaffsimage,fs_mini/fs_mini.yaffs,制作,fs_mini.yaffs,文件:,烧写,fs_mini.yaffs,文件:,tftp,0 x30000000,fs_mini.yaffs,nand,erase 0 x270000$(,filesize,),nand,write.yaffs,30000000 270000$(,filesize,),本章结构,Linux文件系统概述,构建,Linux,根文件系统,使用glibc库,Linux文件系统的特点,Linux,文件属性介绍,Linux根文件系统目录结构,移植Busybox,构建根文件系统,如何配置、编译,Busybox,如何构建和烧写根文件系统,实验,任务一、定制,yaffs,文件系统,任务二、定制,NFS,文件系统,






