我的编程空间,编程开发者的网络收藏夹
学习永远不晚

linux怎么在2.6内核中编译内核模块

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

linux怎么在2.6内核中编译内核模块

这篇文章主要介绍linux怎么在2.6内核中编译内核模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

编译内核模块的方法与编译一般应用程序的方法略有不同. 我们会发现在内核源码树的层层目录中, 都存在有Makefile. 即这些Makefile是分层次组织的. 以往的内核版本中, 编译内核模块比较麻烦, 需要我们对这些Makefile做出许多更改. 2.6的内核采用了"kbuild"编译系统, 简化了这些问题. 关于kbuild, 可参考内核源码树中的 /Documentation/kbuild/modules.txt.

编译之前, 肯定是需要源文件的. 这些源文件可以放在内核源码树中, 也可以放在内核源码树之外的任何地方. 根据源文件存在的目录, 存在两种编译方法: 在源码树之中和在源码树之外.

在源码树中编译模块

官方内核模块的源代码都是按模块(驱动)类型组织的, 我们到内核源码树的drivers目录可以看到char, usb, block之类的子目录. 那么我们在内核源码树中添加文件时, ***也遵循这些分类. 分类的规则自己灵活把握.

下面以前面的"hello, world"这个简单的模块为例, 来看看如何在内核源码树中编译内核模块.

1, 不新建子目录

(1) 先在内核源码树中的drivers目录编辑一个c源程序, 名为hello.c.
(2) 修改drivers目录的Makefile文件, 添加: obj-m += hello.o
(3) 重新编译内核(回到源码树根目录, 运行 $ sudo make).

这样, 在drivers目录多出了这样几个文件: hello.mod.c, hello.mod.o, hello.o, hello.ko. hello.ko就是编译出来的模块了.

2, 新建子目录

如果源文件比较多, 可以在drivers目录中新建子目录. 还是以hello, world为例:

(1) 在内核源码树的drivers目录中新建一个hello子目录, 并将hello.c放在hello目录中.
(2) 修改drivers目录的Makefile文件, 添加: obj-m += hello/
(3) 在hello目录中新建一个Makefile文件, 内容为: obj-m += hello.o
(4) 重新编译内核(回到源码树根目录, 运行 $ sudo make).

这样, 新生成的模块文件就位于hello目录中.

若在内核源码树中编译内核模块, 如果不新建子目录, 那么只需修改当前目录的Makefile, 否则应该在当前新建的子目录中新建Makefile指定编译选项, 并修改上层目录的Makefile以让kbuild能够进入新建的子目录.

在源码树之外编译模块

还是以上面的hello, world为例. 在当前目录有个hello.c:

(1)首先在模块代码所在的目录新建一个Makefile, 内容为:

obj-m := hello.o

(2)这样调用make命令:

$ sudo make -C /usr/local/class="lazy" data-src/kernel/linux-2.6.16.20 SUBDIRS=$PWD modules

这里/usr/local/class="lazy" data-src/kernel/linux-2.6.16.20是内核源码树所在的目录.

-C表示要求make先切换到-C指定的目录. SUBDIRS(也可以用M代替SUBDIRS)使make在编译内核模块之前回到当前目录.

整个编译过程实际上是执行-C指定的内核源码树的Makefile, 并通过SUBDIR指定你要编译的内核源文件的目录.

简化命令行输入

每次调用make的时候输入这些参数比较比较麻烦, 可以这样来改写Makefile以简化:

obj-m += hello.oall: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
这样, 只需在当前目录调用 $ sudo make 就可以完成上面的工作. 调用 $ sudo make clean 将删除所有新生成的文件.

上面的Makefile是这样确定内核源码树所在的目录的: 我们先到/lib/modules目录, 会看到一些以内核版本为名的目录, 目录中有一个build文件, 它是一个符号连接, 指向内核源码树. 那么如何确定进入哪个内核版本的目录呢? 这就可以通过 $ uname -r 来确定, 它指出了当前运行内核的版本.

还可以进一步简化这个Makefile:

obj-m := hello.o  KERNELDIR ?= /lib/modules/$(shell uname -r)/build  PWD := $(shell pwd)  default:   $(MAKE) -C $(KERNELDIR) M=$(PWD) modules  clean:   $(MAKE) -C $(KERNELDIR) M=$(PWD) clean

这样不用在Makefile中一次又一次地指定内核代码树的目录.

上面的例子中只讨论了所有的代码在一个文件中的情况. 若代码分布在多个源文件中, 比如file1.c, file2.c, 生成hello.ko. 应该这样写Makefile:

  1. obj-m := hello.o  

  2. hello-objs := file1.o file2.o 


注意, 虽然我们的目的是生成.ko文件, 但在Makefile中写为.o!

以上是“linux怎么在2.6内核中编译内核模块”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

linux怎么在2.6内核中编译内核模块

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux怎么在2.6内核中编译内核模块

这篇文章主要介绍linux怎么在2.6内核中编译内核模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!编译内核模块的方法与编译一般应用程序的方法略有不同. 我们会发现在内核源码树的层层目录中, 都存在有Makefil
2023-06-16

怎么在Linux中编写内核模块

怎么在Linux中编写内核模块?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。尽可能不要用root身份默认情况下,/dev/reverse只有root可以使用,因此你只能使用su
2023-06-12

怎么编写Linux内核模块

这篇文章主要讲解了“怎么编写Linux内核模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么编写Linux内核模块”吧!Linux内核和它的用户空间是大不相同的:抛开漫不经心,你必须小心
2023-06-16

怎么编译Linux内核

这篇文章主要为大家展示了“怎么编译Linux内核”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么编译Linux内核”这篇文章吧。下载内核我们要做的***件事是下载内核源码。在 Kernel.o
2023-06-16

Linux模块文件如何编译到内核和独立编译成模块

这篇文章主要介绍“Linux模块文件如何编译到内核和独立编译成模块”,在日常操作中,相信很多人在Linux模块文件如何编译到内核和独立编译成模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux模块文件
2023-06-15

linux内核编译怎么优化

编译 Linux 内核时,可以采取以下几种优化措施来提高性能:选择合适的配置选项:根据硬件平台和特定要求,选择适合的配置选项。可以使用 make menuconfig 或 make xconfig 命令来配置内核选项。开启优化选项:选择适当
linux内核编译怎么优化
2024-02-29

Ubuntu编译内核模块,内容体现系统日志中

目录1.linux登陆界面2.编写代码3.编写Makefile文件4.编译:5.插入模块6.查看日志输出1.Linux登陆界面 1.检查当前文件目录: 通过Xshell连接Linux系统后 输入命令:ls2. 新
2022-06-04

Linux内核怎么编译和安装

这篇文章主要介绍“Linux内核怎么编译和安装”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Linux内核怎么编译和安装”文章能帮助大家解决问题。Linux内核介绍Linux发行版是在Linux内核
2023-06-28

Linux系统下怎么编译安装支持NTFS的内核模块

这篇文章主要讲解了“Linux系统下怎么编译安装支持NTFS的内核模块”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux系统下怎么编译安装支持NTFS的内核模块”吧!当你安装完Linu
2023-06-10

linux中内核模块指的是什么

本文小编为大家详细介绍“linux中内核模块指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux中内核模块指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在linux中,内核模块是linu
2023-06-29

怎么深入学习Linux内核模块

本篇文章给大家分享的是有关怎么深入学习Linux内核模块,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。lsmod 命令能够告诉你当前系统上加载了哪些内核模块,以及关于使用它们的
2023-06-16

ubuntu内核怎么重新编译

本文小编为大家详细介绍“ubuntu内核怎么重新编译”,内容详细,步骤清晰,细节处理妥当,希望这篇“ubuntu内核怎么重新编译”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。ubuntu重新编译内核的示例:例如重
2023-07-04

linux编译内核的步骤是什么

编译Linux内核的步骤如下:1. 获取内核源代码:从官方网站或开源社区下载最新版本的Linux内核源代码。2. 安装编译工具:确保系统中已经安装了必要的编译工具,如GCC、Make工具和相应的依赖库。可以通过运行`sudo apt-get
2023-10-07

linux编译内核的原因是什么

这篇文章主要讲解了“linux编译内核的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux编译内核的原因是什么”吧!原因:新的内核修订了旧内核的
2023-04-06

linux内核编译的步骤是什么

Linux内核编译的步骤如下:获取内核源代码:可以从官方网站下载最新版本的内核源代码,也可以从GitHub等开源社区获取。解压源代码:使用解压工具将下载的内核源代码解压到合适的目录中。配置内核:进入源代码目录,在命令行中运行make命令来打
linux内核编译的步骤是什么
2024-02-29

怎么在CentOS系统中对内核进行编译

这篇文章给大家介绍怎么在CentOS系统中对内核进行编译,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux 内核简介最上面是用户(或应用程序)空间。这是用户应用程序执行的地方。用户空间之下是内核空间,Linux
2023-06-07

Ubuntu虚拟机里怎么编译内核

本篇内容介绍了“Ubuntu虚拟机里怎么编译内核”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、”Ctrl+Alt+T”进入终端,使用命令
2023-06-13

Linux内核编译到最后卡住了怎么办

如果Linux内核编译到最后卡住了,可能是由于各种原因导致的编译错误或者死循环。以下是一些解决方法:检查编译输出信息:查看编译过程中的输出信息,看看是否有任何错误或警告信息。这可以帮助确定问题所在。检查配置文件:确保你使用的配置文件正确,并
Linux内核编译到最后卡住了怎么办
2024-03-07

ubuntu编译内核错了怎么清理

如果您在编译Ubuntu内核时出现错误,您可以尝试以下方法来清理编译过程中生成的临时文件和目录:删除已编译的内核文件:您可以使用以下命令删除已编译的内核文件:sudo rm -rf /usr/src/linux-headers-
ubuntu编译内核错了怎么清理
2024-03-02

Ubuntu编译内核模块和内容体现系统日志中的示例分析

这篇文章给大家分享的是有关Ubuntu编译内核模块和内容体现系统日志中的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.Linux登陆界面1.检查当前文件目录:通过Xshell连接Linux系统后输入命
2023-06-22

编程热搜

目录