内核的同步和互斥实例学习

#kernel

#include <linux/module.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/mutex.h> #include <linux/semaphore.h> #include <linux/sched.h> static DEFINE_MUTEX(mut1); struct semaphore sem1,sem2; int test1(void *p) { down(&sem2); mutex_lock(&mut1); printk("get out test1\n"); mutex_unlock(&mut1); up(&sem1); return 0; } int test2(void *p) { down(&sem1); mutex_lock(&mut1); printk("get out test2\n"); mutex_unlock(&mut1); up(&sem2); return 0; } static int __init mutex_init_test() { init_MUTEX(&sem1); init_MUTEX_LOCKED(&sem2); printk("get out \n"); kernel_thread(test1, test1, CLONE_KERNEL); kernel_thread(test2, test2, CLONE_KERNEL); return 0; } static void __exit mutex_exit_test() { printk("get out \n"); return; } module_init(mutex_init_test); module_exit(mutex_exit_test); MODULE_AUTHOR("Helight.Xu"); MODULE_LICENSE("Dual BDS/GPL"); 看完本文有收获?请分享给更多人 关注「黑光技术」,关注大数据+微服务

阅读更多

April 21, 2009

我的摄影作品之“春意”

#生活

无名小草 园角一支 看完本文有收获?请分享给更多人 关注「黑光技术」,关注大数据+微服务

阅读更多

April 10, 2009

为佛家的“色即是空,空即是色”正意

#生活

“色即是空,空即是色”这句佛经名言,包含着很深的哲学思想,一般人包括文人 们喜欢以此开玩笑,认为色就是指女人,空就是虚无或乌有.说和尚看破红尘,把女人 看做是虚无或乌有,便出家做和尚了.其实色并非女色,空也非虚无乌有.要认识此言 的真正含义,还得从佛教的基本教义说起. 佛教的教义,主要是所谓的"四谛",即 苦、集、灭、道。苦、集二谛阐明人生的本质及形成原因;灭、道二谛指明人生解 脱的归宿和解脱之路。

阅读更多

April 7, 2009

使用proc来写GPIO驱动

#linux#开源#kernel

这是写的一个gpio的驱动,测试完,提好的。

阅读更多

March 31, 2009

截获Linux系统调用

#kernel

#include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/unistd.h> #include <linux/init.h> #include <asm/ptrace.h> #define NRB 2 typedef asmlinkage int (*__routine)(struct pt_regs); __routine old, new; unsigned long *sys_call_table = 0; static int counts = 0; unsigned long* find_sys_call_table(void) { struct { unsigned short limit; unsigned int base; } __attribute__ ( ( packed ) ) idtr; struct { unsigned short offset_low; unsigned short segment_select; unsigned char reserved, flags; unsigned short offset_high; } __attribute__ ( ( packed ) ) * idt; unsigned long system_call = 0; // x80中断处理程序system_call 地址 char *call_hex = "\xff\x14\x85"; // call 指令 char *code_ptr = NULL; char *p = NULL; unsigned long sct = 0x0; int i = 0; __asm__ ( "sidt %0": "=m" ( idtr ) ); idt = ( void * ) ( idtr.base + 8 * 0x80 ); system_call = ( idt->offset_high << 16 ) | idt->offset_low; code_ptr = (char *)system_call; for(i = 0;i < ( 100 - 2 ); i++) { if(code_ptr[i] == call_hex[0] && code_ptr[i+1] == call_hex[1] && code_ptr[i+2] == call_hex[2] ) { p = &code_ptr[i] + 3; break; } } if ( p ){ sct = *(unsigned long*)p; } return (unsigned long*)sct; } asmlinkage int audit_sys_call(struct pt_regs regs) { int ret = 0; counts++; printk("audit_sys_call!\n"); printk("call %ld sys_call! times: %d\n", regs.ax, counts); ret = ((__routine)old)(regs); return ret; } int mysys_init ( void ) { if (( sys_call_table = find_sys_call_table())) { printk( "sys_call_table = %p\n", sys_call_table ); old = (__routine)sys_call_table[NRB]; new = &audit_sys_call; sys_call_table[NRB] = (unsigned long)new; } return 0; } void mysys_exit ( void ) { printk("keep back the sys_call_table \n"); sys_call_table[NRB] = (unsigned long)old; } module_init(mysys_init); module_exit(mysys_exit); MODULE_LICENSE("GPL2.0"); MODULE_AUTHOR("Helight.Xu"); 看完本文有收获?请分享给更多人 关注「黑光技术」,关注大数据+微服务

阅读更多

March 31, 2009

我的毕设定题

#life

不知不觉之间研究生生活已经过去了一大半了,也到该准备研究生毕业设计的时候了。年前回家之前给陈老师说我想做嵌入式设备的远程监控,陈老师也没有说什么,其实我是知道了,老师一直想我在内核上有所发展。

阅读更多

March 13, 2009

使用valgrind检测内存泄露

#valgrind#tools#linux

Valgrind是x86架构Linux上的多重用途代码剖析和内存调试工具。但它的主要功能还是对内存的调试,默认工具也是启动 memcheck。用户可以在它的环境中运行程序来监视内存的使用情况,比如C语言中的malloc和free或者C++中的new和delete。

阅读更多

February 27, 2009

Xnotebook文本资料管理软件

#linux#开源#tools

Xnotebook是一款用gtk+开发的文本资料管理软件,它主要用于个人文本资料的分类管理。

阅读更多

February 26, 2009

Http协议分析

#linux#开源#http

最简单的例子,就是你的浏览器与网页服务器之间使用的应用层协议。虽然官方文档说HTTP协议可以建立在任何可靠传输的协议之上,但是就我们所见到的,HTTP还是建立在TCP之上的。

阅读更多

February 17, 2009

我的二十年感言

#life

【回忆1989年以前】 那个时候,我在看西瓜,我在跟着小姑姑放羊,跟着小叔叔放牛,在屋后的小河里捞小鱼。。。据我妈说我小时候那是坏的不得了,而且嘴馋。人家刚种的萝卜我会给他拔出来。还隐约记得有个老太太住在一见黑乎乎的屋子里,她可喜欢我了,老是带我去她的黑屋子,然后给我方块糖吃。

阅读更多

January 15, 2009

写在回家之前的话

#life

又是一年春节了,话题还是一样。对于这样在外飘荡的人来说,没有什么能比回家更让人坐立不安了。常常也是这样的,其实回家也就是那么几天,见见父母,见见亲戚朋友。聊聊家常,扯扯蛋。呵呵,生活好像就是这样。

阅读更多

January 15, 2009

又是一个岁终年末的随想

#life

依我个人的观点看,往往岁终年末是一年之中比较乱乱的时候。人们的心情 开始慌乱,急躁。毕竟要过年了。好像是劳累的一年了,也应该休一下了。对待工 作生活是不是开始怠慢了呢?呵呵!! 也是阿,又是一年的岁终年末了。

阅读更多

December 25, 2008

Linux内核中的P,V操作之P

#linux#开源#kernel

最近作辅导讲到了P,V操作,我就在内核中看了一下Linux中的P,V操作的实现。很真是,理解比本科学习的时候深多了。操作系统中的P操作在Linux内核中对应的是down函数,V操作对用up函数。

阅读更多

November 29, 2008

Linux内核中的P,V操作之V

#linux#开源#kernel

最近作辅导讲到了P,V操作,我就在内核中看了一下Linux中的P,V操作的实现。很真是,理解比本科学习的时候深多了。操作系统中的P操作在Linux内核中对应的是down函数,V操作对用up函数。

阅读更多

November 29, 2008

源代码中的中断分析(一)

#linux#开源#kernel

(代码版本2.6.26) 中断描述符数组:irq_desc[]

阅读更多

November 13, 2008

ddddddd