1、第第3章章 嵌入式嵌入式Linux内核文件内核文件系统与存储系统与存储第三章第三章 嵌入式嵌入式LinuxLinux内核文件内核文件系统与存储系统与存储主要内容主要内容 第一节 Linux内核定制、裁剪和添加 第二节 嵌入式引导系统(BootLoader)技术 第三节 文件系统的构建 学习方法与建议学习方法与建议本章主要介绍了三个部分,分别是嵌入式linux内核、引导系统介绍和文件系统等相关内容。该章节详细介绍了关于嵌入式系统如何构建以及内核部分的应用操作等内容,可以更好的帮助理解嵌入式系统的相关内容,具有一定的应用价值。 内容:内容:一、概述一、概述 二、内核目录介绍二、内核目录介绍 三、配
2、置文件和配置工具三、配置文件和配置工具 四、内核的编译命令四、内核的编译命令 第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 一、概述一、概述操作系统结构操作系统结构操作系统(操作系统(Operating System,OS)是一组能够管理电脑软硬件资源的程序,它能够管理内存、决定系统资源分配、控制输入输出设备以及管理网络文件等。作为计算机软硬件之间的纽带,操作系统能够使计算机系统资源得到最大限度的利用。利用运行在某台计算机(宿主机)上的编译器编译某个源程序,生成在另一台机器(目标机)上运行的目标代码的过程。操
3、作系统是一套复杂的管理控制程序,包括五个方面的管理功能:进程与处理机管理、存储管理、设备管理、文件管理与用户管理。一般来说,操作系统具有四个共同特征:并发性(并发性(concurrence)、共享性)、共享性(sharing)、虚拟性)、虚拟性(virtual)和不确定性(和不确定性(asynchronism)。)。其中,并发是指两个或者多个事件在同一时间间隔之内发生;共享指系统中的资源能够供多个用户(用户程序)共同使用;虚拟指通过某种技术把一个物理上的实体映射为若干个逻辑上的对应;而不确定性则指内存中的多个进程均按照各自独立的方式执行,其执行速度由于受到操作系统的自动控制,因此是无法预知的。
4、 一个操作系统至少具有如下图所示的结构。引导系统就是在操作系统内核运行之前运行的一段小程序,其作用是初始化硬件设备、建立内存空间的映射图,并且为最终调用操作系统内核准备好正确的环境;内核是一个操作系统的核心,负责管理系统的进程、存储、设备和文件等,它决定着系统的性能和稳定性;根文件系统并不是一个具体的文件类型,而是一个理论性的概念,它作为VFS(Virtual Filesystem Switcher)的根节点,可以帮助后者管理文件系统。VFS是内核中提供的一种软件机制,能够提供实际各个文件系统的挂载点。 引导系统BootLoader内核Kernel根文件系统Rootfs第一节第一节 Linux
5、内核定制、裁剪和添加内核定制、裁剪和添加 一、概述一、概述内核源码安装内核源码安装 将ARM Linux 系统内核源码安装到操作系统之中不仅可以方便学习内核的相应内容,而且具有帮助编译驱动程序等功能。完整的内核一般规模较大,可以从官方网站http:/www.kernel.org下载。下载的内核一般是tar.gz或者是.bz2压缩文件,使用时需要解压。在编译内核注意需要root权限。以下为内核源码的安装步骤:1)将需要升级的内核拷贝到/usr/src/下:#cp linux-2.4.18.tar.gz /usr/src2)解压下载的源程序文件,命令如下所示:#tar -zxvf linux-2.
6、4.18.tar.gz3)文件将解压到/usr/src/linux目录中,建立链接:#ln -s linux-2.4.18 linux第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 一、概述一、概述第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 一、概述一、概述内核版本号说明内核版本号说明可以使用uname a命令或者cat /proc/version命令来查看系统的内核版本号,如下图所示。该系统内核版本号为2.4.20-8。其中第一个数字为主版本号,第二个数字为次版本号,第三个数字为修订号。如果次版本号为偶数,则表明是该版本是稳定发行版本;如果次版本号是奇
7、数,则说明该系统内核仍在开发中。 现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等几个功能模块组成 。Linux内核源码的各个目录大致与此相对应,如下图所示。第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 二、内核目录介绍二、内核目录介绍 内核源码目录说明目录名称目录功能arch包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构。include包括编译内核所需要的大部分头文件。init包含内核的初始化代码(不是系统的引导代码mm包含所有的内存管理代码。drivers包含系统中所有的设备驱动程序。ipc包含核心进程间的通
8、信代码。fs存放Linux支持的文件系统代码。kernel包含内核管理的核心代码。net内核的网络部分代码。lib包含核心的库代码。scripts包含用于配置核心的脚本文件。Documentation一些文档,是对每个目录作用的具体说明。第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 二、内核目录介绍二、内核目录介绍 1配置文件给用户提供配置选择的功能,主要包括如下配置文件第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 三、配置文件和配置工具三、配置文件和配置工具 配置文件名配置文件名功能各级各级Makefile和和.depend文件文件各级目录的make文
9、件和依赖工具.config内核配置文件,保存配置结果Rules.make规则文件2配置工具用来进行相关配置的工具,包括配置命令解释器,其中配置用户界面如下: (1)基于字符的界面 使用命令: Make config 该方法简单且不需要调用Xwindows,不过操作麻烦,用户界面不友好。第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 三、配置文件和配置工具三、配置文件和配置工具 (2)基于Ncurses的文本模式图形用户界面使用命令: make menuconfig该方法简单且不需要调用Xwindows,而且操作简单,用户界面友好后面的实验就使用该方法进行内核的相关配置。第一节
10、第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 三、配置文件和配置工具三、配置文件和配置工具 (3)基于Xwindows图形界面的用户配置界面使用命令: Make xconfig第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 三、配置文件和配置工具三、配置文件和配置工具 1 1在该级目录下的Config.in中添加对该模块的编译条件,该变量可以设置为三种状态Y-将该功能模块编译进内核 N-不将该功能模块编译进内核M-将该功能编译成模块方式,可以在需要时动态插入到内核中的模块第一节第一节 Linux内核定制、裁剪和添加内核定制、裁剪和添加 四、内核的编译命令四、内核
11、的编译命令2内核的编译操作下面给出了用于内核编译的主要命令:# make menuconfig -配置编译选项# make dep -提供变量依赖关系信息. # make clean -删除生成的模块和目标文件. # make zImage -编译内核生成压缩的映象. # make modules -编译模块. # make modules_install -安装编译完成的模块.编译完成之后最终生成的压缩内核映象的路径为arch/arm/boot/zImage,之后拷贝新内核文件zImage到启动目录,并改为合适的名字,即可启动新完成的内核镜像。第一节第一节 Linux内核定制、裁剪和添加内核
12、定制、裁剪和添加 四、内核的编译命令四、内核的编译命令 内容:内容:一、引导系统概述一、引导系统概述 简单介绍引导系统的概念和模式二、二、Linux的的Bootloader vivi与与uboot vivi和uboot作为ARM平台常用的引导程序,具有结构简单但是功能强大的特点 第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 1引导系统介绍引导系统介绍所谓的引导程序(BootLoader),即系统加电后运行的第一段软件代码。一般来说嵌入式系统的Bootloader负责加载整个启动任务。整个过程包括初始化硬件设备、建立内存空间的映射图、配置合适的软硬件环境以便能够
13、调用操作系统的内核。第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 一、引导系统概述一、引导系统概述 2引导系统的操作模式引导系统的操作模式大多数引导系统都包含两种不同的操作模式: 启动加载模式启动加载模式 下载模式下载模式1)启动加载模式启动加载模式启动加载模式也称为“自主”(autonomous)模式。引导系统从目标机上的某个固态存储设备中将操作系统加载到 RAM 中运行。这种模式是引导系统的正常工作模式。2)下载模式下载模式在下载模式下,目标机上的引导系统将通过串口连接或网络连接等通信手段从主机下载文件。从主机下载的文件通常首先被引导系统保存到目标机的RA
14、M中,然后再被引导系统写到目标机上的FLASH类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用引导系统的这种工作模式。 第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 一、引导系统概述一、引导系统概述 3. 引导系统的主要任务与典型结构框架引导系统的主要任务与典型结构框架 大多数引导系统都分为 stage1 和 stage2 两大部分。依赖于处理器体系结构和板级初始化的代码通常都放在 stage1 中,用汇编实现;而 stage2 则通常用C语言来实现,这样可以实现更复杂的功能,同时代码具有更好的可读性和可移植性。
15、第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 一、引导系统概述一、引导系统概述 引导系统的 stage1:1)硬件设备初始化。2)为加载引导系统的 stage2 准备 RAM 空间。3)拷贝引导系统的 stage2 到 RAM 空间中。4)设置好堆栈。5)跳转到 stage2 的 C 入口点引导系统的 stage2 :1)初始化本阶段要用到的硬件设备。2)检测系统内存映射(memory map)。3)将内核映像和根文件系统映像从 flash 上读到 RAM 空间中。4)为内核设置启动参数。5)调用内核。1vivi的常用命令的常用命令 帮助命令vivi help
16、 显示启动参数vivi param show 启动参数帮助vivi param help 设置参数vivi param set boot_delay 10000000Change boot_delay value. 0 x00989680(10000000) to 0 x00989680(10000000)vivi param save第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 二、二、 Linux的的Bootloader vivi与与uboot 1vivi的常用命令的常用命令 显示分区帮助vivi part help 显示分区vivi part show
17、存储器分区vivi bon help 引导帮助vivi boot help 启动操作系统vivi boot 第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 二、二、 Linux的的Bootloader vivi与与uboot 2Uboot 的常用命令的常用命令1)protect:protect命令用于对Flash进行写保护,可以使能和解除写保护。2)erase:erase命令可以擦除Flash。3)setenv:setenv命令可以设置环境变量。4)printenv:printenv命令可以打印全部环境变量,也可以只打印参数中列出的环境变量。5)tftpboot
18、:tftpboot命令能够使用TFTP协议通过网络下载二进制格式的文档。另外,使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。其命令格式为:tftpboot loadAddress bootfilename6)bootm: bootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。其命令格式为:bootm addr arg .第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 二、二、 Linux的的Bootloader vivi与与uboot 2Uboot 的常用命令的常用命令6)bootm: bo
19、otm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。其命令格式为:bootm addr arg .7)go:go命令能够执行应用程序。其命令格式为:go addr arg .8)loadb:loadb命令能够通过串口线下载二进制格式的文档。其命令格式为:loadb off baud 9)loads:loads命令可以通过串口线下载S-Record格式的文件。10)flinfo:flinfo命令打印全部Flash组的信息,也可以只打印其中某个组的信息。一般嵌入式系统的Flash只有一个组。11)cp:cp命令可以在内存中复制数据块,包括对Flash的读写操
20、作。第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 二、二、 Linux的的Bootloader vivi与与uboot 2Uboot 的常用命令的常用命令12)cmp:cmp命令可以比较两块内存中的内容。.b表示以字节为单位;.w表示以字为单位;.l表示以长字为单位。13)mw:mw命令可以按照字节、字、长字写内存,.b ,w,l的用法与cp命令相同。14)nfs:nfs命令可以使用NFS网络协议通过网络启动映像。15)nm:nm命令用于修改内存,可以按照字节、字、长字操作。 16)run:run命令可以执行环境变量中的命令,后面参数可以是几个环境变量名。17
21、)sleep:sleep命令可以延迟N秒钟执行,N为十进制数。第二节第二节 嵌入式引导系统(嵌入式引导系统(BootLoader)技术)技术 二、二、 Linux的的Bootloader vivi与与uboot 内容:内容:一、文件系统概述一、文件系统概述包括根文件系统的概述以及根文件系统的目录结构二、二、BusyBoxBusyBox的介绍以及相关命令第三节第三节 文件系统的构建文件系统的构建1根文件系统描述根文件系统描述Linux引导启动时,默认使用的文件系统是根文件系统。装载根文件系统也是引导系统启动过程的最后一个步骤。文件系统包含两大类:根文件系统根文件系统和附加文件系统附加文件系统。根
22、文件系统是操作系统至少应该引导的一个文件系统,它包含了构建整个操作系统的基本程序和相关目录附加文件系统则是除了根文件系统之外的所有文件系统,本身无法直接使用,需要挂载到根文件系统的某个目录下方可使用。第三节第三节 文件系统的构建文件系统的构建 一、文件系统概述一、文件系统概述第三节第三节 文件系统的构建文件系统的构建 一、文件系统概述一、文件系统概述2根文件系统目录结构根文件系统目录结构 根文件系统呈倒挂树状层次结构,一般包括如下几个目录:/etc、 /dev、/usr、/bin、 /var等。 如下图所示:第三节第三节 文件系统的构建文件系统的构建 一、文件系统概述一、文件系统概述各目录功能
23、如下:/bin/bin包含每个用户使用的系统下最常用的命令/sbin/sbin主要在超级用户管理系统时使用/lib/lib存放系统的链接库文件/boot/boot系统启动时的内核文件和其他一些信息文件/dev/dev包含着代表硬件设备的设备文件/etc/etc包含着整个系统的各种配置文件/home/home包含各用户的主目录/root/root超级用户root的默认主目录/mnt/mnt装载其他非标准文件系统的装载点/proc/proc一个虚拟目录,其中保存内核和进程的信息,文件存放在系统内存中/tmp/tmp该目录为程序和用户提供临时空间/usr/usr包含UNIX系统的众多资源,占用空间较
24、大/var/var系统记录文件的存放地,同时也存放着一些系统的配置文件/lost+found/lost+found存在于所有的文件系统中,保存文件碎片/opt/opt由一些外部应用程序使用的目录1BusyBox介绍介绍BusyBox combines tiny versions of many common UNIX utilities into a single small executable. It provides replacements for most of the utilities you usually find in GNU fileutils, shellutils,
25、etc. The utilities in BusyBox generally have fewer options than their full-featured GNU cousins; however, the options that are included provide the expected functionality and behave very much like their GNU counterparts. BusyBox provides a fairly complete environment for any small or embedded system
26、.事实上,BusyBox提供了相当多的工具。从最简单的显示工具到最强大的搜索工具,BusyBox把这些工具存放在/bin和/sbin目录之下,并且建立一个能够使用这些工具的链接。 第三节第三节 文件系统的构建文件系统的构建 二、二、BusyBox2. BusyBox的相关命令的相关命令BusyBox的相关配置和编译内核类似,需要首先使用make menuconfig命令进行手工配置。敲下make menuconfig命令之后,进入如下界面:第三节第三节 文件系统的构建文件系统的构建 二、二、BusyBox2. BusyBox2. BusyBox的相关命令的相关命令BusyBox其他命令包括:h
27、elp显示 make 选项的完整列表defconfig启用默认的(通用)配置allnoconfig禁用所有的应用程序(空配置)allyesconfig启用所有的应用程序(完整配置)allbareconfig启用所有的应用程序,但是不包括子特性config基于文本的配置工具menuconfigN-curses(基于菜单的)配置工具all编译 BusyBox 二进制文件和文档(./docs)busybox编译 BusyBox 二进制文件clean清除源代码树distclean彻底清除源代码树sizes显示所启用的应用程序的文本/数据大小 第三节第三节 文件系统的构建文件系统的构建 二、二、Busy
28、Boxn本章主要介绍了三个部分,分别是嵌入式linux内核、引导系统介绍和文件系统等相关内容。在内核部分详细介绍了Linux操作系统内核定制、裁剪和添加;引导部分则介绍了嵌入式BootLoader技术;最后的文件系统部分详细介绍了文件系统的构建。章节的最后部分将构建Floppylinux作为一个综合应用实验,试图让读者更加深入理解上述3块内容。小结小结1. 请简述操作系统的结构。2. 请简述操作系统的特点并举例说明。3. 请列举出Linux内核源码的所有文件夹,并且说明每个文件夹的意义。4. 请列举出Linux有关内核镜像的三种编译方法,并陈述每个方法的特点。5. 请简述Linux引导系统过的两种操作模式并分别说明。6. 请列举出根文件系统的所有目录,并且分别说明每个文件夹的含义。7. 请阐述Linux内核编译的选项和BusyBox编译选项之间的区别。8. 请完成本章的综合实验FloppyLinux。9. 请尝试完成基于U盘的Linux系统。习题习题