.i-n-u-x系统高级编程.pdf

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
下载 下载 下载 第四篇 L i n u x系统高级编程 第18章 Linux 内核模块编程 本章从一个简单的程序Hello Wo r l d开始介绍L i n u x 内核模块的编程。 18.1 一个简单程序Hello World 一个内核模块至少包括两个函数:一个是初始化函数 i n i t _ m o d u l e ,在模块被插入到内核时 使用;另一个是清除函数 c l e a n u p _ m o d u l e ,在模块被从内核中移走时使用。一般情况下,函数 i n i t _ m o d u l e或者在内核中注册一个处理程序,或者使用自己的代码替换一个内核函数。函数 c l e a n u p _ m o d u l e 的作用是清除i n i t _ m o d u l e所作的任何事情,这样模块可以安全地卸载。 下面来看一个简单的程序。 /* hello.c */ /* The necessary header files */ /* Standard in kernel modules */ #include linux/kernel.h /* Were doing kernel work */ #include linux/module.h /* Specifically, a module */ /* Initialize the module */ int init_module() { printk(Hello, world - this is the kernel speaking\n); /* If we return a non zero value, it means that init_module failed and * the kernel module cant be loaded */ return 0; } /* Cleanup - undid whatever init_module did */ void cleanup_module() { printk(Short is the life of a kernel module\n); } # Makefile for a basic kernel module C C = g c c MODCFLAGS := -O6 -Wall -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLinux h e l l o . o : hello.c /usr/include/linux/version.h $(CC) $(MODCFLAGS) -c hello.c echo insmod hello.o to turn it on echo rmmod hello to turn if off e c h o echo X and kernel programming do not mix. echo Do the insmod and rmmod from outside X. 152计计第四篇 Linux 系统高级编程 下载 现在,你可以登录到超级用户下,然后执行 insmod hello 和rmmod hello 。你可以在 / p r o c / m o d u l e s 中查看新的内核模块。 18.2 设备文件 内核模块包括两种方法和一个进程通信。一种方法是使用设备文件,例如目录 / d e v 下的文 件,另一种方法是使用文件系统。因为编写内核模块的一个主要

文档评论(0)

zhuanqmf01 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档