- 博客(6)
- 收藏
- 关注
原创 edge中断分析
目前正在调试msix中断,在测试过程中发现会概率性的丢失中断。Msix中断默认是edge触发的中断,edge触发的中断是在中断对应pin发生电平信号跳变的时候,会发出一个中断请求。因为跳变是一瞬间的,不会像level触发中断那样一直保持电平不变,这样就可能会漏掉某一个跳变的瞬间,表现就是丢失了一个中断。 内核中处理edge触发中断的函数为handle_edge_irq,此函数有do_IRQ
2015-07-19 10:57:01 3086
原创 调度时机分析之被动调度(之中断处理返回)
之前一篇博客中是关于被动调度的系统调用返回部分,这篇博客将接着写被动调度的中断返回部分。 分析基于内核版本2.6.12.6Linux进程的调度主要分为主动调度和被动调度两大类。整个linux运行过程中,被动调度分为用户态抢占调度和内核态抢占调度。用户态抢占调度发生在当系统调用、中断处理、异常处理等返回用户态时,或者进程的时间片用完时。这篇博客就是写用户态抢占调度的中断处理返
2015-07-16 22:26:24 3638
原创 调度时机分析之被动调度(之系统调用返回)
分析基于内核版本2.6.12.6 在什么情况下,会触发调度?Linux进程的调度主要分为主动调度和被动调度两大类。◆主动调度主动调度就是进程自己缺少相应的所申请的资源,显示调用schedule,让出处理器。◆被动调度在整个linux运行过程中,被动调度又可细分为两种:●用户态抢占调度●内核态抢占调度 下面就结合内核代码分析上述各种调度时机的详细情况。
2015-07-13 20:07:04 4741
原创 gdb调试--堆栈相关
用GDB调试程序最常用的莫过于使用bt命令查看发生问题时的调用栈了。显示的堆栈信息依次是从最底层到最上层的一个被调用关系。那这些堆栈信息是如何而来的?函数在调用的时候会自动的将一些信息压栈。以x86架构下为情况说明,首先压入的是参数,在有多个多个参数的情况下,从右往左依次压入;然后是调用函数的返回地址;接着是压调用函数的栈帧的帧指针ebp(或者rsp);再下来就是被调用函数的局部变量了。
2015-07-07 21:38:07 1801
原创 gdb调试--汇编指令处断点
GDB中断点使用都很简单,如果我们要断点在函数main开始,直接b main就行。 图1 如上图所示停留在断点1,main函数开始处。汇编看到是在第四条汇编指令,那前3条指令都做了些什么?第一条指令是将rbp寄存器压栈,rbp寄存器保存的是栈帧的底部,这里是将调用main函数的函数(这里main是被调用函数)的栈帧底部压栈。第二条汇编指令是将rsp寄存器的值存入rbp
2015-07-04 00:11:00 13997
原创 中断类型标志
在调用request_irq函数申请一个IRQ时,会传入相应的中断类型标志。对于这些标志新旧版本的内核实现是不完全相同的。 IRQF_DISABLED3.16.7-ct7版本内核中此标志是没有地方用到的。此标志表示中断在处理的时候是关中断的,不能被另外的中断所打断。(http://lwn.net/Articles/380931/)这篇文章里有讲到此标志在新内核中被废弃的原因。之前老
2015-07-02 22:16:10 2608
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人