- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux模块编译步骤(详解).
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/
现在我们就明白了。其实我们在编
您可能关注的文档
- linux_mips启动流程_存储相关..doc
- Linux下ODBC安装配置..docx
- linux下oracle11G安装与卸载..docx
- linux下如何使用USB转串口线..doc
- linux下安装oracle11g过程以及出错处理..docx
- Linux下搭建DNS服务器..doc
- linux下Mysql数据库远程连接操作..doc
- Linux下新手基本操作..doc
- linux下的shell项目知识累积..doc
- Linux与Windows纠缠多年的七个矛盾..docx
- 中考语文总复习语文知识及应用专题5仿写修辞含句子理解市赛课公开课一等奖省课获奖课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第二课《藏猫猫》精品课件.pptx
- 湖南文艺版(2024)新教材一年级音乐下册第三课《我向国旗敬个礼》精品课件.pptx
- 高中生物第四章生物的变异本章知识体系构建全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 整数指数幂市公开课一等奖省赛课微课金奖课件.pptx
- 一年级音乐上册第二单元你早全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级数学上册第二章实数27二次根式第四课时习题省公开课一等奖新课获奖课件.pptx
- 九年级物理全册11简单电路习题全国公开课一等奖百校联赛微课赛课特等奖课件.pptx
- 八年级语文下册第五单元19邹忌讽齐王纳谏省公开课一等奖新课获奖课件.pptx
- 2024年秋季新人教PEP版3年级上册英语全册教学课件 (2).pptx
文档评论(0)