嵌入式技术
Linux是一种开源的操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰大学生Linus Torvalds于1991年开发的一款全新的操作系统。那时,作为芬兰赫尔辛基大学的一名学生的linus,正为不能随心所欲使用强大而自由的Unix系统而苦恼。Linus热衷于使用Minix,一种教学用的廉价Unix,但是,他不能轻易修改和发布该系统的源代码,也不能对Minix开发者所作的设计进行修改,基于此linus开始了开发自己的操作系统,并于1991年年底在internet上发布了早期版本,由此Linux内核诞生。Linux内核的主要功能有以下几个方面:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化、系统调用等。
通过Linux内核官网www.kernel.org下载自己需要的Linux内核源码,笔者下载的是4.14版本的源码。
了解Linux内核源码各个目录和文件的作用,对于我们以后进行Linux内核源码阅读和Linux内核编程大有益处。
arch是architecture的缩写,所有与体系结构相关的代码都在这个目录,Linux支持的每种体系结构在arch目录下都有对应的子目录,例如arm子目录是arm32位体系相关代码,arm64子目录是arm64位体系相关代码,x86子目录是intel x86体系相关代码。每个体系结构子目录下又包含和启动相关的代码目录boot,和内核配置相关的代码目录configs,和体系结构相关的头文件目录include,和具体体系结构相关的内存管理代码目录mm等。
块设备驱动所在目录。块设备是以数据块方式发送和接收数据的设备。
认证相关的一些代码实现。
内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。例如SHA1加密算法的代码。
内核帮助文档目录,是学习内核了解内核实现机制的重要途径,关于内核的一些说明信息,在这个目录下会有帮助手册。
各种设备驱动代码、驱动架构代码所在目录,这个目录是内核中最庞大的一个目录,内核源码数量的一半以上都是这个目录贡献的。显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这儿找到。
fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来说,一个摄像头管理它自己的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通讯。否则,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件同样有助于将Linux系统发送消息给该设备。这样Linux系统可以告诉摄像头重新调整或关闭摄像头。
虚拟文件系统(VFS)的代码和各种不同类型的文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。比如ext4文件系统对应的是fs/ext4目录,fat文件系统对应的是fs/fat目录。一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能是本地的物理上可以访问的设备,比如硬盘、U盘、Flash,他们分别使用系统ext4/UBIFS文件系统。还有一些虚拟文件系统,比如proc、sysfs等,他们以一个标准文件系统出现。然而,他们的文件只存在于内存中,并不占磁盘空间。
这个目录包含了内核中大部分的头文件,按照不同的功能分散在不同的子目录下。例如与平台相关的头文件在/include/linux子目录下。
内核的初始化代码。包括main.c、创建早期用户空间的代码及其他初始化代码。do_mounts.c内核启动后挂载根文件系统。
IPC(进程间通信)。它包含了共享内存、信号量、消息队列及其他形式的IPC代码。
内核中核心的部分,包括进程的调度(sched.c),以及进程的创建和撤销(fork.c和exit.c)等。
此目录包含了核心的库代码。实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy)以及有关sprintf和atoi系列函数。
此目录包含了与体系结构无关的部分内存管理代码。与体系结构相关的内存管理代码位于arch目录相对应的子目录下的mm目录。
核心的网络部分代码,实现了各种常见的网络协议,如TCP/IP。
一些内核编程的范例。
该目录下没有内核代码,只是包含了用来配置内核的脚本文件。当运行make menuconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。
这个目录下包含了不同的Linux安全模型的代码。它对计算机免于受到病毒和黑客的侵害很重要。包括SELinux安全模块。
ALSA,OSS音频设备的驱动核心代码和常用设备驱动。
这个文件夹中包含了和内核交互的工具。
实现了用于打包和压缩的cpio等。
内核虚拟化相关的代码。包括kvm等。
许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。
贡献者列表
这是一个设置一些内核设定的脚本。例如设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。
这个脚本会在开发人员配置内核的时候用到。
这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。这是内核问题反馈的途径。
这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。
这个文档提供给开发者想要知道的如何编译内核的信息。
本文简要介绍了Linux内核源码树下各个目录的作用,以及它们主要实现了哪些功能,是我们以后进行Linux内核开发的基础。
全部0条评论
快来发表一下你的评论吧 !