当前位置:首页 » 操作系统 » linux内核源码结构

linux内核源码结构

发布时间: 2023-05-02 01:07:42

① 如何确定linux内核源代码目录即,KBUILD的路径

方法一:
确定内核源代码目录通常==文件系统中内核驱动模块的build路径

即/lib/moles/2.6.25-14.fc9.i686/build,这个build通常为链接文件,连接到
/usr/src/kernels/2.6.25-14.fc9.i686
此方法较准确,通常可以写如下脚本实现:
# KBUILD is the path to the Linux kernel build tree. It is usually the
# same as the kernel source tree, except when the kernel was compiled in
# a separate directory.
KBUILD ?= $(shell readlink -f /lib/moles/$(KVERS)/build)

方法二:
自己下载内核源文件包,自己指定内核的编译目录!
不推荐这种做法,还是按照各大发行版的做法比较好!这样不至于在编译下载的某个设备驱动程序时

② Linux内核源码剖析的介绍

《Linux内核源码剖析》是由樊东东,莫澜编着,机械工业出版社于2011年1月1日出版的一本书籍。本书详细论述了Linux内核2.6.20版本中TCP/IP的实现。书中给出了大量的源代码,通过对源代码的详细注释,帮助读者掌握TCP/IP的实现。本书根据协议栈层次,从驱动层逐步论述到传输层,包括驱动的实现、接口层的输入输出、IP层的输入输出以及IP选项的处理、邻居子系统、路由、套接口及传输层等内容,全书基本涵盖了网络体系架构全部的知识点。特别是TCP,包括TCP连接的建立和终止、输入与输出,以及拥塞控制的实现。

③ Linux操作系统的结构

Linux作为一个实时操作系统,具有高效的I/O管理能力,能够处理和存储控制系统所需的大量数据。Linux操作系统的结构一般由Linux内核、命令解释器(Shell)、文件系统以及应用程序四大部分构成。

④ linux内核源码详解

Linux的内核源代码可以从很多途径得到。一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码。
对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解。对于linux内核源代码来讲,我认为,基本要求是:1、操作系统的基本知识; 2、对C语言比较熟悉,最好要有汇编语言的知识和GNU C对标准C的扩展的知识的了解。
另外在阅读之前,还应该知道Linux内核源代码的整体分布情况。我们知道现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序、网络等组成。看一下Linux内核源代码就可看出,各个目录大致对应了这些方面。Linux内核源代码的组成如下(假设相对于linux目录):
arch 这个子目录包含了此核心源代码所支持的硬件体系结构相关的核心代码。如对于X86平台就是i386。
include 这个目录包括了核心的大多数include文件。另外对于每种支持的体系结构分别有一个子目录。
init 此目录包含核心启动代码。
mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/-/mm目录下,如对应于X86的就是arch/i386/mm/fault.c 。
drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。
ipc 此目录包含了核心的进程间通讯代码。
moles 此目录包含已建好可动态加载的模块。
fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。
kernel 主要核心代码。同时与处理器结构相关代码都放在arch/-/kernel目录下。
net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。
lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/-/lib/目录下。
scripts 此目录包含用于配置核心的脚本文件。
Documentation 此目录是一些文档,起参考作用。

⑤ Linux内核源码解析-list.h

开头就说明了这里的 list.h 文件来自 Linux Kernel ( */include/linux/list.h ),只是去除了列表项的硬件预加载部分。

进行宏替换后就是

Note: 没搞懂这里为什么加个 osn 前缀,原本是 list_add ,现在是 osn_list_add 。

可以看到就是个简单的链表节点删除过程,同时把删除节点的前后指针设为无法访问

删除节点后初始化,前后指针都指向自己

从A链表删除后头插法插入B链表

从A链表删除后尾插法插入B链表

先对 list 判空,非空就把 list 链表除头节点外裁剪到 head 头节点在的链表中。函数不安全, list 节点可以继续访问其他节点。

多了一步 list 重新初始化的过程。

(unsigned long)(&((type *)0)->member))) 将0x0地址强制转换为 type * 类型,然后取 type 中的成员 member 地址,因为起始地址为0,得到的 member 的地址就直接是该成员相对于 type 对象的偏移地址了。
所以该语句的功能是:得到 type 类型对象中 member 成员的地址偏移量。
先将 ptr 强制转换为 char * 类型(因为 char * 类型进行加减的话,加减量为 sizeof(char)*offset , char 占一个字节空间,这样指针加减的步长就是1个字节,实现加一减一。)
整句话的意思就是:得到指向 type 的指针,已知成员的地址,然后减去这个成员相对于整个结构对象的地址偏移量,得到这个数据对象的地址。

就是从前往后,从后往前的区别

Note: 从head节点开始(不包括head节点!)遍历它的每一个节点!它用n先将下一个要遍历的节点保存起来,防止删除本节点后,无法找到下一个节点,而出现错误!

已知指向某个结构体的指针pos,以及指向它中member成员的指针head,从下一个结构体开始向后遍历这个结构体链

Note: 同理,先保存下一个要遍历的节点!从head下一个节点向后遍历链表。

list.h使用说明
linux内核list.h分析(一)
linux内核list.h分析(二)
【Linux内核数据结构】最为经典的链表list

热点内容
编程大冒险 发布:2024-05-20 03:19:27 浏览:636
阿瓦隆九个人怎么配置 发布:2024-05-20 02:57:47 浏览:757
sqlnotinexcept 发布:2024-05-20 02:53:10 浏览:341
激光切割编程教程难吗 发布:2024-05-20 02:49:57 浏览:925
sqlbool 发布:2024-05-20 02:49:57 浏览:721
如何把文件压缩到最小 发布:2024-05-20 02:25:03 浏览:452
javash脚本文件 发布:2024-05-20 01:43:11 浏览:830
安卓手机如何登陆刺激战场国际服 发布:2024-05-20 01:29:02 浏览:861
服务器核库怎么找 发布:2024-05-20 01:28:14 浏览:375
盐存储水分 发布:2024-05-20 01:09:03 浏览:810