最基本内核模块框架

1. c文件

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int kernel_module_init(void) {
	printk(KERN_INFO "Hello, World!\n");
	return 0;
}

static void kernel_module_exit(void) {
	printk(KERN_INFO "Goodbye, World!\n");
}

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Jimmy-Jiang-Junior");
MODULE_DESCRIPTION("A simple example Linux module.");

module_init(kernel_module_init);
module_exit(kernel_module_exit);

2. Makefile

obj-m += kernel_module.o
all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

3. 编译ko后,插入失败问题解决

报错

insmod: ERROR: could not insert module kernel_module.ko: Invalid module format

这是版本不匹配导致的,使用uname -a查看linux版本

正规的思路是找到一个匹配的树莓派软件版本,编译内核模块。如果没法找到匹配的内核版本可以考虑修改./include/linux/vermagic.h文件

最快的方案是直接修改vermagic.h文件最后的define定义

#define VERMAGIC_STRING

#define VERMAGIC_STRING "5.10.0-v8 SMP preempt mod_unload modversions aarch64"
/*
#define VERMAGIC_STRING                                                 \
        UTS_RELEASE " "                                                 \
        MODULE_VERMAGIC_SMP MODULE_VERMAGIC_PREEMPT                     \
        MODULE_VERMAGIC_MODULE_UNLOAD MODULE_VERMAGIC_MODVERSIONS       \
        MODULE_ARCH_VERMAGIC                                            \
        MODULE_RANDSTRUCT_PLUGIN
*/

那么怎么找到正确的define定义呢?

在/lib/modules目录下,找到一个能够正常insmod的内核模块,使用modinfo命令查看这个内核的模块的vermagic,将这个vermagic拷贝到vermagic.h文件中即可。

[jimmy@openEuler i2c]$ modinfo i2c-dev.ko
filename:       /lib/modules/5.10.0-v8/kernel/drivers/i2c/i2c-dev.ko
license:        GPL
description:    I2C /dev entries driver
author:         Simon G. Vogl <simon@tk.uni-linz.ac.at>
author:         Frodo Looijaard <frodol@dds.nl>
srcversion:     F21EB653F3B5A8B4FB8CF96
depends:
intree:         Y
name:           i2c_dev
vermagic:       5.10.0-v8 SMP preempt mod_unload modversions aarch64
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值