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




linux的内核源码在哪linux的内核源码
①generic Linux默认的内核种类。②preempt 这种内核是基于generic内核的源代码进行构建的,但在配置中加入了不同的参数设置来减少延时,也被称为软实时内核。③realtime 基于vanilla内核源代码树,并应用了IngoMolnar维护的PREEMPT_RT补丁,也称为硬实时内核。④lowlatency 和preempt内核非常相似,也是基于...

如何结合linux内核源码理解SYN
SYN_RECV状态,顾名思义,是收到SYN包后应该置的状态。关于SYN_RECV状态,受某些教科书的误导,我以前一直理解为服务器收到SYN包后应该置此状态。也没细想到底是置那个socket的状态,最近在看三次握手协议在linux内核中的实现时,才仔细思考这个问题应该是置连接套接字的状态而非监听套接字的状态。通常,...

linux内核完全剖析linux内核完全
注意,不要总到http:\/\/www.kernel.org\/去下载,最好使用它的镜像站点下载。请在http:\/\/www.kernel.org\/mirrors\/里找一个合适的下载点,再到pub\/linux\/kernel\/v2.6\/目录下去下载2.4.23内核。代码目录结构 在阅读源码之前,还应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存...

Linux内核源码如何编译
不过我用过这种方法,貌似不好用。重启过后你编译的内核源码就成功地运行了,如果出现问题,比如鼠标不能用,usb不识别等问题就好好查查你的make menuconfig这一步,改好后就万事ok了。最后再用uname -r看看你的linux内核版本。是不是你刚下的那个呢!有没有成就感?打字不易,如满意,望采纳。

Linux内核源码如何编译??Ubuntu源代码在哪里呢?
编译linux内核步骤:1、安装内核 如果内核已经安装(\/usr\/src\/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是\/RedHat\/RPMS\/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx...

如何编译Linux内核
一、编译环境 ubuntu 5.10,要编译的内核源码版本2.6.12 二、下载并解压源代码 首先从linux内核的官网www.kernel.org把源代码下载下来。为了和后面实验要求符合,我们要下载使用O(1)调度器的源码。因此这里下载了2.6.12版本源码。下载 下linux-2.6.12.tar.bz2,将下载源码放入\/usr\/src\/目录...

linux命令源码怎么看linux命令源码
Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于Linux-2.4.23目录): 1.arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是IntelCPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。 2.include目录包括编译核心所需要的大部分头文件,...

我在解压安装Linux 内核源代码时,总是错误!很纠结,寻求帮助,#tar xvz...
貌似你的源码包下载的不完整吧?linux中下载的东西如果不完整或没完成系统也不会删掉半截的文件,所以建议你重新到www.kernel.org下一个完整的包

Linux内核完全剖析内容简介
接下来,作者详细解读了Linux内核源代码的目录结构,对内核程序和文件进行了详尽注释和讲解。为了加深读者对内核工作原理的直观理解,书的尾章提供了多个围绕Linux 1.1系统的实验。这些实验中的相关程序可在《Linux内核完全剖析》的配套网站www.oldlinux.org上获取。

Linux内核注释内容简介
本书以0.95版本Linux内核源代码为研究对象,通过详尽的逐行注释,帮助读者迅速理解Linux操作系统的核心功能和实现机制。这个早期内核虽版本较旧,但代码量较少,却涵盖了基本功能的全面剖析,是深入学习Linux内核的良好起点。它详细讲述了内核的历史演变和版本结构,以及操作系统与硬件的交互基础和内核架构。本...

毕节地区13527299351: 解读Linux操作系统内核源码有什么好方法?
仪宋强力: 针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制; 一.核心源程序的文件组织: 1....

毕节地区13527299351: 如何读懂linux内核源码? -
仪宋强力: Linux的内核源代码可以从很多途径得到.一般来讲,在安装的linux系统下,/usr/src/linux目录下的东西就是内核源代码.对于源代码的阅读,要想比较顺利,事先最好对源代码的知识背景有一定的了解.对于linux内核源代码来讲,我认为,基本...

毕节地区13527299351: 怎么看linux内核源码, -
仪宋强力: 一定要结合书本,在明白了原理的基础上去看,推荐《linux内核源代码情景分析》而且我建议不要所有都看,而是看一些核心代码就行了,如进程调度、内存管理等代码.如果你有专业需要,可以看一些紧相关如协议栈方面的代码.

毕节地区13527299351: Linux的内核代码如何编译 -
仪宋强力: 1、安装内核 如果内核已经安装(/usr/src/目录有linux子目录),跳过 如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,...

毕节地区13527299351: 怎样解读LINUX系统的源代码 -
仪宋强力: 解读LINUX 的源代码,这一点阻挡了许多人的热情.我的建议是:随着技术的发展,LINUX系统也向着桌面化发展,在内核内加入了越来越多的代码,是内核越来越臃肿,增加了阅读的难度. 1.一般情况下LINUX的源代码位于/USR/LINUX下2.其中的ARCH目录下为一些重要的代码.3.INCLUDE目录下是编译系统所需要的头文件4.其他的一些文件大多可以根据其所在文件夹的名字,以及自身的名字来 判断.蒲У姆绞接枰源娣

毕节地区13527299351: 怎么使用,手上有一本linux内核2.4版源代码分析大全 -
仪宋强力: 一般在Linux系统中的/usr/src/linux*.*.*(*.*.*代表的是内核版本,如2.4.23)目录下就是内核源代码(如果没有类似目录,是因为还没安装内核代码).另外还可从互连网上下载.注意,不要总到去下载,最好使用它的镜像站点下载.请在mirrors/...

毕节地区13527299351: 求Linux内核代码分析!有点不懂
仪宋强力: 这么简单还用问?解析 :前面是个空值,即:若pos不为空,则pos为其自身.等效于:(pos)?(pos):list_entry(head,typeof(*pos),member)注意内核格式::前后都加了空格.

毕节地区13527299351: 如何查看linux系统源码 -
仪宋强力: 例如:想在Linux系统下查看cat命令工具的源码,方法如下:1、查看工具的路径12$ whereis cat cat: /bin/cat /usr/share/man/man1/cat.1.gz2、查看工具所属的包123$ dpkg -S /bin/cat coreutils: /bin/cat coreutils就是cat的源码包名3、下载工具源码...

毕节地区13527299351: 如何修改linux内核源码并调试 -
仪宋强力: 将修改的代码添加进内核树,然后修改makefile和config文件,从新编译.

毕节地区13527299351: 请教一下对Linux操作系统内核分析方法?高手请进 -
仪宋强力: Linux的最大的好处之一就是它的源码公开.同时,公开的核心源码也吸引着无数的电脑爱好者和程序员;他们把解读和分析Linux的核心源码作为自己的最大兴趣,把修改Linux源码和改造Linux系统作为自己对计算机技术追求的最大目标. Linux...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网