其它
Linux内核其他功能。
tanglinux
专注于Linux内核以及C/C++应用程序的开发。
展开
-
Linux内核中的PID散列表实例
开发平台:基于虚拟机的Ubuntu 11.04 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 参考文献:《深入Linux内核架构》 关于散列表的概念可以参考博文《散列表的基本概念及其运算》。 1、PID散列表 PID散列表是在系统启动过程中通过pidhash_init函数(被start_kern原创 2012-03-27 12:25:59 · 8689 阅读 · 1 评论 -
Linux内核的通知链机制
内核源码:linux-2.6.38.8.tar.bz2 在Linux内核中,通知链是一种非常好的异步通信机制,它的实现也非常简单,就是通过某个单循环链表来实现。 1、通知链实例都使用notifier_block结构体来表示 /* linux-2.6.38.8/include/linux/notifier.h */struct notifier_block { in原创 2012-03-31 13:30:26 · 6816 阅读 · 0 评论 -
详解Linux内核双向循环链表算法的实现(下)
2、双向链表在Linux内核中的实现 Linux内核对双向循环链表的设计非常巧妙,链表的所有运算都基于只有两个指针域的list_head结构体来进行。 /* linux-2.6.38.8/include/linux/types.h */struct list_head { struct list_head *next, *prev;}; 链表的运算(源代码都在linu原创 2012-02-27 19:02:42 · 5957 阅读 · 2 评论 -
详解Linux内核双向循环链表算法的实现(上)
开发平台:Ubuntu11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 据我们所知,单链表只有一个指向其直接后继的指针域,而且只能从某个结点出发顺着指针域往后寻查其他结点。若要寻查结点的直接前趋,则需要从头指针重新开始。为了克服单链表这种单原创 2012-02-27 18:44:29 · 4685 阅读 · 0 评论 -
详解Linux内核红黑树算法的实现
开发平台:Ubuntu11.04 内核源码:linux-2.6.38.8.tar.bz2 关于二叉查找树的概念请参考博文《详解二叉查找树算法的实现》。 平衡二叉树(BalancedBinary Tree或Height-Balanced Tree)又称AVL树。它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之原创 2012-04-11 17:02:26 · 33093 阅读 · 9 评论 -
Linux内核中的常用宏container_of其实很简单
开发平台:Ubuntu11.04 编 译器:gcc version 4.5.2 (Ubuntu/Linaro4.5.2-8ubuntu4) Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。 Container_of的定义如下:原创 2011-11-27 19:50:47 · 37827 阅读 · 11 评论 -
通过proc文件系统输出必要的Linux内核信息(下)
3、使用seq_file接口的例子 本例通过/proc/seq_file_test文件输出Linux内核的十个随机数,并与printk打印的信息进行比较。 (1)、例子源代码 #include #include #include #include #include #include #include #include #include struct my原创 2012-02-05 21:13:47 · 2438 阅读 · 3 评论 -
详解likely和unlikely函数
内核源码:linux-2.6.38.8.tar.bz2 参考文档:http://gcc.gnu.org/onlinedocs/gcc-4.6.2/gcc/Other-Builtins.html#Other-Builtins 在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2原创 2012-01-05 01:08:47 · 29780 阅读 · 0 评论 -
通过proc文件系统输出必要的Linux内核信息(上)
开发平台:Ubuntu 11.04 编译器:gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) 内核源码:linux-2.6.38.8.tar.bz2 proc是基于内存的文件系统,用来实现外界与Linux内核的信息交互(通过/proc目录下的各种文件)。 1、proc文件系统的初始化 proc文原创 2012-02-05 13:24:46 · 4908 阅读 · 0 评论 -
内核移植之编译初体验
开发平台:Ubuntu11.04 目 标板:优龙FS2410 编 译器:arm-gcc-4.1.1.tar.bz2 (可从http://download.csdn.net/detail/npy_lp/3821111 上下载) 内核源码:linux-2.6.38.8.tar.bz2 交叉编译Linux内核大概会经历如下几步: 第一步,解原创 2011-11-20 00:48:04 · 1856 阅读 · 0 评论 -
关于编译Linux-2.6.38.8内核时s3c_device_ohci未定义问题的分析
开发平台:Ubuntu11.04 目 标板:优龙FS2410 编 译器:arm-gcc-4.1.1.tar.bz2 (可从http://download.csdn.net/detail/npy_lp/3821111 上下载) 在编译Linux-2.6.38.8内核的最后阶段出现s3c_device_ohci未定义的错误: arch/arm/mach-s3原创 2011-11-19 19:38:16 · 1915 阅读 · 0 评论 -
在Linux-2.6.38.8上移植yaffs2文件系统
开发平台:Ubuntu 11.04 Yaffs2源码包:yaffs2.tar.bz2 (可从http://download.csdn.net/download/npy_lp/3810132 上下载) 通过以下命令即可在Linux-2.6.38.8上成功移植yaffs2文件系统(以下命令都是基于内核源码目录linux-2.6.38.8和yaffs2源码包yaffs2.tar原创 2011-11-21 14:45:27 · 2318 阅读 · 0 评论 -
通过proc文件系统输出必要的Linux内核信息(中)
2、使用旧式proc接口的例子 本示例比较简单,先通过kmalloc函数分配一段TANGLINUX_LEN大小的内存,然后通过tanglinux_read和tanglinux_write函数来实现对这段内存的读写操作。 (1)、例子源代码 #include #include #include #include #include #include原创 2012-02-05 15:39:23 · 2675 阅读 · 0 评论 -
Linux内核使用ERR_PTR和PTR_ERR等函数来实现指针函数返回错误码
内核源码:linux-2.6.38.8.tar.bz2 在Linux内核中,一个返回指针的函数应该使用什么样的值来表示错误返回呢,很显然,使用一个空指针NULL是根本无法表示和区分各式各样的执行错误的,所以正确的作法就是要使用一组特定的指针来表示,并且还要将这些指针与内核统一使用的错误码建立起相应的关系。这组特定的指针不能再被当作有效地址来使用。目前Linux内核中统一使用的各式错误码原创 2017-09-22 17:51:59 · 2709 阅读 · 0 评论