
Linux内核
靖源
这个作者很懒,什么都没留下…
展开
-
c语言中关键字volatile
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;vo转载 2012-10-24 11:14:27 · 986 阅读 · 0 评论 -
如何让jiffies 占用 jiffies_64 的低32位
转载自:http://www.groad.net/bbs/thread-3352-1-1.html在 Linux 内核中,jiffies 用于记录系统自启动到当前时刻系统时钟所产生的滴答数。 每一秒系统时钟的中断次数等于 HZ 的值,比如一般的 PC 中 PC 的值定义为 1000,也就是说,一秒钟内系统要收到 1000 次的时钟中断;同样,jiffies 的值在一秒钟内增转载 2013-11-26 22:33:59 · 1079 阅读 · 0 评论 -
Linux安装时 资源临时不可用 的问题解决方法
无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)问题:运行程序更新时出现报错:无法获得锁 /var/lib/dpkg/lock - open (11: 资源临时不可用)解决:其实这是因为有另外一个程序在运行,导致锁不可用。原因可能是上次运行更新或安装没有正常完成。解决办法是杀死此进程sudo rm /var/cache/转载 2013-09-20 09:07:10 · 3562 阅读 · 0 评论 -
Linux 编程的tricky 一:宏定义中的do-while(0)
1.使用do-while(0):为了能够在条件语句中使用复杂的宏定义。#include #include #define FOO(x) \printf("x=%d\n",x); \x++;#define FOO2(x) \do{ \ printf("x=%d\n",x); \ x++; \}while(0)原创 2013-05-11 10:46:08 · 1130 阅读 · 0 评论 -
VFS数据结构相关关系链表图
看虚拟文件系统的次数估计已经是两位数了,每次都有新的收获,这里把VFS涉及到的链表串起来总结一下,主要就是四大对象之间的串连,由于把这些串连关系放到一个图中,逻辑结构太过复杂,可看性太差。另外虚拟文件系统中链接关系比较复杂,下面是对深入理解VFS机制比较重要的一些链表的介绍。 文件系统类型file_system_type链表其中,file_systems全局变量定义在fs/filesy转载 2013-05-10 08:35:17 · 1500 阅读 · 0 评论 -
关于EXPORT_SYMBOL
linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表:[c-sharp] view plaincopyEXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名) 导出的符号可以被其他模块使用,不转载 2012-12-07 08:32:00 · 791 阅读 · 0 评论 -
Linux内核数据类型long long
typedef long long __kernel_loff_t;在code::block中测试了一个。sizeof(long) = 4;sizeof(long long) =8;同时不存在int ,short等类型的这种形式。编译不能通过。原创 2012-11-23 20:13:18 · 2223 阅读 · 0 评论 -
内联函数不能设置断点的原因
对于内联函数,编译器会去掉函数调用,直接将函数代码在调用的位置展开,所以在该函数名上就无法设置断点。使用kprobe或者systemtap也就不能使用函数名探测这样的函数。内联优化从目标文件中去掉了该函数的入口点,符号表中也没有该函数的名称。原创 2012-12-06 10:46:45 · 3834 阅读 · 0 评论 -
kprobe探测中使用offset存在兼容性问题
kprobe通过插入内核模块来做探测内核的工作。使用offset成员,可以来指定从symbol指定的函数开始,距离该函数offset的位置的指令。在kprobe的文档里有这么一句话:Use the "offset" field of struct kprobe if the offset into the symbol to install a probepoint is kn原创 2012-11-23 10:48:54 · 1397 阅读 · 0 评论 -
System V IPC共享内存
相关数据结构struct ipc_namespace 新建IPC对象:shmget()1.如果找不到相同键值对应的IPC资源,并且要求新建IPC对象2.Shmget()中第一个参数,键值key == IPC_PRIVATE都会新建一个IPC对象新建IPC对象的过程:系统调用sys_shmget()调用ipcget()完原创 2012-11-10 17:31:52 · 1384 阅读 · 0 评论 -
Linux中进程的睡眠和唤醒
在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在一个运行队列中,一个就绪进程的状态标志位为TASK_RUNNING。一旦一个运行中的进程时间片用完, Linux内核的调度器会剥夺这个进程对CPU的控制权,并且从运行队列中选择一个合适的进程投入运行。 当然,一个进程也可以主动释放CPU的控制权。函数schedule()是一个调度函数,它可以被一个进程主动调用,从而调度其它进程转载 2012-10-27 14:03:41 · 1543 阅读 · 0 评论 -
glibc对malloc的实现
glibc对malloc的实现 目前最新版本为2.18,glibc源码目录/glibc-2.18/malloc中可以看到。在glibc的malloc的实现中, 分配虚存有两种系统调用可用: brk()和mmap(), 如果要分配大块内存, glibc会使用mmap()去分配内存,这种内存靠近栈。基于UNIX 的系统有两个可映射到附加内存中的基本系统调用: brk原创 2014-01-10 21:57:01 · 1858 阅读 · 0 评论