Linux内核模块

一、内核模块

内核模块是一个具有独立功能的程序。它可以被单独编译,但是不能单独运行,它的运行必须被链接到内核作为内核的一部分在内核空间中运行。

二、编写Makefile来编译内核模块

obj-m += 源文件名.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

三、编写Makefile文件后,使用make进行编译,编译完就出现一个.ko的文件,这个就是内核模块,需要载入运行。

四、载入内核模块进行运行

载入内核模块的方法有很多,比如:modprobe 和 insmod(install module),前者会分析模块的依赖关系,并且会去指定路径查找内核模块载入,

而后者需要指定内核模块的绝对路径进行载入并且不解决模块的依赖关系。这里使用insmod来载入内核模块,使用rmmod(remove module)卸载内核模块。

[root@localhost kernel_module]# insmod hello.ko

使用dmes查看内核模块的速出Hello world

卸载内核模块

[root@localhost kernel_module]# rmmod hello

dmesg查看输出Goodbye world

五、内核模块和应用程序编程的异同点:

  • 内核模块编程是不能使用标准库(比如malloc free等)和一些第三方的库
  • 内核模块编程是没有内存保护的,如果内存访问错误,就会出现oops错误
  • 内核模块编程是没有main函数的,只有一个初始化函数和一个退出函数
  • 内核模块编程需要使用内核提供的头文件和API
  • 内核模块编程的标准输出是输出到文件,而不是输出到屏幕
  • 内核模块编程的debug是不能使用gdb来进行调试的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值