• 注册
当前位置:1313e > 默认分类 >正文

linux模块化加载命令 linux模块化机制

在linux中 加载/卸载模块可以使用什么命令

insmod :加载模块,该命令可以加入适当的参数;

rmmod:卸载模块;

求助求助 red hat linux操作系统实现electron模块加载的指令

内核模块的程序结构

模块加载函数(必须)

当通过insmod或modprobe命令加载内核模块时,模块会自动被内核执行,完成模块的相关初始化工作。

一般以 __init标识声名函数,并且用“module_init(初始化函数名)”来初始化

模块卸载函数

模块许可证声名

模块参数

模块导出符号

模块作者等信息声名

独立编译Makefile

#makefile for kernel module

MODNAME=helloworld

ifeq ($(PLATFORM), PC)

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

else

KERNELDIR?=你的linux源码编译路径

endif

obj-m := $(MODNAME).o

default:

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

clean:

@rm -rf *.o *.ko *.mod.* *.tmp* module* Module*

123456789101112131415

注意ifeq 后面要有个空格

模块测试源码

#include linux/init.h

#include linux/module.h

static int __init helloworld_init(void)

{

printk(KERN_DEBUG "My first hello world kernel module!\n");

return 0;

}

static void __exit helloworld_exit(void)

{

printk(KERN_DEBUG "Bye,cruel world !\n");

}

module_init(helloworld_init);

module_exit(helloworld_exit);

1234567891011121314151617

编译

初始化变量 export PLATFORM=PC

编译: make

执行make后得到对应的.ko文件

模块加载及卸载

insmod helloworld.ko

rmmod helloworld

执行加载命令时我们希望打印 My first hello world kernel module!

卸载时我们希望能打印 Bye,cruel world !

然而实际上什么都没打印,lsmod查看helloworld.ko有成功加载

printk输出

在Linux中,内核打印语句printk()会将内核信息输出到内核信息缓冲区中,内核缓冲区是在

kernel/printk.c中通过如下语句静态定义的:

static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);

1

内核信息缓冲区是一个环形缓冲区(Ring Buffer),因此,如果塞入的消息过多,则就会将之前的消

息冲刷掉。

printk()定义了8个消息级别,分为级别0~7,级别越低(数值越大),消息越不重要,第0级是紧急

事件级,第7级是调试级

通过/proc/sys/kernel/printk文件可以调节printk()的输出等级,该文件有4个数字值:

控制台(一般是串口)日志级别:当前的打印级别,优先级高于该值的消息将被打印至控制台。

默认的消息日志级别:将用该优先级来打印没有优先级前缀的消息,也就是在直接写printk(“xxx”)而不带打印级别的情况下,会使用该打印级别。

最低的控制台日志级别:控制台日志级别可被设置的最小值(一般都是1)。

默认的控制台日志级别:控制台日志级别的默认值。

用户可以通过dmesg命令查看内核打印缓冲区,而如果使用sudo dmesg -c命令,则不仅会显示__log_buf,还会清除该缓冲区的内容。

————————————————

版权声明:本文为CSDN博主「linyplhm」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:

Linux 添加 net 模块

Linux 添加 net 模块的方法是:

1、创建c文件和makefile文件:在任意位置创建一个文件夹(我创建的名称为/drive)mkdir drive后,输入cd drive 进入文件夹。输入vim hello.c新建hello.c文件,输入以下代码。

2、输入 vim Makefile(注意首字母大写,否则编译过程中可能会报错),敲下以下代码。

3、编译makefile文件:直接在/drive(我自己创建的文件夹)下输入make指令即可(只输入这一个单词)。

4、隐藏错误:通过指令dmesg |tail -1查看模块是否添加成功时,遇到了以下报错。

5、最后再通过dmesg |tail -1指令。

操作使用工具:Linux。

使用工具版本:CentOS-7.0-x86_64-DVD-1503-01.iso。

Linux编译内核模块Makefile中指令的作用是:

obj-m:指定构建为可加载内核模块的目标文件。 构建外部模块的命令是:make -Cpath_to_kernel_srcM=$PWD。

-C $(KERNEL_DIR):内核源所在的目录。 “make”实际上会在执行时更改为指定的目录,并在完成时更改回来。

KERNEL_DIR:指内核源目录的路径。

M = $ PWD:通知make正在构建外部模块。 赋予“M”的值是外部模块所在目录的绝对路径。

在嵌入式Linux在开发过程中遇到相关联的多个模块加载怎么办?

nsmod和rmmod分别用于加载和卸载模块,但是每次只能加载/卸载一个模块,如果一个模块依赖于多个模块,则需要进行多次操作,比较繁琐。modprobe命令集加载/卸载功能于一身,并且可以自动解决模块的依赖关系,将某个模块所依赖的其他模块全部加载。

用法:#modprobe 【选项】 模块 【符号=值】

同时modprobe支持很多选项

你也可以看一下ZLG的嵌入式Linux开发教程第64页,写得非常详细,我觉得很适合入门。

linux系统中哪个命令可以用来加载驱动程序

在2.4内核中,加载驱动命令为:insmod ,删除模块为:rmmod;

在2.6以上内核中,除了insmod与rmmod外,加载命令还有modprobe;

insmod与modprobe不同之处:

insmod 绝对路径/××.o,而modprobe ××即可,不用加.ko或.o后缀,也不用加路径;最重要的一点是:modprobe同时会加载当前模块所依赖的其它模块;

lsmod查看当前加载到内核中的所有驱动模块,同时提供其它一些信息,比如其它模块是否在使用另一个模块。

如何查看Linux加载内置模块的信息

一、找出内置模块列表

要得到内置模块列表,运行下面的命令。

$ cat /lib/modules/$(uname -r)/modules.builtin

你也可以用下面的命令来查看有哪些内置模块:

二、找出内置模块参数

每个内核模块无论是内置的还是可加载的都有一系列的参数。对于可加载模块,modinfo命令可以显示它们的参数信息。然而这个命令对内置模块没有用。你会得到下面的错误。

modinfo: ERROR: Module XXXXXX not found.

如果你想要查看内置模块的参数,以及它们的值,你可以在 /sys/module 下检查它们的内容。

在 /sys/module目录下,你可以找到内核模块(包含内置和可加载的)命名的子目录。进入每个模块目录,这里有个“parameters”目录,列出了这个模块所有的参数。

比如你要找出tcp_cubic(内核默认的TCP实现)模块的参数。你可以这么做:

$ ls /sys/module/tcp_cubic/parameters

接着阅读这个文件查看每个参数的值。

$ cat /sys/module/tcp_cubic/parameters/tcp_friendliness

以上就是Linux查看内置模块的信息的方法了,这样我们就可以知道Linux安装了哪些内置模块,还可以把没用的模块删除掉,减轻系统的负担。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录