
KERNEL
linphusen
work as a developer of linux device driver,I focus on the ARMbased embedlinux develop.
展开
-
Shell Makefile 中的符号
hell脚本中一些特殊符号1、{} 大括号:用法一:通配符扩展代码: ls my_{finger,toe}s这条命令相当于如下命令的组合:代码: ls my_fingers my_toesmkdir {userA,userB,userC}-{home,bin,data}我们将得到 userA-home, userA-bin, userA-data, userB-home,原创 2011-06-20 23:46:00 · 2819 阅读 · 1 评论 -
内存对齐.结构体对齐
<br />gcc 中的"__attribute__ ((packed))"<br /> <br /><br />__attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。<br /><br />#define __u8 unsigned char<br />#define __u16 unsigned short<br /><br />/* __attribute__ ((packed)) 的位置约束是放于声明的尾部“;”之前转载 2011-05-02 22:43:00 · 13696 阅读 · 4 评论 -
GNU __attribute__ 机制
<br />From<br />http://blog.163.com/sunm_lin/blog/static/9192142200741533038695/<br /> <br />作用:<br /> 可以设置函数属性(Function Attribute), 变量属性(Variable Attribute), 类型屬性(Type Attribute)<br />语法:<br /> __attribute__ (parameter)<br /> 注: attribute转载 2011-05-02 15:55:00 · 361 阅读 · 0 评论 -
GNU C 与ANSI C 相比,独特的9个地方
<br /><br />we found many interesting code in Linux Kenrel, like a zero array in the struct, __attribute__ words, what are they?<br />in fact they are the extent Stand C, which anoter name should be GNU C.<br /> <br /> <br />below from :<br />http://hi.bai转载 2011-05-02 15:48:00 · 390 阅读 · 0 评论 -
如何在linux内核中调用用户空间的程序
<br /><br />以前的init进程的启动代码<br />execveinit_filename,argv_init,envp_init); <br /><br />现在改为<br />static void run_init_process(char *init_filename)<br />{<br />argv_init[0] = init_filename;<br />kernel_execve(init_filename, argv_init, envp_init);<br />}<br /原创 2011-05-02 23:49:00 · 770 阅读 · 0 评论 -
Linux内核内存泄露,分析方法
<br /><br />Way1:打桩<br /> <br /><br />只适合自己开发的驱动或者内核代码<br /> <br />from<br />http://www.powerpcdev.net/blog/index.php/archives/77.html<br /> <br />meng zhao <zhaomeng2009*gmail*com><br />你可以使用打桩的方法,具体如下:<br />例如你写的程序调用到了kmalloc函数,那你可以自己实现另外一个内存分配函数,比如叫stub原创 2011-05-02 16:54:00 · 1670 阅读 · 1 评论 -
进程上下文和中断上下文
<br />进程上下文是一种内核所处的操作模式,此时内核代表进程执行--例如执行系统调用或运行内核线程。<br />上下文context: 上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。<br /> 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。<br /> 用户级上下文: 正文、数据、用户堆栈以及共享存储区;<br /> 寄存器上下文: 通用寄存器、程序寄存器转载 2011-05-02 23:35:00 · 471 阅读 · 0 评论 -
volatile keyword
<br />http://blog.21ic.com/user1/2949/archives/2007/35599.html一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: <br /> 1). 并行设备的硬件寄存器(如:状态寄存器) <br /> 2). 一个中断服务子程序中会访问到的非自动变量转载 2011-05-02 16:41:00 · 375 阅读 · 0 评论 -
Linux Bootup issues with U-boot
1.Bad Magic Number ## Booting image at 33000000 ...Bad Magic NumberOMAP5912 OSK # (tftp下载好kernel的uImage后就停止在这,不能启动kernel)问题原因:启动参数设置错误,0x30000000处不可以执行。有的开发板sdram不是在0x33000000,所以不能把kerneluImage下载到0x33原创 2011-06-22 15:04:00 · 1436 阅读 · 1 评论 -
宏定义里的 do{} while (0)以及我的认识
<br /><br />无论是Linux内核还是其他著名的c、c++库里都能见到 do{} while (0)<br />这样的写法看似没有意义,其实出自名家之手,是在宏定义里使用的<br />以前就了解到在程序里使用宏定义的函数后面的分号容易导致问题,今天算是深入认识了<br />先看一个简单的宏<br />#define SAFE_FREE(p) do {free(p);p=NULL;} while(0)<br />如果去掉了do... while(0)<br />即定义SAFE_FREE(p)为<br原创 2011-05-02 23:32:00 · 613 阅读 · 0 评论