作者:好人民看到了 | 来源:互联网 | 2024-11-30 11:11
本文档详细描述了在Ubuntu 20.04操作系统中,利用QEMU虚拟化技术加载并测试首个Linux驱动模块的方法。整个过程基于Linux内核4.0版本。
准备工作包括下载Linux 4.0内核源码以及设置QEMU开发环境。
接下来,我们将创建一个简单的驱动模块——Hello World模块。
1. 编写驱动程序代码
#include
#include
#include
static int __init hello_world_init(void)
{
printk(KERN_INFO "Hello, World!\n");
return 0;
}
static void __exit hello_world_exit(void)
{
printk(KERN_INFO "Goodbye, World!\n");
}
module_init(hello_world_init);
module_exit(hello_world_exit);
MODULE_LICENSE("GPL");
将上述代码保存为HelloWorld.c
,并放置于kernel/drivers/rivotek
目录下。
2. 编写Makefile和Kconfig文件
Kconfig文件:
config HELLOWORLD
tristate "Hello World driver support"
default m
help
This option enables the Hello World driver module for testing purposes only.
Makefile文件:
# Makefile for the Rivotek device drivers
obj-$(CONFIG_HELLOWORLD) += HelloWorld.o
通过这些配置,确保在执行make [defconfig]
命令时,HelloWorld驱动会被编译成HelloWorld.ko
模块。
3. 更新drivers目录下的Kconfig和Makefile文件
为了使内核构建系统能够识别新添加的rivotek驱动模块,需要修改drivers/Kconfig
和drivers/Makefile
文件。
修改Kconfig文件:
diff --git a/drivers/Kconfig b/drivers/Kconfig
index c0cc96ba..aa659097 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -182,4 +182,6 @@ source "drivers/thunderbolt/Kconfig"
source "drivers/android/Kconfig"
+source "drivers/rivotek/Kconfig"
+endmenu
修改Makefile文件:
diff --git a/drivers/Makefile b/drivers/Makefile
index 527a6da8..e178dba6 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -165,3 +165,6 @@ obj-$(CONFIG_RAS) += ras/
obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
obj-$(CONFIG_CORESIGHT) += coresight/
obj-$(CONFIG_ANDROID) += android/
+
+obj-y += rivotek/
完成上述步骤后,可以通过make menuconfig
命令检查配置选项是否正确添加。
4. 测试驱动模块
在清理旧的编译结果后,重新编译内核并安装新模块。
执行命令:make distclean && make vexpress_qemu_defconfig && make -j10
编译完成后,检查drivers/rivotek/
目录,确认HelloWorld.ko
模块已成功生成。
最后,使用QEMU启动内核,并验证模块加载情况。