博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下内核模块编译初阶
阅读量:2379 次
发布时间:2019-05-10

本文共 917 字,大约阅读时间需要 3 分钟。

1、编写内核模块,以hello为例

#include <linux/init.h>

#include <linux/module.h>

 

MODULE_LICENSE("Dual BSD/GPL"); //内核模块的许可权限

//模块的加载函数

static int hello_init(void)   

{

printk(KERN_ALERT "hello world!\n");

return 0;

}

//模块的卸载函数

static void hello_exit(void)

{

printk(KERN_ALERT "goodbye hello world!\n");

}

//注册模块的加载函数

module_init(hello_init);

//注册模块的卸载函数

module_exit(hello_exit);

 

2、创建Makefile文件

ifneq ($(KERNELRELEASE), )

         obj-m = hello.o

else

       KERNELDIR ?= /lib/modules/$(shell uname -r )/build

       PWD := $(shell pwd)

default:

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

endif

 

clean:

        rm -f   *.ko  *.o  *.mod   *.mod  *.symvers  *.order

 

3、使用make命令即可以生产内核模块hello.ko,然后使用insmod hello.ko加载内核,使用rmmod hello卸载内核 ,使用lsmod 查看内核中所有模块。

 

注意:

Makefile书写格式非常严格,

all:
<TAB缩进>make -C $(KDIR) M=$(PWD) $(EXTRA_CFLAGS) modules
default:
<TAB缩进>make -C $(KDIR) M=$(PWD)  modules
clean:
<TAB缩进>rm -f *.ko
在拷贝网络代码的过程中,很可能原有的TAB被若干空格键所替代,就会出现Nothing to be done for...的错误了。

转载地址:http://dhlxb.baihongyu.com/

你可能感兴趣的文章
第六章 6.2.4节练习
查看>>
第六章 6.2.5节练习 & 6.2.6节练习
查看>>
第六章 6.3.2节练习
查看>>
第六章 6.4节练习 & 6.5.1节练习
查看>>
第六章 6.5.2节练习
查看>>
第六章 6.5.3节练习 & 6.6节练习
查看>>
第六章 6.6.1节练习 & 6.7节练习
查看>>
第七章 7.1.2节练习 & 7.1.3节练习
查看>>
第七章 7.3.2节练习
查看>>
Curator Framework操作zookeeper(1)-基本操作
查看>>
Linux 体系结构、远程登录、文件传输
查看>>
Linux 安装软件、配置静态IP
查看>>
JavaScript 函数、闭包
查看>>
JavaScript BOM
查看>>
JavaScript Date、Math对象、杂项
查看>>
JavaScript ES6入门
查看>>
Bootstrap的使用
查看>>
JavaScript ES6 代理,反射,函数,类
查看>>
tomcat使用指南
查看>>
Java 包装类、类型转换、数组
查看>>