1 / 126
文档名称:

LINUX内核模块编程指南.doc

格式:doc   大小:2,066KB   页数:126页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

LINUX内核模块编程指南.doc

上传人:小辰GG 2021/10/25 文件大小:2.02 MB

下载得到文件列表

LINUX内核模块编程指南.doc

相关文档

文档介绍

文档介绍:下载
第 1 章 Hello, World
如果第一个程序员是一个山顶洞人,它在山洞壁(第一台计算机)上凿出的第一个程序应该 是用羚羊图案构成的一个字符串“ Hello, Wo rld”。罗马的编程教科书也应该是以程序“ Salut,
M undi”开始的。我不知道如果打破这个传统会带来什么后果,至少我还没有勇气去做第一个 吃螃蟹的人。
内核模块至少必须有两个函数:i nit_module和clea nup_module。第一个函数是在把模块插 入内核时调用的;第二个函数则在删除该模块时调用。一般来说, in it_module可以为内核的
某些东西注册一个处理程序,或者也可以用自身的代码来取代某个内核函数 (通常是先干点别
的什么事,然后再调用原来的函数 )。函数cleanup_module的任务是清除掉init_module所做的
一切,这样,这个模块就可以安全地卸载了。
ex helld+c
/* hello+c
Copyright (C) 199B by Orl Pomerantz
*
* ''Hello, world" - thE kernel module version.
/* The necessary header files */
/* Standard 1n kernel modules */
#include <linux/kernel,h> /* WeTre doing kernel work
*/
nr 1 nd& /11 hij//mnriul p . h> /* Snpfil fi cal 1 v. a inodlll e
/* Deal with CONF[G_MODVERSIONS */
#if COKFIG_MODVERSIONS=1
^define MODVERSIDNS
#include <11nux/>
#endif
/* Initialize the module */
int init_madule()
{
printk(MHello. world - this is the kernel speaklng\nM);
/* 叶 we return a non zeto value, It 耐a” thH
init_fnodule failed arid the kernel module
can't be loaded */
return 0;
}
/* Cl eanun - undi d what:^ Vpr I ni t mnriul ri 1 rl */
Z LJ-A^i I w i -1! E:il JM I I 坊 hq-y D V fe. R^> I U FJ S 4 f
#■1 r COMF1 G_MODV ERSI CN£ 1
r i n Mfinv F l-eft i
# ) ri> ud« < I 1 . vc rs 1 orii . Ii>
『匸n<d ■? r
下载 p* *+*■ k i n y \ ■n-, p J :
146: 二第二部芳""Linux内核模块编程指南
Fj ■■- ■ ii ii-lc C J,ii ib- i ・■・ w<.i r H nd - this 1 s t [lie ka rit *r"l
r r >*■+ r-M i-ij r- n 凸 non zero
1 n 1七_moef u 1 c "TnTTacl anti
V3 1 uc , 1 t 町・口・3 ■■牙
卜 i h lie r・ i I E0 DL u |] u
■■■ *? t ie r n U :
/ ■*' <: 1 « n u p d wt> a t c v c r 1 n 1 n_-h eJI i ■* /
void, c 1 c-a nuip_ma也 u 1 >
C
pr-r ntkC "EJiamt 1 s r T i 4 1 mo-du 1 c Kn" > s
j

内核模块的Makefiles文件
内核模块并不是一个独立的可执行文件,而是一个对象文件,在运行时内核模块被链接 到内核中。因此,应该使用-C命令参数来编译它们。还有一点需要注意,在编译所有内核模 块时,都将需要定义好某些特定的符号。
? _ _KERNEL_ _ — 这个符号告诉头文件:这个程序代码将在内核模式下运行,而不要 作为用户进程的一部分来执行。
? MODULE — 这个符号告诉头文件向内核模块提供正确的定义。
? LINUX — 从技术的角度讲,这个符号不是必需的