- 博客(11)
- 收藏
- 关注
原创 mini2440-i2c驱动分析
在s3c2440的i2c驱动框架中, 分2个部分的内容, 一部分是i2c-adapter初始化, 一部分是i2c-driver的初始化. 针对s3c2440自带的eeprom, 走读一下代码, 看看哪些东西值的我们学习和借鉴.s3c2440上有若干个i2c-adapter, 每一个对应一条i2c总线, 每个总线上可以挂多个i2c 设备, 读写这些设备的方式是操作i2c-adapter的寄存器....
2020-03-18 00:00:59
395
原创 e1000e网卡驱动分析笔记
驱动中有e1000的e1000e两个版本, 差别不大, e1000e使用了msix, 更先进一点点. 比较难懂的都是一些基础系的东西, 如下1) PCIE的配置空间初始化2) msix机制及初始化3) napi机制4) dma机制下面一个个回答这些问题, 因为内容实在太多, 没法每个问题将的很清楚, 而且我们这个帖子主要是分析e1000e, 只能每个初步说下机理, 如果需要...
2019-11-04 14:47:31
3178
2
转载 段间跳转指令jmpi和实模式寻址(转)
jmpi是段间跳转指令,用于x86实模式下, 如:BOOTSEG = 0x0c70 jmpi 4, #BOOTSEG 假如当前段CS==00h,那么执行此指令后将跳转到段CS==0x0c70,当然段cs的值也变为0x0c70,接下来将执行指令0x0c70:0004处的指令。 实模式下寻址是为了兼容80
2015-05-20 17:32:51
810
原创 openwrt dns解析流程
openwrt的dns由dnsmasq(dns server 和 dhcp server的合并)实现,默认配置为dns转发模式。由于wan口为dhcp client, 则dhcp server在启动时,将上级路由的ip,作为本路由的nameserver,实现dns转发。lan口为dhcp server,因此,下级设备自动获取的nameserver即为本路由的ip地址。在tmp下
2015-05-15 14:24:49
13516
1
原创 栈溢出
很简单的东西,总是搞忘了,记录一下:#include void f(char *s){char s1[20] = "abcdefgaaaaaaaaaaaaaaaaa";strcpy(s,s1);}void main(){char s2[4] = {0};f(s2);}另外一个例子:#include void f(){/*__asm__("i
2015-04-29 13:49:53
533
原创 整形提升与溢出
1、整形提升表达式进行计算时,变量如果能用int表示,就用int表示,如果不能用int表示,就用usigned int表示。 这是因为寄存器的长度和int长度一致。到底是用int还是unsigned int,取决于编译器。举一个例子:char c = 0xb0;if(c==0xb0){...}c在参与运算的时候, 0xb0 = 01011 00000, 编译器会解释
2015-04-29 13:09:12
857
原创 signal原型分析
在linux-0.11内核中,我们找到signal函数原型:void (*signal(int _sig, void (*_func)(int)))(int);这个函数很难理解,先复习看一些基础知识。1、一般函数指针定义int (*f)(int); //定义f为有一个int类型参数,返回值为int的函数指针,int p(int); //
2015-04-24 14:50:34
2158
1
原创 fastcall 和 asmlinkage
linux操作系统支持多种CPU架构,比如x86、ppc和arm等,参数传递的方式是不一样的。ARM对函数调用过程中的传参定义了一套规则,即 ATPCS,规则中明确指出ARM中R0-R4都是作为通用寄存器使用,超过4个参数的在局部栈中保存,在函数调用时处理器从R0-R4中获取参数,在函数返回时再 将需要返回的参数一次存到R0-R4中,也就是说可以将函数参数直接存放在寄存器中,而x86体系结果是
2015-04-23 15:57:59
509
转载 内核3.0.x之函数宏定义
这段时间又碰到系统调用这个家伙,结果在我当前用的3.0.x内核里全变样了。为了将这个问题弄明白,还得自己动手才行,这里非常感谢优快云的"海风林影"兄弟提供的博文和相关参考文献,还是那句话“成果和荣耀归于前辈”。很多人也都发现,在2.6.28及其之后的内核源码里,系统调用的写法发生了比较大的变化,出现了大量宏定义的代码。在源代码里,以前的诸如open()系统调用的sys_open()函数,
2015-04-22 17:16:52
608
原创 muti-thread & fork
1 要点fork会共用原来的代码段,对于数据段和堆栈进行“写时拷贝”, 对于内核全局变量应用,例如文件句柄进行+1。因此fork会产生一个和原来进程占用内存一样的进程,注意只是和原来进程的内存模型一样,而不会产生和父进程一样的多线程进程,fork后的子进程会成为一个单线程进程,其他线程默认终止,这个单线程即是发生fork调用时的线程。2 原型分析在kernel/fork.
2015-04-21 09:10:02
941
原创 gettid和pthread_self区别
1 线程ID获取方法linux下获取线程有两种方法:1)gettid或者类似gettid的方法 2)直接调用pthread_self()gettid 获取的是内核中线程ID,而pthread_self 是posix描述的线程ID。通过执行man手册,我们也能发现他们的区别:SYNOPSIS #include pid_t getti
2015-04-20 15:10:16
26094
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人