文档介绍:第15章解析Linux内核
内核是操作系统的核心,通常说的Linux是指Linux操作系统的内核,是一组系统管理软件的集合。Linux内核是目前最流行的开源操作系统之一,由于其代码的高度开放性,越来越多的人参与到Linux内核的研究和开发中。Linux内核的功能也在不断提高,性能在不断改进。操作系统内核是软件开发领域比较深的技术点,需要结合软硬件知识才能深入理解。本章由浅入深讲解Linux内核,带领读者进入嵌入式开发比较深入的领域,主要内容如下:
如何获取Linux内核代码
Linux内核功能解析
Linux内核代码布局
Linux内核镜像结构
基本知识
Linux内核是Linux操作系统不可缺少的组成部分,但是内核本身不是操作系统。许多Linux操作系统发行商如RedHat、Debian等都采用Linux内核,然后加入用户需要的工具软件和程序库,最终构成一个完整的操作系统。嵌入式Linux系统是运行在嵌入式硬件系统上的Linux操作系统,每个嵌入式Linux系统都包括了必要的工具软件和程序库。
什么是Linux内核
内核是操作系统的核心部分,为应用程序提供安全访问硬件资源的功能。直接操作计算机硬件是很复杂的,内核通过硬件抽象的方法屏蔽了硬件的复杂性和多样性。通过硬件抽象的方法,内核向应用程序提供了统一和简洁的接口,应用程序设计复杂程度降低。实际上,内核可以被看做是一个系统资源管理器,内核管理计算机系统中所有的软件和硬件资源。
应用程序可以直接运行在计算机硬件上而无需内核的支持,从这个角度看,内核不是必要的。在早期的计算机系统中,由于系统资源的局限,通常采用直接在硬件上运行应用程序的办法。运行应用程序需要一些辅助程序,如程序加载器、调试器等。随着计算机性能的不断提高,硬件和软件源都变得复杂,需要一个统一管理的程序,操作系统的概念也逐渐建立起来。
Linux内核版本
Linux内核版本号采用两个“.”分割的三个数字来标示,形式为“”。其中,X是主要版本号,Y是次要版本号,Z代表补丁版本号。奇数代表不稳定的版本;偶数代表稳定的版本。“稳定”和“不稳定”是相对的,“不稳定”版本,“稳定”版本。在Linux内核开发过程中,“不稳定”版本通常是在原有版本基础上增加了新的功能或者新的特性。
如何获取Linux内核代码
在PC上,一般的Linux发行版都提供了内核代码。嵌入式系统没有固定的发行版,需要用户自己获取内核代码。,用户可以打开该地址找到和自己所在物理位置就进的站点,下载自己需要的内核版本代码。高版本Linux内核代码文件比较大,对于国内的用户推荐使用ftp方式下载,或者使用断点续传工具下载,具体情况可根据读者自身的网络情况选择。
下载Linux内核代码后,会得到一个类似“linux-”或者“linux--”形式的压缩文件,“xx”代表版本号。在Linux系统上,通常把这个文件存放在/usr/src目录下,便于以后使用。
编译内核
学习Linux内核最好的开始是编译一次Linux内核代码,通过配置Linux内核可以对内核代码有一个初步的了解。,在本书第20章移植Linux部分会讲解如何交叉编译用于ARM体系结构的Linux内核。
,。内核编译主要分成配置和编译两部分,其中配置是关键,许多问题都是出在配置环节。Linux内核编译配置提供多种方式:
make config :
make menuconfig :
make xconfig :
make oldconfig :
系统调用接口
系统调用是Linux内核提供的,用户空间无法直接使用系统调用。在用户进程使用系统调用必须跨越应用程序和内核的界限。Linux内核向用户提供了统一的系统调用接口,但是在不同处理器上系统调用的方法各不相同。Linux内核提供了大量的系统调用,本书从系统调用的基本原理出发讲解Linux系统调用的方法。
进程管理子系统
当一个用户进程被加载后,会进入就绪态,被加入到就绪态队列,CPU时间被轮转到就绪态队列后,切换到进程的代码,进程被执行,当进程的时间片到了以后被换出。如果进程发生I/O操作也会提前被换出,并且存放到等待队列,当I/O请求返回后,进程又被放入就绪队列。
Linux系统对进程队列的管理设计了若干不同的方法,主要的目的是