嵌入式Linux基础——内核模块、内核模块参数

内核模块

1、根据实验要求编写内核模块hello.c、Makefile

hello.c

#include 
#include 

main()
{
	printf("hello world!\n");
}

Makefile

ifneq ($(KERNELRELEASE),)

obj-m :=hello.o

else
KDIR:= /lib/modules/2.6.32-431.el6.i686/build

all:
        make -C $(KDIR) M=$(PWD) modules 
clean:
        rm -f *.ko *.o *.mod.o *.mod.c .symvers

endif

obj-m:为内核顶层目录Makefiel文件中使用的变量,表示要编译成模块的目标文件。Obj-m=hello.o表示将该目录下的hello.c模块源码文件编译成模块。

KDIR:内核目录,即用来编译模块的内核源码所在目录。

-C:(change Directory)表示进入后面路径

M:内核模块代码路径

M= $ (pwd):是指要编译的内核模块的源程序在那个目录下,$(PWD)指与Makefile 在同一目录下,也就是当前目录。(pwd 命令的作用是:print work directory).

嵌入式Linux基础——内核模块、内核模块参数_第1张图片

嵌入式Linux内核模块的安装与卸载

完成模块源码编译后,接下来我们需要把内核模块hello.ko动态加载到内核。将模块加载到内核很简单,在shell命令下使用insmod命令和rmmod命令即可将内核模块添加到内核和从内核中删除模块。

(1)加载模块命令insmod

如:# insmod ./hello.ko

Insmod命令将当前目录下的hello.ko模块文件添加到内核。

(2)删除内核模块命令rmmod

Rmmod命令用来从内核移除不再需要使用的内核模块。

例如,rmmodhello.ko,即将hello.ko模块从内核中删除。

(3)使用lsmod命令可以显示当前加载到内核的模块。

2、编译内核模块

#make

嵌入式Linux基础——内核模块、内核模块参数_第2张图片

3、加载内核模块

#insmod hello.ko

嵌入式Linux基础——内核模块、内核模块参数_第3张图片

4、查看输出信息

嵌入式Linux基础——内核模块、内核模块参数_第4张图片

5、查看内核模块

#lsmod

嵌入式Linux基础——内核模块、内核模块参数_第5张图片

6、卸载内核模块

#rmmod hello

嵌入式Linux基础——内核模块、内核模块参数_第6张图片

内核模块参数

1、编写param.c、Makefile

Makefile

ifneq ($(KERNELRELEASE),)

obj-m :=param.o

else

KDIR:= /lib/modules/2.6.32-431.el6.i686/build

all:
                make -C $(KDIR) M=$(PWD) modules 
clean:
        rm -f *.ko *.o *.mod.o *.mod.c .symvers

endif

param.c

#include 
#include 

MODULE_LICENSE("GPL");

static char *name = "DAVID";
static int age=30;
module_param(age, int ,S_IRUGO);
module_param(name, charp ,S_IRUGO);
static int __init hello_init(void)
{
	printk(KERN_EMERG "Name:%s\n",name);
	printk(KERN_EMERG "Age:%d\n",age);
	return 0;
}
static void __exit hello_exit(void)
{
	printk(KERN_EMERG"Module exit!\n");
}

module_init(hello_init);
module_exit(hello_exit);

2、编译内核模块

#make

嵌入式Linux基础——内核模块、内核模块参数_第7张图片

3、加载内核模块

不加内核参数,使用默认值

#insmod param.ko

嵌入式Linux基础——内核模块、内核模块参数_第8张图片
若要重新加载已被加载过的内核模块,需先将其卸载,否则再次加载会报该内核模块已存在的错误
嵌入式Linux基础——内核模块、内核模块参数_第9张图片

使用内核模块参数

#insmod param.ko name=“Tom” age=10

嵌入式Linux基础——内核模块、内核模块参数_第10张图片

4、卸载内核模块

#rmmod param

嵌入式Linux基础——内核模块、内核模块参数_第11张图片
参考实验指导书

如果喜欢我的文章,请记得三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持,下期更精彩!!!

你可能感兴趣的:(嵌入式C++Linux,嵌入式,内核,linux,程序人生)