linux模块编译步骤[详解].docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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.h MODULE_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/ 现在我们就明白了。其实我们在编

您可能关注的文档

文档评论(0)

shaoye348 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档