自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 339 1

原创 e1000e网卡驱动分析笔记

驱动中有e1000的e1000e两个版本, 差别不大, e1000e使用了msix, 更先进一点点. 比较难懂的都是一些基础系的东西, 如下1) PCIE的配置空间初始化2) msix机制及初始化3) napi机制4) dma机制下面一个个回答这些问题, 因为内容实在太多, 没法每个问题将的很清楚, 而且我们这个帖子主要是分析e1000e, 只能每个初步说下机理, 如果需要...

2019-11-04 14:47:31 2693 2

转载 段间跳转指令jmpi和实模式寻址(转)

jmpi是段间跳转指令,用于x86实模式下,      如:BOOTSEG = 0x0c70            jmpi    4, #BOOTSEG      假如当前段CS==00h,那么执行此指令后将跳转到段CS==0x0c70,当然段cs的值也变为0x0c70,接下来将执行指令0x0c70:0004处的指令。      实模式下寻址是为了兼容80

2015-05-20 17:32:51 755

原创 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 13046

原创 栈溢出

很简单的东西,总是搞忘了,记录一下:#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 503

原创 整形提升与溢出

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 807

原创 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 2091 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 471

转载 内核3.0.x之函数宏定义

这段时间又碰到系统调用这个家伙,结果在我当前用的3.0.x内核里全变样了。为了将这个问题弄明白,还得自己动手才行,这里非常感谢CSDN的"海风林影"兄弟提供的博文和相关参考文献,还是那句话“成果和荣耀归于前辈”。很多人也都发现,在2.6.28及其之后的内核源码里,系统调用的写法发生了比较大的变化,出现了大量宏定义的代码。在源代码里,以前的诸如open()系统调用的sys_open()函数,

2015-04-22 17:16:52 567

原创 muti-thread & fork

1 要点fork会共用原来的代码段,对于数据段和堆栈进行“写时拷贝”, 对于内核全局变量应用,例如文件句柄进行+1。因此fork会产生一个和原来进程占用内存一样的进程,注意只是和原来进程的内存模型一样,而不会产生和父进程一样的多线程进程,fork后的子进程会成为一个单线程进程,其他线程默认终止,这个单线程即是发生fork调用时的线程。2  原型分析在kernel/fork.

2015-04-21 09:10:02 897

原创 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 25843

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除