linux内核模块开发基础

1. 什么是内核模块

    内核模块具有以下两个特点:1. 模块本身并不被编译进内核文件(zImage或bzImage),可以根据需求,在内核运行期间动态的安装或卸载。

2. 为什么需要内核模块

 原因:Linux内核的整体结构非常庞大,其包含的组件也非常多,如何使用这些组件呢,方法1:把所有的组件都编译键内核,即:zImage或bzImage,但这样会导致一个问题:占用内存过多。然后内核模块就诞生了,可以不用被编译进内核但是可以动态的添加到正在运行的内核中!

3. 如何使用内核模块

   1> 安装模块 insmod filename.ko

    2> 卸载模块 rmmod filename

    3> 查看模块 lsmod


这里举一个简单的例子:

还是亘古不变的方式helloworld程序(不过这里没有main函数的)

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


static int hello_init()
{
    printk(KERN_WARNING"Hello world!\n");//前面的宏表示打印的级别
    return 0;	
}

static void hello_exit()
{
    printk(KERN_WARNING"hello exit!\n");	
}

module_init(hello_init);//用宏来指定入口 加载模块时里面的加载函数会被调用
module_exit(hello_exit);

三要素: 加载模块 、卸载模块、 头文件


Makefile文件

obj-m := helloworld.o

KDIR := /home/kernel/linux-ok6410 //开发板运行的内核的源码的路径,因为模块最后是要在开发板上运行,所以这个模块的编译是要依赖板子上运行的内核源码的,(这里我开发板用的内核源码是这个路径)

all:
	make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
	
clean:
	rm -f *.o *.ko *.order *.symvers
	
这里KDIR是我们内核源码的路径:


然后make 编译模块文件,这可可以看到生成了helloworld.ko文件


结合前面的课程这里可以通过串口终端同步看到(一下可以看到相关命令执行的效果)


内核模块的可选项:

1. 模块申明


2. 模块参数


3. 符号输出



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值