- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux?内核模块编程
Linux?内核模块编程是一个很重要的知识点。尤其是编写底层驱动程序时,一定会涉及到它。内核模块编程也是?Tiger哥学习?Linux?时第一节课所接触的知识。由此可以看出它的?important,?也可以看出其实它很?easy?。
一前言:
1.?什么是内核模块
1?内核模块是具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行。
2?模块编程和内核版本密切相连,因为不同的内核版本中某些函数的函数名会有变化。因此模块编程也可以说是内核编程。
3?特点:
模块本身不被编译进内核映像,从而控制了内核的大小;?模块一旦被加载,就和内核中的其他部分完全一样。
2?.?用户层编程和内核模块编程的区别
? 应用程序 内核模块程序 使用函数 libc?库 内核函数 运行空间 用户空间 内核空间 运行权限 普通用户 超级用户 入口函数 main() module_init 出口函数 exit() module_exit 编译 gcc makefile 链接 gcc insmod 运行 直接运行 insmod 调试 gdb kdbug?、?kdb?、?kgdb 二?.?说了这么多,那么怎么编写一个内核模块的程序呢?
1.?我们先来看两个最简单的函数实例,也是几乎所有程序员在学习一门新语言时都会编写的程序:输出?hello world!
现在我们分别用模块编程输出?hello world!?,和在用户层编程输出?hello wrold?!。通过这两个程序我们来分析下如何来编写一个内核模块程序。
用户层编程:?hello.c
#includestdio.h
int main(void)
{
printf(hello world/n);
}
内核编程?: module.c
#include linux/init.h#include linux/module.h#include linux/kernel.hMODULE_LICENSE(Dual BSD/GPL);static int hello_init(void){printk(KERN_ALERT hello,I am edsionte/n);return 0;}static void hello_exit(void){printk(KERN_ALERT goodbye,kernel/n);}module_init(hello_init);module_exit(hello_exit);//?可选?MODULE_AUTHOR(Tiger-John);MODULE_DESCRIPTION(This is a simple example!/n);MODULE_ALIAS(A simplest example);
Tiger-John?说明:
1.?相信只要是学过?C?语言的同学对第一个程序都是没有问题的。但是也许大家看了第二个程序就有些不明白了。
可能有人会说:?Tiger?哥你没疯吧,怎么会把?printf()?这么简单的函数错写成了?printk()?呢。
也有的人突然想起当年在大学学?C?编程时,老师告诉我们“一个?C?程序必须要有?main()?函数,并且系统会首先进入?main()?函数执行??,那么你的程序怎么没有?main()?函数呢?没有?main()?函数程序是怎么执行的呢?
可能也会有更仔细的人会发现:怎么两个程序头文件不一样呢?不是要用到输入和输出函数时,一定要用到?stdio.h?这个头文件,你怎么没有呢?
--------------------------------------------------------------------------------------------
Tiger?哥很淡定的告诉大家其实第二个程序是正确的,现在我们就来看看到底如何来编写一个内核模块程序。
2.?内核模块编程的具体实现
第一步:?首先我们来看一下程序的头文件
#includelinux/kernel.h
#includelinux/module.h
#includelinux/init.h
这三个头文件是编写内核模块程序所必须的?3?个头文件?。
Tiger-John?说明:
1?由于内核编程和用户层编程所用的库函数不一样,所以它的头文件也和我们在用户层编写程序时所用的头文件也不一样。
2?我们在来看看在?L inux?中又是在那块存放它们的头文件
a.?内核头文件的位置?:?/usr/src/linux-2.6.x/include/
b.?用户层头文件的位置?: /usr/include/
现在我们就明白了。其实我们在编
您可能关注的文档
- EXCEl练习要求[有提示].doc
- Excel表格中根据身份证号码自动填出生日期-计算年龄.doc
- Excel表格如何分页打印-自动分页-取消分页等技巧.doc
- excel表格行列及字符文字的单位-照相机.docx
- ExtJs4笔记Ext-XTemplate模板.doc
- F.22:冲天霸气话猛禽.doc
- Fe、购销合同[总合同-其分批合同为长期供货合同].doc
- FIDIC土木工程施工合同条件[新红皮书].doc
- FIFAOnline3浅析424阵型游戏里的《特殊性》.docx
- Flash教程.FlashMTV.实例讲解制作全过程.doc
- GB/T 32151.38-2024温室气体排放核算与报告要求 第38 部分:水泥制品生产企业.pdf
- 中国国家标准 GB/T 32151.38-2024温室气体排放核算与报告要求 第38 部分:水泥制品生产企业.pdf
- 《GB/T 22069-2024燃气发动机驱动空调(热泵)机组》.pdf
- GB/T 22069-2024燃气发动机驱动空调(热泵)机组.pdf
- 中国国家标准 GB/T 22069-2024燃气发动机驱动空调(热泵)机组.pdf
- 中国国家标准 GB/T 11064.1-2024碳酸锂、单水氢氧化锂、氯化锂化学分析方法 第1部分: 碳酸锂含量的测定 滴定法.pdf
- GB/T 11064.1-2024碳酸锂、单水氢氧化锂、氯化锂化学分析方法 第1部分: 碳酸锂含量的测定 滴定法.pdf
- 《GB/T 11064.1-2024碳酸锂、单水氢氧化锂、氯化锂化学分析方法 第1部分: 碳酸锂含量的测定 滴定法》.pdf
- GB/T 1148-2024内燃机 铝活塞.pdf
- 中国国家标准 GB/T 1148-2024内燃机 铝活塞.pdf
最近下载
- ATB-25目标配合比完整版.doc
- 2024年秋季新科粤版九年级上册化学全册教案.pdf
- 初中物理:浙江省杭州市学军中学物理试题(中学自主招生)(含参考答案).pdf VIP
- 毕业设计--35kv箱式变电站设计.doc VIP
- 最新浙江省杭州市萧山中学自主招生考试数学试卷.docx VIP
- 钢制电缆桥架工程技术规程,T_CECS31-2017.docx
- 小学美术微项目化学习案例.docx VIP
- (精优教学设计+素材)六年级上册信息技术-第8课制定行驶路线图制作引导动画粤教版(B版) (8份打包).docx
- 中联QTZ100(W6013-6A)用户手册使用说明书.pdf
- (精优教学设计+素材)五年级上册信息技术-第8课 看谁算得快粤教版(B版) (6份打包).docx
文档评论(0)