kernel module的单独的编译与insmod

10 篇文章 4 订阅
7 篇文章 0 订阅

Kernel: v4.4.159
Device: rk3328
Platform Version: Android 9.0

前言:

我们要调试驱动模块,但整个编译kernel太麻烦,这个时候就需要单独编译,下面就介绍一下详细的编译过程。

编译环境:

首先需要一个编译过的kernel源码,当然使用ubuntu系统/usr/src/linux-headers-x.xx.x-xx-generic下的kernel源码也可以。

区别

  1. 使用编译过的kernel源码来编译,那么编译后生成的.ko文件,和之前编译kernel时的架构一样。
  2. 使用ubuntu系统下kernel源码编译,生成的.ko文件,是x86-64架构,只能在x86体系架构上使用。

测试源文件:

test.c

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

MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("lost");

static int __init test_init(void)
{
	printk(KERN_DEBUG "test init.\n");
	return 0;
}

static void __exit test_exit(void)
{
	printk(KERN_DEBUG "test init.\n");
}

module_init(test_init);
module_exit(test_exit);

Makefile文件:

Makefile

#Deisgn by wolfnx

Q       := @
COBJS  += test.o

ifeq ($(KERNELRELEASE), )

#使用自定义路径下的kernel编译
#KERNELDIR ?=/home/lost/lost/source/kernel
#使用系统路径的kernel源码编译,根据自己系统路径修改
KERNELDIR ?=/usr/src/linux-headers-4.15.0-62-generic

PWD :=$(shell pwd)

modules:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:
	$(Q)rm -f  *.ko   *.o   *.mod.c   modules.order   Module.symvers

.PHONY:modules modules_install clean

else
	obj-m :=$(COBJS)
endif

验证过程:

  1. 使用系统路径编译及验证:

     make  //编译
     file test.ko //查看编译后的文件可执行架构(只能在同种架构挂载)
    

    1

     sudo insmod test.ko  //挂载
     sudo rmmod test.ko  //卸载
    

    1

  2. 使用自定义kernel编译及验证(在Android开发板中验证)

     make  //编译
     file test.ko //查看编译后的文件可执行架构(只能在同种架构挂载)
    

    1

     insmod test.ko  //挂载
     rmmod test.ko  //卸载
    

    1

转载请注明出处:http://www.wolfnx.com/2018/11/11/CompilingKernelModule

作者 : wolfnx
邮箱 : wolfnx@outlook.com
邮箱2 : lostnx@gmail.com

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值