lkmpg介绍

六月 3, 2007 at 7:36 下午 (linux)

寒假看了lkmpg(The Linux Kernel Module Programing Guide),短小精悍的一本书,很有意思,对内核模块以及相关的一些系统知识都有介绍.

第一章提纲挈领,介绍了什么是module,module的加载以及编译自己的module之前需要注意的一些问题.

第二章以实例开始讲模块的编写语法,编译方法等.这本书里面实例很多,基本以实例为主线,其中有一些很有趣.为了避免使用makefile带来的代码重复,难以维护等问题,内核采用一种叫kbuild的方法,具体内容可以看linux/Documentation/kbuild/modules.txt,我在wiki里摘抄了主要内容.详细的内核makefile编写可以参考linux/Documentation/kbuild/makefiles.txt,wiki上也有摘要.第五节讲了内核模块文档的发布,可以利用linux/module.h中定义的宏来提供module的相关信息.最后介绍了在内核版本不兼容的情况下如何强行加载模块。内核模块的输出在内核缓冲区,在stdout中看不到,可以用demesg查看,/var/log/messages中也有相关信息。

第三章对比了普通程序和模块,对理解内核工作机制有很大帮助.还有内核空间,用户空间介绍等,大家应该已经很了解了.

之后两章讲了模块相关的字符设备和/proc的内容,如何在/dev下注册一个设备,注销设备,有一个注册字符设备的例子,模块能显示设备被读取的次数.上一章的最后讲了设备文件的一些知识./proc在模块编程中比较重要,它是内核向外输出信息的方便途径.第五章介绍使用/proc的方法,/proc中文件建立在内存中,和设备文件不同,它有自己专用的一些函数。
http://bbs.chinaunix.net/viewthread.php?tid=746017 这篇文章里有/proc专用函数的详细介绍
http://www.pcdog.com/edu/ren/2005/08/d017014.html 这篇文章有/proc具体内容的介绍

前面说的是从内核获得输出的两种方法,第六章是关于用/proc作为输入的方法.用linux中标准的注册文件方法,用包含结构体 struct inode_operations指针的结构体struct file_operations.

第七章是模块和与设备文件的对话,就一个例子,没怎么看明白:(,有谁读完了写一下吧。

第八章比较有意思,关于系统调用的,加一点自己的代码,然后由内核调用原函数,来改变系统调用(也可以直接写一个自己的函数,然后改变sys_call_table,使其指针指向我们自己的函数,不过有很大风险,欲知详情请看本章九.十段…).
它给了一个例子,改了open()
original_call = sys_call_table[__NR_open];
sys_call_table[__NR_open] = our_sys_open;
trick: 要查看某个程序用了哪些系统调用,strace ./yourprogram

后面基本都是一些有趣的例子。第九章进程阻塞,实例创建/proc/sleep 只能同时被一个程序打开。第十章替换printk,来实现向终端输出信息,用了一个结构current->tty->drive,先获得当前任务使用的tty,然后输出;让键盘灯闪起来,使用的一些函数在
/usr/src/linux/drivers/char/keyboard.c, function setledstate().

十一章任务调度,有关模块与进程通信的,十二章是模块与硬件的通信,一个与键盘通信的例子.
十三章smp,随便提了一下.

附录中简介2.0到2.2的变化和一些进阶资源.

关于模块编程,网上似乎文章不多,有一篇台湾人写的流传甚广, http://bbs.chinaunix.net/viewthread.php?tid=612535 很经典.

——————————————————————————–

hechunxiao
2007-03-07

固定链接 Leave a Comment

unix的笑话

十一月 22, 2006 at 9:00 上午 (linux)

(1)Ken Thompson曾被问道如果他能重新设计UNIX他将做什么修改,他回答说:“我会在creat命令后加上个e。”
(2)Ken Thompson 自己设计过一辆汽车。和其他车不同,它没有速度计、汽油计,也没有那
些愚蠢的指示灯讨司机的厌。如果司机犯了什么错误,仪表盘上就会出现一个大大的“?”。“有经验的司机,”Thompson说,“应该知道哪儿搞错了。”
(3)%cat \”food in cans\”
cat: can\’t open food in cans
(4)%rm God
rm:God nonexistent
(5)%ar t God
ar: God does not exist
(6)%make love
Make: Don\’t know how to make love.Stop.

固定链接 Leave a Comment

linux的3D桌面

十一月 21, 2006 at 10:38 上午 (linux)

最近网上到处都在介绍LINUX下的3D桌面,我也下了一个体验了一把.感觉很不错,效果相当绚丽,而且除了个别的几个特效,基本不怎么消耗资源,我这个ACER的破本都能流畅的使用…
linux下实现3D效果可以通过xgl或aiglx加beryl实现,xgl是novell做的一个新的X服务层,貌似比较慢,我试过一次,效果没有完全开启,但机器速度已经明显下降.而aiglx是redhat在原有x服务层的扩展,适合很多发行版本使用.beryl(红宝石)是一个composite manager(特效管理器)+window manager(窗体管理器),还需要安装Emerald(绿宝石)这个window decorator(窗体样式管理器). 还有个compiz,是新的composite manager+window manager,还需要安装window decorator(窗体样式管理器)来管理窗体样式(诸如颜色、透明、按钮等).如果你两个都安装的话,启动beryl后会有个选择菜单,你可以选择compiz/beryl/gnome/kde…中的任意一个作为窗口管理器.
我用的是ubuntu 6.1 edgy,直接集成了AIGLX,所以直接安装beryl和emerald就行.官方wiki上有各种版本LINUX下XGL和AIGLX的详细介绍,这是UBUNTU6.1的介绍href=\”http://wiki.beryl-project.org/index.php/Install/Ubuntu/Edgy/AiGLX\”>http://wiki.beryl-project.org/index.php/Install/Ubuntu/Edgy/AiGLX
先修改源
sudo vim /etc/apt/source.list
deb http://ubuntu.beryl-project.org edgy main-edgy
按WIKI介绍下载公钥
然后用apt-get安装beryl和emerald-themes,在命令行下用beryl-manage启动beryl,一切就OK了,然后就可以眩一下你的3D桌面了.
我的机器是intel集成显卡,不需要配置就可以,用nvdia和ati要改挺多配置才能实现,ubuntu论坛上面有很多相关的帖子,大家可以上去参考一下.
改天发几个图上来…

固定链接 Leave a Comment