自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 文件系统体系结构

2013-10-29 22:46:31 1452

原创 加载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

原创 看过最好的函数说明文档

ref  :  OpenMAX_AL_1_0_Specification

2013-10-27 12:49:42 1590

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

原创 slabs 内存分配原理

前段时间,看过slabs内存分配的代码。代码看过容易忘记,把看的用图记下来,方便后面自己看。

2013-10-27 11:55:13 2865

原创 客户需求与设计的差距

ref  :  http://www.jokespinoy.com/tag/programmer-funny-pictures/

2013-10-26 13:26:36 2051

原创 linux window 换行符号

linux/unix下只用\n,它就表示回车+换行 而windows下,\r只回车不换行的,\n是换行

2013-10-26 12:45:39 1401 3

翻译 怎么成为一名优秀的程序猿

ref : http://secretgeek.net/howtobeaprogrammer.asp 设计(老板或者销售的一句话) || \/ 编码 >>> 编译>>>> 运行 >>>>>>>>>>>>>>>> 成功 (you think) ;-) /\ ||

2013-10-26 12:29:14 1326 2

转载 一张流程图了解你的一生历程

2013-10-26 12:10:55 2626

原创 怎么确认一台机器是32/64位?

n = sizeof(void *);     当n==8 的时候说明是64架构的机器     当n==4则是32位

2013-10-26 12:03:25 1587 9

原创 栈帧(stack frame),函数调用栈的情况

2013-10-26 11:57:52 1643

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

原创 怎么选择kernel同步数据结构(seplock,atomic,spin,sem,mutex,preempt_disable)

2013-10-22 22:22:52 1444

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

原创 可剥夺与不可剥夺内核区别

不可剥夺可剥夺

2013-10-15 23:36:19 1891

翻译 一张图理解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

android monitor tool

android monitor tool

2013-08-18

Windows+CE天津大学课件

Windows+CE天津大学课件 讲的比较广,但是比较实用

2009-08-10

空空如也

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

TA关注的人

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