⑴ mole-objs := test.o有什么作用
mole-objs 用在多.o文件编译的时候。
⑵ 编译的ko模块很大、initrd.img太大
在生产initrd.img的时候,如果发现initrd.img非常大,比如原来的40M,现在的有300M,网上有提到memory hole remap相关,没找说法的出处,反正我在bios是没找到。
ubuntu下生存initrd.img的命令:
update-initramfs -c -k <kernel_ ver>
它是将lib/moles/<kernel_ver>下的ko打包到initrd.img里。配置文件/etc/initramfs-tools/。所以先查看自己编译的ko模块是不是比原系统的ko模块大很多。
自己编译的ko模块如果比发行版的大很多,比如人家的事10K,你的ko文件是20M。这是由于编译过程中有雪的信息,比如调试的信息、段、附加信息,在运行中并不需要。
使用binuitls包的strip命令
strip -S name.ko
然后再比较大小,如果相差不多甚至相差小于1K,那就找到了问题原因。
如果还是不行,继续努力找问题吧。
⑶ linux内核模块编译-通过Makefile重命名.ko文件名和模块名
假设模块的源文件为hello.c,源码如下:
使用该文件编译内核模块。
正常情况下,Makefile文件内容如下:
执行 make 命令,生成hello.ko文件。
执行 sudo insmod hello.ko 命令,安装该模块。
执行 lsmod 命令,查看安装的模块。就会看到第一行的就是hello模块。
但是,如果想自定义模块名称为 xmole ,而不是默认的 hello ,如何实现呢?方法如下:
在Makefile中重命名obj-m并将obj-m的依赖关系设置为原始模块(hello)
修改后的Makefile文件内容如下:
将obj-m设置为 xmole .o,并使 xmole .o依赖于 hello .o.
执行 make 命令后,生成 xmole .ko, 而不是 hello .ko,
安装命令: sudo insmod xmole.ko
查看命令: lsmod ,就会看到被安装名为 xmole 的模块。
⑷ 如何编译linux驱动ko
本文详细阐述了Linux驱动KO的编译方法,重点介绍单编驱动KO的流程与优势。在Linux系统中,.ko文件即模块文件,Linux提供了模块机制,具有不直接影响内核映像大小与加载后功能等同于内核内其他部分的特点。
实验环境包括MINI2440开发板与基于linux-2.6.32.2的软件环境。编译Linux驱动KO主要分为两种方式:整编内核与单编KO。
整编内核模式下,通过将驱动程序demo_driver.c拷贝至指定目录,调整Makefile文件,然后在内核源码顶层目录执行编译指令,最终生成demo_driver.ko文件。然而,这种方式涉及整个内核的编译过程,耗时约20分钟。
单编KO方法则更简洁。使用make moles指令编译内核中所有模块,或通过增加“M”参数指定单独编译某一模块。单编KO模式下,需要一个特殊的Makefile文件,该文件定义了内核目录、交叉编译工具等变量,指定将demo_driver.c编译成demo_driver.ko文件。通过简单的make指令,编译过程只需3秒左右,效率显着提高。
编译完成后,将demo_driver.ko文件传输至开发板中并加载,通过查看设备与测试驱动,确保其正常运行。单编KO模式优势在于快速编译过程,这使得开发者在调试和迭代驱动程序时更为高效。
总结,Linux驱动KO的编译方法主要包括整编内核与单编KO两种。单编KO方法以其快速编译优势成为一种高效且实用的选择。如果您觉得本文对您有所帮助,请给予支持与反馈,您的认可是我持续更新的动力。