/usr/src/linux-source-3.8.0/drivers/gpu/drm/radeon 这个文件夹以下 去找到这个文件 mkregtable.c  打开,就能够看到了. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /** * container_of - cast a member of a structure out to the containing structure * @ptr: the…
原文:https://book.2cto.com/201304/19615.html 由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,使得Nginx可以拥有更高的性能. 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态Web内容服务器.反向代理服务器或是提供图片缩略图功能(实时压缩图片)的服务器时,其内核参数的调整都是不同的.这里只针对最通用的.使Nginx支持更多并…
内核第一宏 list_entry()有着内核第一宏的美称,它被设计用来通过结构体成员的指针来返回结构体的指针.现在就让我们通过一步步的分析,来揭开它的神秘面纱,感受内核第一宏设计的精妙之处. 整理分析的思路 list_entry()在内核源代码/include/linux目录下的list.h中被定义,如下: 在list_entry的定义中,我们看到出现了另外一个宏container_of.而list_entry这个宏正是通过container_of去实现的.所以我们要先进入container _…
Linux Kernel Version 4.14 1. container_of是干什么的? 已知一个结构体中某个成员的首指针,那么就可以通过宏container_of来获得此结构体的首指针 2 先看看container_of是如何定义的吧 #define container_of(ptr, type, member) \ (type *)(()->member) 解析一下各参数: ptr: 结构体成员的指针 type: 结构体的类型 member: 结构体成员的名字 2. 举一个例子 2.1…
为了调试一个功能,在一个内核模块中,增加了一个全局变量,用来统计自有skb池的申请情况. 因为是临时增加,所以没有考虑性能,一开始只是一个fail的统计,数量不多,也不太考虑是否有计数丢失的情况,毕竟那个卖火车票的例子已经让很多人知道了并发导致的计数丢失. 因为只是一个简单统计,这样做无可厚非. 后来有人维护的时候,增加了一个success的统计,结果发现增加该变量前后cpu占用增加了一个点.为了排除是伪共享的行为,我将两个变量中间增加了一些reserve的空间,结果还是如此.去掉success…
4.1 typeof 关键字 ANSI C 定义了 sizeof 关键字,用来获取一个变量或数据类型在内存中所占的存储字节数.GNU C 扩展了一个关键字 typeof,用来获取一个变量或表达式的类型.这里使用关键字可能不太合适,因为毕竟 typeof 还没有被写入 C 标准,是 GCC 扩展的一个关键字.为了方便,我们就姑且称之为关键字吧. 通过使用 typeof,我们可以获取一个变量或表达式的类型.所以 typeof 的参数有两种形式:表达式或类型. int i ; ; ​ typeof(i…
20135316王剑桥<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC 1000029000 第一周 http://www.cnblogs.com/20135316wjq/p/5222424.html 第二周 http://www.cnblogs.com/20135316wjq/p/5245035.html 第三周 http://www.cnblogs.com/20135316wjq/p/5271576.html 第四周 http:/…
Linux内核期中总结 一.计算机是如何工作的 个人理解:计算机就是通过和用户进行交互,执行用户的指令,这些指令存放在内存中,通过寄存器存储,堆栈变化,来一步步顺序执行. 二.存储程序计算机工作模型 1.冯诺依曼体系结构-存储程序计算机 硬件角度(主板):通过cpu中IP寄存器指向一个代码段运行某些指令:寄存区,指向内存的某一块区域(代码段) 程序员角度:将cpu抽象为一个for循环,只是执行下一条指令,从内存中取到下一条指令的内容.内存保存指令和数据,cpu负责解释和执行,通过总线连接. 三.…
版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创造出自己的内核^_^ Linux的启动代码真的挺大,从汇编到C,从Makefile到LDS文件,需要理解的东西很多.毕竟Linux内核是由很多人,花费了巨大的时间和精力写出来的.而且直到现在,这个世界上仍然有成千上万的程序员在不断完善Linux内核的代码.今天我们主要讲解的是Linux-2.6.22…
382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu16.04 + GDB -> QEMU -> linux-3.9.4 + MenuOS 二.实验目的 1.理解Linux内核中创建一个进程的过程: 2.理解Linux内核加载可执行程序的过程: 3.理解Linux内核中的进程调度时机以及进程切换过程. 三.实验过程及结果 1.对于Linux内核中进程…