所有的list函数见 include/linux/list.h自己从 include/linux/list.h 拷贝了一些函数到自己的list.c中, 然后练习了一下。没有别的目的,就是想熟练一下。毕竟linux内核代码中试用了大量的list函数。文件:list.c 1 #include 2 ...
分类:
系统相关 时间:
2014-08-24 00:21:31
阅读次数:
301
Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试。这里的方法是用QEMU来调试Linux内核。因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核。这对内核的学习也非常有帮助。 为了尽量不多花时间在QEMU设置上,这里直接使用以下的内....
分类:
系统相关 时间:
2014-08-20 19:31:12
阅读次数:
239
:设备驱动程序的作用
从一个角度看,设备驱动程序的作用在于提供机制,而不是策略。在编写驱动程序时,程序员应该特别注意下面这个基本概念:编写访问硬件的内核代码时,不要给用户强加任何特定策略。因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用程序。
从另一个角度来看驱动程序,它还可以看作是应用程序和实际设备之间的一个软件...
分类:
系统相关 时间:
2014-08-18 22:10:03
阅读次数:
309
likely和unlikey函数源码分析
看代码的时候常常遇到likely和unlikely这两个函数,大概知道是用来检测返回值的,但是也不知道是什么。今天实在不爽了,就去看源码了。
在内核代码树的 include/linux/compiler.h里
void ftrace_likely_update(struct ftrace_branch_...
分类:
其他好文 时间:
2014-08-15 17:57:29
阅读次数:
233
Linux内核代码的调试非常麻烦,一般都是加printk, 或者用JTAG调试。
这里的方法是用QEMU来调试Linux内核。因为QEMU自己实现了一个gdb server, 所以可以非常方便的使用gdb来调内核。
这对内核的学习也非常有帮助。
为了尽量不多花时间在QEMU设置上,这里直接使用以下的内核image:
http://free-electrons.com/community/d...
分类:
系统相关 时间:
2014-08-13 01:11:14
阅读次数:
226
Hanks.Wang - 专注于操作系统与移动安全研究,Linux-Kernel/SELinux/SEAndroid/TrustZone/Encription/MDM Mail - byhankswang@gmail.com
牛X的内核代码注释
大牛的代码质量高稳定性好,而且逻辑清晰易读性比较强,今天看到Linux Kernel红黑树的代码时,瞬间被大牛的代码注释秒...
分类:
系统相关 时间:
2014-08-06 19:17:32
阅读次数:
322
from:http://blog.csdn.net/jiang_dlut/article/details/8163731中文版维护者: 张乐 Zhang Le 中文版翻译者: 张乐 Zhang Le 中文版校译者: 王聪 Wang Cong wheelz 管旭东 Xudong Guan Li ...
分类:
系统相关 时间:
2014-08-01 15:48:01
阅读次数:
400
1序言: 1与Java、C#等高级语言相比,C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显。 今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基.....
分类:
编程语言 时间:
2014-07-31 23:39:10
阅读次数:
392
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中 执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用 户态)。...
分类:
其他好文 时间:
2014-07-24 22:49:33
阅读次数:
167
在学习编写linux驱动程序的时候,一般都是从写一个helloworld的模块开始。但是在编译完成后,进行模块加载的时候,有时会出现如下错误:
insmod: error inserting 'hello.ko': -1 Invalid module format
其实,出现这个问题的原因很简单,就是:编译的内核版本与实机运行的内核版本不一致。
所以解决起来也很简单,实机运行的系统的代码树位置一般在/usr/src/kernels。只要将Makefile中的代码树改成实际运行的内核代码即可。...
分类:
其他好文 时间:
2014-07-18 17:08:15
阅读次数:
300