嵌入式Linux系统移植(Linux内核初步分析)
内核概述:
Linux是类似UNIX的操作系统,而Linux系统的内核称为Linux kernel,这个操作系统的核心部分提供了对硬件的统一接口。内核是在引导时装入的程序。内核识别硬件,初始化启动脚本,并且运行网络和终端守护程序; 当启动完毕之后,内核又成为访问硬件的通路,它用来提供用户层程序和硬件之间的接口;
其功能包括: 执行发生在多任务系统中的实际任务转换、处理读写磁盘的需求、处理网络接口、管理内存。
内核的分类:
常见的内核分为微内核、单片机内核、还有超内核。
微内核技术应用非常广泛,常见的UNIX、Windows操作系统都是微内核的。微内核架构把底层的系统服务置于内核中运行,而高级别的服务则置于用户空间运行。
单片机内核除了与硬件相关的服务在内核中运行外,与硬件无关的一些关键的服务也在内核空间执行,包括文件系统、网络、CPU多路服务等。这样执行效率比较高。
超内核是一个比较新的概念,它的基本思想是为运行在用户层的进程安全的分配和协调各种硬件资源。目前还没有操作系统的内核是超内核的,扔处于理论研究阶段。
Linux的内核是一个单片机技术和微内核技术的混合体。Monolithic方法为了提高效率将大多数的基本服务放到内核空间中,但是它们和本地硬件捆绑在一起,不利于移植。而Microkerner技术使得移植性比较好。
内核版本指的是在Linuxs领导下的开发小组开发出的系统的版本号。一般来说,以序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.6.16,而序号的第二位奇数的版本一般有一些最新的实验性的东西加入,是不一定很稳定的测试版本,如2.5.75。
模块概述
Linux的模块是可以在系统启动之后任何时候动态连接到核心的代码块。它们可以在不被需要的时候从核心删除并卸载。大多数Linux核心模块是设备驱动程序,伪设备驱动程序比如网络驱动程序或文件系统。
可以使用insmod和rmmod命令明确地加载和下载Linux核心模块,或者在需要这些模块的时候由核心自己要求核心守护进程 加载和卸载这些模块。 一旦核心加载,它就和普通核心代码一样成为核心的一部分。它和任何核心代码拥有相同的权利和义务: 换句话说,Linux核心模板和所有的核心代码或设备驱动程序一样可能让核心崩溃。
内核的逻辑结构
Linux内核主要由五个子系统组成:
进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
进程调度(SCHED):控制进程对CPU的访问
内存管理(MM):允许多个进程安全的共享主内存区域
进程间通讯(IPC):支持进程间各种通信机制
虚拟文件系统(VFS):隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。
网络接口(NET):提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。
内核数据结构:
内核源码的目录结构: