- 博客(52)
- 资源 (3)
- 收藏
- 关注
原创 推荐五星级C语言学习网站
www.cprogrammingexpert.com (此网站,配合了大量动画,每一行代码,配合一副图片)下面截取了部分的gif动画,大家可以认真看看,相信作者花了很多心血,去制作这些动画。
2013-10-31 23:09:53 2002
翻译 linux 目录意思及用途
Directory NameUse to store this kind of files/binAll your essential program (executable files) which can be use by most of the user are store here. For e.g. vi, ls program are store here.
2013-10-29 22:50:33 1388
原创 加载linux kernel 的安全机制分析
参考文件:system/core/libmincrypt/sha.c system/core/mkbootimg/mkbootimg.c首先,一般bootimage 的结构如下(1 page 有可能是2048或4096,具体看flash的类型)** +-----------------+ ** | boot header | 1 p
2013-10-28 23:06:19 1416
原创 linux gcc 怎么只预处理,不编译链接等
由于一些特殊的目的,只需要预处理如: 检查某些宏定义,是否正确等 。gcc --help输出:-E Preprocess only; do not compile, assemble or link 仅仅预处理,不编译,汇编或链接 gcc -E ./main
2013-10-28 22:56:03 4186
原创 宏定义妙用之: 让编译器(预处理)干尽可能多的事情
鉴于我们日后要70岁才退休,社保要交40年的中国特色的趋势我们程序员没有理由不珍惜生命,让编译器做更多的事情
2013-10-28 22:48:55 1446
原创 linux多线程在/proc目录的结构
linux的多线程,其实就是clone系统调用的实现的(共享文件等)首先看个具体的例子:#include #include #include #include #include #include #include void *print_message_function( void *ptr ); int main() {
2013-10-28 22:28:19 2668
原创 SquirrelMQ消息队列介绍
代码量不算多,非常适合学习(socket,poll,memory方面都不错)SquirrelMQ是一个快速的消息队列。SquirrelMQ特性: 1. SquirrelMQ使用Slab内存分配算法来降低内存碎片,使用epoll来解决高并发问题。效率比redis要高,使用简单。2. 另外SquirrelMQ支持持久化,在down机的情况下也不用担心数据丢失。3
2013-10-27 12:24:36 1761
原创 中断处理函数用spinlock注意点
参考:http://stackoverflow.com/questions/4752031/why-cant-you-sleep-while-holding-spinlockExample: your driver is executing and has just taken out a lock that controls access to its device. While the l
2013-10-27 12:16:42 4243
翻译 注释你的代码 Commenting your code
ref : http://mattdturner.com/wordpress/2011/04/top-10-funny-programming-jokes-and-quotes/“Commenting your code is like cleaning your bathroom — you never want to do it, but it really does create a m
2013-10-27 12:01:52 956
原创 客户需求与设计的差距
ref : http://www.jokespinoy.com/tag/programmer-funny-pictures/
2013-10-26 13:26:36 2051
翻译 怎么成为一名优秀的程序猿
ref : http://secretgeek.net/howtobeaprogrammer.asp 设计(老板或者销售的一句话) || \/ 编码 >>> 编译>>>> 运行 >>>>>>>>>>>>>>>> 成功 (you think) ;-) /\ ||
2013-10-26 12:29:14 1326 2
原创 c language memory layout
可以参考: http://www.cs.uleth.ca/~holzmann/C/system/ http://blog.csdn.net/astrotycoon/article/details/8267483
2013-10-25 23:43:58 2627
原创 为什么拥有spinlock的时候不可以sleep
参考:http://stackoverflow.com/questions/4752031/why-cant-you-sleep-while-holding-spinlock首先看下,spin_lock的实现:static inline void spin_lock(spinlock_t *lock){ raw_spin_lock(&lock->rlock);} #de
2013-10-23 22:30:47 5001
原创 linux驱动中实现延时
其实有的时候最简单的方法,就是最实用最好的。没有用到timer,sleep,直接用循环:static bool nand_status_ready(u32 u4Status){ u32 timeout = 0xFFFF; while ((DRV_Reg32(NFI_STA_REG32) & u4Status) != 0) { time
2013-10-23 22:24:45 1840
原创 bootchart实现分析
参考 : system/core/init/bootchart.c system/core/init/init.c// 记录当前的状况int bootchart_step( void ){ // CPU 等信息 do_log_file(log_stat, "/proc/stat"); // flash io 等信息
2013-10-23 22:18:18 1449
原创 相隔一定时间才printk一次信息
上次介绍了 dynamic debug 及 print_once 当有时候,你需要10S 内,某个打印语句只打印一次,你就可以使用下面的demo:int f(){ unsigned long later; later = jiffies + msecs_to_jiffies(1000*10); if (time_after(ji
2013-10-22 23:09:16 1202
原创 seqlock分析
当需要同步的数据比较简单,且是多读少写,且写优先的,情况下你可以使用 seqlockseqlock 的底层是用spin实现,所以自然继承了spin的特性如: 禁止抢占,sleep 等typedef struct { unsigned sequence; spinlock_t lock;} seqlock_t;序列号初始化为0,即偶数,代表没有上锁#def
2013-10-22 22:48:33 1361
原创 BUG_ON实现分析
传入的参数非法或为空,程序跑到了不可能的分支,你可以使用 BUG_ON(1) 直接让系统奔溃,并打印当前的文件名,行数,及调用函数栈问题暴露出来了,就好解决问题了,越早越好#ifndef BUG_ON#define BUG_ON(cond) assert(!(cond))#endifBUG_ON其实会调用assertkernel中一般很少直接使用assert,当然u
2013-10-22 22:34:44 3692
原创 proc fs 例子
static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, size_t count, loff_t *ppos){ if (count) { char c; if (get_user(c, buf)) return -EFAULT; __handl
2013-10-19 11:03:58 1119
原创 debugfs例子
static ssize_t anycall_write(struct file *file, const char __user *user_buf, size_t size, loff_t *ppos){ char buf[64]; int buf_size; int ret=0; buf_size = min(size, (sizeof(buf)
2013-10-19 11:00:52 1435
原创 printk,klogd,syslogd 关系
printk ------------> ________________________________ | /proc/kmsg | | [FI
2013-10-18 23:32:35 2042 1
原创 printk导致系统崩溃
具体实例如下: printk(KERN_ERR "random addess s is: %s\n",(char *)0X00000333); 输出为 : random addess s is: (null) printk(KERN_ERR "random addess s is: %s\n",(char *)0X000003333); 却会导致系统崩溃 通过分析pr
2013-10-18 23:21:30 4197 1
原创 动态调用kernel任意函数(anycall)
有的时候只需要简单调用下别的kernel函数或者别的模块函数没有export,而你又不想单独编译kernel重新下载的时候或者动态去修改某个驱动的寄存器值。首先看下效果及使用步骤:加入kernel ,更多时候是驱动中有以下函数: ssize_t justfortest0(){ printk(KERN_ERR"[anycall] successful....just
2013-10-18 23:02:36 1898
原创 进程nice值曲线图
时间片由HZ驱动,所以时间片的最小值是1/HZ在O(1)调度器中,比2.4增强负的nice(2003修改),故意调整时间片的线性关系,使nice值为19的时间片精确地为1个jiffy.为了更好的理解,请看下面的曲线图: A \ | [timeslice length] \ |
2013-10-18 22:41:21 1282
原创 kernel中遍历所有进程
看下具体的宏定义实现:#define for_each_process(p) \ for (p = &init_task ; (p = next_task(p)) != &init_task ; )在看下具体例子,打印所有进程的函数调用栈:static void wdt_report_info (void){ struct task_struct *task ;
2013-10-18 22:38:07 2811 1
原创 hrtimer 高精定时器使用例子
在kernel,有个线程每个十秒往上层系统上报battery及USB的状态信息。 加入直接sleep 10 秒的话,插入USB的时候不能及时更新状态,这个时候就可以使用 hrtimer + wait queue 来实现了 void battery_kthread_hrtimer_init(void){ ktime_t ktime;
2013-10-16 23:02:12 3183
原创 儿子眼中的宝藏
今天早上骑着我的自行车载4岁儿子去幼儿园。 路途中,看到有个挖掘机在挖一个小山丘。 儿子问我: 爸爸,他们是在挖宝藏吗? 我: 是的,宝藏里面有些什么啊? 儿子: 香蕉,巧克力,饼干,游戏,书包,可乐,冰淇淋,薯片,玩具 ...... 儿子一口气,说出自己喜欢的东西。 一直在心里认为宝藏是,金银珠宝,看来自己不是
2013-10-16 22:37:17 860
原创 优先级反转
ref : http://www.cnblogs.com/apollius/archive/2013/04/01/2993904.html具体实现可以参考: ucos的源代码。
2013-10-16 21:19:15 895
翻译 一张图理解O(1)算法
Linux O(1) scheduler algorithm struct prio_array array = rq->active;if (!array->nr_active) {rq->active = rq->expired;rq->expired = array;} struct task_struct *prev, *
2013-10-15 23:14:52 1293
原创 dynamic debug动态打印
之前介绍过了 printk_once , 只打印一次。 有些情况下,需要kernel运行时动态打印与否,dynamic debug就派上用场了。 具体用法可以参考: kernel/Documentationdynamic-debug-howto.txt 使用步骤: // 打印 echo 'file nand.c line 42
2013-10-15 23:04:52 6996 1
原创 android monitor tool (8.0 监控文件系统 添加哪个进程修改文件功能)
由于安全等问题,利用系统调用监控文件,并不能知道究竟是哪个进程对文件进行了修改。 这样我们就最多只能知道某个时间发生了时间,再根据时间点去查看相关的log,还是比较麻烦,不方便。 这种条件下,就只能修改kernel,以达到我们的效果,修改 fsnotify 函数如下: void fsnotify(struct inode *to_tell, __u32
2013-10-14 23:41:16 2392
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人