linux内核源码编译
Linux内核源码树介绍
Linux内核简介
Linux是一种开源的操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰大学生Linus Torvalds于1991年开发的一款全新的操作系统。那时,作为芬兰赫尔辛基大学的一名学生的linus,正为不能随心所欲使用强大而自由的Unix系统而苦恼。Linus热衷于使用Minix,一种教学用的廉价Unix,但是,他不能轻易修改和发布该系统的源代码,也不能对Minix开发者所作的设计进行修改,基于此linus开始了开发自己的操作系统,并于1991年年底在internet上发布了早期版本,由此Linux内核诞生。Linux内核的主要功能有以下几个方面:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化、系统调用等。
获取Linux内核源码
通过Linux内核官网www.kernel.org下载自己需要的Linux内核源码,笔者下载的是4.14版本的源码。
【资料图】
Linux内核源码树展示
Linux内核源码目录和文件介绍
了解Linux内核源码各个目录和文件的作用,对于我们以后进行Linux内核源码阅读和Linux内核编程大有益处。
arch目录
arch是architecture的缩写,所有与体系结构相关的代码都在这个目录,Linux支持的每种体系结构在arch目录下都有对应的子目录,例如arm子目录是arm32位体系相关代码,arm64子目录是arm64位体系相关代码,x86子目录是intelx86体系相关代码。每个体系结构子目录下又包含和启动相关的代码目录boot,和内核配置相关的代码目录configs,和体系结构相关的头文件目录include,和具体体系结构相关的内存管理代码目录mm等。
block目录
块设备驱动所在目录。块设备是以数据块方式发送和接收数据的设备。
certs目录
认证相关的一些代码实现。
crypto目录
内核本身所用的加密API,实现了常用的加密和散列算法,还有一些压缩和CRC校验算法。例如SHA1加密算法的代码。
Documentation目录
内核帮助文档目录,是学习内核了解内核实现机制的重要途径,关于内核的一些说明信息,在这个目录下会有帮助手册。
drivers目录
各种设备驱动代码、驱动架构代码所在目录,这个目录是内核中最庞大的一个目录,内核源码数量的一半以上都是这个目录贡献的。显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序都可以在这儿找到。
firmware目录
fireware中包含了让计算机读取和理解从设备发来的信号的代码。举例来说,一个摄像头管理它自己的硬件,但计算机必须了解摄像头给计算机发送的信号。Linux系统会使用vicam固件(firmware)来理解摄像头的通讯。否则,没有了固件,Linux系统将不知道如何处理摄像头发来的信息。另外,固件同样有助于将Linux系统发送消息给该设备。这样Linux系统可以告诉摄像头重新调整或关闭摄像头。
fs目录
虚拟文件系统(VFS)的代码和各种不同类型的文件系统的代码都在这个目录中。Linux支持的所有文件系统在fs目录下面都有一个对应的子目录。比如ext4文件系统对应的是fs/ext4目录,fat文件系统对应的是fs/fat目录。一个文件系统是存储设备和需要访问存储设备的进程之间的媒介。存储设备可能是本地的物理上可以访问的设备,比如硬盘、U盘、Flash,他们分别使用系统ext4/UBIFS文件系统。还有一些虚拟文件系统,比如proc、sysfs等,他们以一个标准文件系统出现。然而,他们的文件只存在于内存中,并不占磁盘空间。
include目录
这个目录包含了内核中大部分的头文件,按照不同的功能分散在不同的子目录下。例如与平台相关的头文件在/include/linux子目录下。
init目录
内核的初始化代码。包括main.c、创建早期用户空间的代码及其他初始化代码。do_mounts.c内核启动后挂载根文件系统。
ipc目录
IPC(进程间通信)。它包含了共享内存、信号量、消息队列及其他形式的IPC代码。
kernel目录
内核中核心的部分,包括进程的调度(sched.c),以及进程的创建和撤销(fork.c和exit.c)等。
lib目录
此目录包含了核心的库代码。实现了一个标准C库的通用子集,包括字符串和内存操作的函数(strlen、mmcpy)以及有关sprintf和atoi系列函数。
mm目录
此目录包含了与体系结构无关的部分内存管理代码。与体系结构相关的内存管理代码位于arch目录相对应的子目录下的mm目录。
net目录
核心的网络部分代码,实现了各种常见的网络协议,如TCP/IP。
samples目录
一些内核编程的范例。
scripts目录
该目录下没有内核代码,只是包含了用来配置内核的脚本文件。当运行make menuconfig之类的命令配置内核时,用户就是和位于这个目录下的脚本进行交互的。
security目录
这个目录下包含了不同的Linux安全模型的代码。它对计算机免于受到病毒和黑客的侵害很重要。包括SELinux安全模块。
sound目录
ALSA,OSS音频设备的驱动核心代码和常用设备驱动。
tools目录
这个文件夹中包含了和内核交互的工具。
usr目录
实现了用于打包和压缩的cpio等。
virt目录
内核虚拟化相关的代码。包括kvm等。
COPYING文件
许可和授权信息。Linux内核在GPLv2许可证下授权。该许可证授予任何人有权免费去使用、修改、分发和共享源代码和编译代码。
CREDITS文件
贡献者列表
Kbuild文件
这是一个设置一些内核设定的脚本。例如设定一个ARCH变量,这是开发者想要生成的内核支持的处理器类型。
Kconfig文件
这个脚本会在开发人员配置内核的时候用到。
MAINTAINERS文件
这是一个目前维护者列表,他们的电子邮件地址,主页,和他们负责开发和维护的内核的特定部分或文件。这是内核问题反馈的途径。
Makefile文件
这个脚本是编译内核的主要文件。这个文件将编译参数和编译所需的文件和必要的信息传给编译器。
README文件
这个文档提供给开发者想要知道的如何编译内核的信息。
总结
本文简要介绍了Linux内核源码树下各个目录的作用,以及它们主要实现了哪些功能,是我们以后进行Linux内核开发的基础。
关键词:
相关阅读
-
linux内核源码编译
linux内核源码编译-Linux是一种开源的操作系统内核。它是一个用C语言写 -
教育部:严防暑期学科类培训机构违规开...
(原标题:教育部办公厅关于做好2023年暑期校外培训治理有关工作的通知) -
信阳市浉河区环境污染防治攻坚会议召开
6月26日,信阳市浉河区召开环境污染防治攻坚会议,传达省市会议精神, -
第十四届夏季达沃斯论坛今日在天津开幕
世界经济论坛第十四届新领军者年会现场。人民网记者崔新耀摄世界经济论 -
明阳电路:董事会秘书蔡林生拟减持股份...
证券时报e公司讯,明阳电路(300739)6月27日晚间公告,公司副总经理、董 -
亿缕阳光|这一刻,值了|环球即时
祝考生们得偿所愿,奔赴全新的明天!出品:陈星星监制:李天亮制片:王 -
6月27日新股速递|热点聚焦
一、安凯微(股票代码:688620)6月27日,安凯微登陆上交所科创板。公 -
世界看点:「中国财富报道」就在明晚!...
明晚(6月28日24时),新一轮成品油调价窗口即将开启。本周期内,国内 -
恭喜姚明!恭喜中国男篮!世界杯劲敌退...
恭喜姚明!恭喜中国男篮!世界杯劲敌退赛,乔帅或圆梦巴黎奥运会,姚明, -
焦点热门:美国财长耶伦将于下月访华?外...
6月27日,外交部发言人毛宁主持例行记者会。有记者提问,有报道称,美 -
祝贺子公司优咔科技荣膺上海市专精特新...
优咔科技荣膺 上海市专精特新企业认定 —2023— 上海市经... -
宏景科技:公司提供的智慧城市解决方案...
同花顺金融研究中心6月27日讯,有投资者向宏景科技提问,董秘你好请问 -
N锡南收盘涨20.59% 首日成交6.81亿元
N锡南(301170)今日上市,开盘上涨19 12%,截至收盘涨幅扩大至20 59%, -
钠离子电池概念股震荡反弹,维科技术涨停
6月27日上午,钠离子电池概念股震荡反弹,维科技术涨停,美联新材、传 -
广东韩妃医疗美容医院正规吗 怎么样 ...
正规的机构都有实力的保障,广东韩妃医疗美容医院如今成为了求美者们都 -
安联人寿迎新任董事长 2022年营收增12%...
安联人寿迎新任董事长2022年营收增12%净利降33% -
26场23球8助!巴黎弃将实现蜕变,拒绝姆...
表现实在是太糟糕了,所以大巴黎也想要花小钱办大事,让伊卡尔迪回归救 -
中国独角兽排行榜2023:总规模超13万亿...
核心观点1、2023年,我国独角兽整体规模突破13万亿,去年9 4万亿,继续 -
四川汶川突发山洪泥石流灾害,7人失联_...
27日,四川省汶川县应急管理局发布通报,汶川突发山洪泥石流灾害,7 -
汉诗·新月 环球热点评
1、《汉诗·新月》是一本2017年出版的图书。2、由长江文艺出版社出...