0

0

Linux内核源代码阅读经验分享

WBOY

WBOY

发布时间:2024-01-26 21:57:32

|

1601人浏览过

|

来源于ITcool

转载

随着linux的逐渐普及,现今有不少人对于Linux的安装及设置早已比较熟悉了。与Linux的蓬勃发展相适应,想深入了解Linux的也越来越多。而要想深入了解Linux,就须要阅读和剖析linux内核的源代码。

Linux的内核源代码可以从好多途径得到。通常来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。另外还可以从互连网上下载,解压缩后文件通常也都坐落linux目录下。内核源代码有好多版本,目前最新的稳定版是2.2.14。

许多人对于阅读Linux内核有一种焦虑感,虽然大可毋须。其实,象Linux内核这样大而复杂的系统代码,阅读上去确实有好多困难,而且也不象想像的这么高不可攀。只要有恒心,困难都是可以克服的。也不用害怕水平不够的问题,事实上linux关机命令,有好多事情我们不都是从不会到会,边干边学的吗?

任何事情做上去都须要有技巧和工具。正确的方式可以指导工作,良好的工具可以事半功倍。对于Linux内核源代码的阅读也同样这么。下边我就把自己阅读内核源代码的一点经验介绍一下,最后介绍Window平台下的一种阅读工具。

对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲linux 内核代码阅读工具,我觉得,基本要求是:1、操作系统的基本知识;2、对C语言比较熟悉,最好要有汇编语言的知识和GNUC对标准C的扩充的知识的了解。另外在阅读之前,还应当晓得Linux内核源代码的整体分布情况。我们晓得现代的操作系统通常由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了那些方面。Linux内核源代码的组成如下(假定相对于linux目录):

arch这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。

include这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。

init此目录包含核心启动代码。

mm此目录包含了所有的显存管理代码。与具体硬件体系结构相关的显存管理代码坐落arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c。

drivers系统中所有的设备驱动都坐落此目录中。它又进一步界定成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。

ipc此目录包含了核心的进程间通信代码。

modules此目录包含已建好可动态加载的模块。

fsLinux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。

linux内核代码在线_linux内核代码怎么看_linux 内核代码阅读工具

kernel主要核心代码。同时与处理器结构相关代码都置于arch/*/kernel目录下。

net核心的网路部份代码。上面的每位子目录对应于网路的一个方面。

lib此目录包含了核心的库代码。与处理器结构相关库代码被置于arch/*/lib/目录下。

scripts此目录包含用于配置核心的脚本文件。

Documentation此目录是一些文档,起参考作用。

清楚了源代码的结构组成后就可以着手阅读。对于阅读技巧或则说次序,有所谓的横向与纵向之分。所谓横向就是沿着程序的执行次序逐渐进行;所谓纵向查看linux是什么系统,就是分模块进行。虽然她们之间不是绝对的,而是常常结合在一起进行。对于Linux源代码来讲,启动的代码就可以沿着linux的启动次序一步一步来,它的大致流程如下(以X86平台为例):

./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c中的start_kernel()。而对于象显存管理等部份,则可以单独掏出来进行阅读剖析。我的感受是:开始最好按次序阅读启动代码,之后进行专题阅读,如进程部份,显存管理部份等。在每位功能函数内部应当一步步来。实际上这是一个反复的过程linux 内核代码阅读工具,不可能读一遍就理解。

相关专题

更多
C语言变量命名
C语言变量命名

c语言变量名规则是:1、变量名以英文字母开头;2、变量名中的字母是区分大小写的;3、变量名不能是关键字;4、变量名中不能包含空格、标点符号和类型说明符。php中文网还提供c语言变量的相关下载、相关课程等内容,供大家免费下载使用。

387

2023.06.20

c语言入门自学零基础
c语言入门自学零基础

C语言是当代人学习及生活中的必备基础知识,应用十分广泛,本专题为大家c语言入门自学零基础的相关文章,以及相关课程,感兴趣的朋友千万不要错过了。

612

2023.07.25

c语言运算符的优先级顺序
c语言运算符的优先级顺序

c语言运算符的优先级顺序是括号运算符 > 一元运算符 > 算术运算符 > 移位运算符 > 关系运算符 > 位运算符 > 逻辑运算符 > 赋值运算符 > 逗号运算符。本专题为大家提供c语言运算符相关的各种文章、以及下载和课程。

352

2023.08.02

c语言数据结构
c语言数据结构

数据结构是指将数据按照一定的方式组织和存储的方法。它是计算机科学中的重要概念,用来描述和解决实际问题中的数据组织和处理问题。数据结构可以分为线性结构和非线性结构。线性结构包括数组、链表、堆栈和队列等,而非线性结构包括树和图等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

256

2023.08.09

c语言random函数用法
c语言random函数用法

c语言random函数用法:1、random.random,随机生成(0,1)之间的浮点数;2、random.randint,随机生成在范围之内的整数,两个参数分别表示上限和下限;3、random.randrange,在指定范围内,按指定基数递增的集合中获得一个随机数;4、random.choice,从序列中随机抽选一个数;5、random.shuffle,随机排序。

597

2023.09.05

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

523

2023.09.20

c语言get函数的用法
c语言get函数的用法

get函数是一个用于从输入流中获取字符的函数。可以从键盘、文件或其他输入设备中读取字符,并将其存储在指定的变量中。本文介绍了get函数的用法以及一些相关的注意事项。希望这篇文章能够帮助你更好地理解和使用get函数 。

639

2023.09.20

c数组初始化的方法
c数组初始化的方法

c语言数组初始化的方法有直接赋值法、不完全初始化法、省略数组长度法和二维数组初始化法。详细介绍:1、直接赋值法,这种方法可以直接将数组的值进行初始化;2、不完全初始化法,。这种方法可以在一定程度上节省内存空间;3、省略数组长度法,这种方法可以让编译器自动计算数组的长度;4、二维数组初始化法等等。

599

2023.09.22

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

5

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.7万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.2万人学习

微信小程序开发之API篇
微信小程序开发之API篇

共15课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号