嵌入式 Linux开发Kernel移植(一)——kernel内核简介
一、Linux Kernel
1、linux kernel简介
Linux kernel是芬兰黑客 Linus Torvalds 1991年在英特尔x86架构上用C语言开发的自由免费的符合POSIX标准的类Unix操作系统。
Linux kernel是一个一体化内核(monolithic kernel)系统,提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件,不是一套完整的操作系统。
内核空间与用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户控件到内核空间的转移。
2、linux kernel架构
系统调用接口SCI:
SCI层为用户空间空间提供了一套标准的系统调用函数来访问linux内核,搭起了用户空间到内核空间的桥梁。
进程调度管理PM:
进程管理的重点是创建进程(fork, exec), 停止进程(kill, exit), 并控制它们之间的通信(signal或者POSIX机制). 进程管理还包括控制活动进程如何共享CPU,即进程调度。
内存管理MM:
内存管理的主要作用是控制多个进程安全地共享内存区域
网络协议栈:
内核协议栈为linux提供了丰富的网络协议实现。
Virtual File System:
VFS隐藏各种文件系统的具体细节,为文件操作提供个统一的接口。
设备驱动:
设备驱动模块是linux kernel的一部分,是内核中的硬件设备管理模块。
二、linux发行版本
Linux的发行版本是一些组织或厂家,将Linux kernel与外围实用程序(Utilities)软件和文档包装起来,并提供一些系统安装界面和系统配置、设定与管理工具,就构成了一种发行版本(distribution)。Linux的发行版本实质就是Linux kernel再加上外围的实用程序组成的软件包。相对于Linux kernel版本,发行版本的版本号随发布者的不同而不同,与Linux系统内核的版本号是相对独立的。因此把SUSE、RedHat、Ubuntu、 Slackware等直接说成是Linux是不确切的,它们是Linux的发行版本。根据 GPL准则,linux发行版本虽然都源自一个内核,并且都有自己各自的贡献,但都没有自己的版权。Linux的各个发行版本(distribution),都是使用Linus主导开发并发布的同一个Linux内核,因此在内核层不存在什么兼容性问题。每个版本都不一样的感觉,只是在发行版本的最外层才有所体现,而绝不是Linux本身特别是内核不统一或是不兼容。
目前最流行的几个正式版本有:SUSE、RedHat、Fedora、 Debian、Ubuntu、CentOS、Gentoo,Mint等等,用户可根据自己的经验和喜好选用合适的Linux发行版。
三、Kernel的模块化
Linux kernel是一个代码量巨大、功能极其复杂的工程项目,因此各功能模块需要模块化设计,以实现功能模块内部各部分之间的高内聚、功能模块之间的低耦合。
Linux kernel的模块化设计使得对kernel的各功能模块的裁剪变得简单灵活,既可以在kernel编译前进行配置,也可以在kernel运行时将编译好的功能模块动态加载到kernel空间中链接运行。
kernel模块是Linux kernel向外部提供的一个接口,全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为内核模块。Linux kernel在编译前可以根据需要灵活裁剪配置模块,也可以将kernel功能模块编译,在kernel运行时动态加载链接到kernel空间中运行。