当前位置:首页 » 操作系统 » linux模块

linux模块

发布时间: 2022-01-11 15:48:50

linux 什么命令显示所有装载的模块

运行下面的命令:

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

Ⅱ 什么是 linux 模块编程

操作系统就像是一个房间,你如果想睡觉你就要买张床,想看世界杯你就得买个电视,等等,这个床和电视就相当于模块,没有这些房子仍然是房子,也就是说模块的有无不会对操作系统的功能有影响(有可能对性能有影响),这个模块也就是你写的程序,而你实现这个程序的动作就可以叫模块化编程,好处是跟操作系统的内聚降低了更利于开发和维护。个人浅见。

Ⅲ linux下模块怎么安装

一、 单文件模块
直接把文件拷贝到 $python_dir/Lib
二、 多文件模块,带setup.py
python setup.py install
三、 egg文件
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg
注:虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。

Ⅳ 如何编译一个linux下的驱动模块

linux下编译运行驱动
嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。
按照如下方法就可以成功编译出hello world模块驱动。
1、首先确定本机linux版本
怎么查看Linux的内核kernel版本?
'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。
#uname -a
Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

只打印内核版本,以及主要和次要版本:
#uname -r
3.5.0-19-generic

要打印系统的体系架构类型,即的机器是32位还是64位,使用:
#uname -p
i686

/proc/version 文件也包含系统内核信息:
# cat /proc/version
Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012

发现自己的机器linux版本是:3.5.0-19-generic
2、下载机器内核对应linux源码
到下面网站可以下载各个版本linux源码https://www.kernel.org/
如我的机器3.5.0版本源码下载地址为:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2
下载完后,找一个路径解压,如我解压到/linux-3.5/
然后很重要的一步是:执行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic
。进入linux源码目录,编辑Makefile,将EXTRAVERSION = 修改为EXTRAVERSION= -19-generic。
这些都是要配置源码的版本号与系统版本号,如果源码版本号和系统版本号不一致,在加载模块的时候会出现如下错误:insmod: error inserting 'hello.ko': -1 Invalid mole format。
原因很明确:编译时用的hello.ko的kenerl 不是我的pc的kenerl版本。

执行命令cp /boot/config-3.5.0-19-generic ./config,覆盖原有配置文件。
进入linux源码目录,执行make menuconfig配置内核,执行make编译内核。

3、写一个最简单的linux驱动代码hello.c

/*======================================================================
Asimple kernel mole: "hello world"
======================================================================*/
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("zeroboundaryBSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO"Hello World enter\n");
return0;
}

static void hello_exit(void)
{
printk(KERN_INFO"Hello World exit\n ");
}

mole_init(hello_init);
mole_exit(hello_exit);

MODULE_AUTHOR("zeroboundary");
MODULE_DESCRIPTION("A simple HelloWorld Mole");
MODULE_ALIAS("a simplestmole");

4、写一个Makefile对源码进行编译
KERN_DIR = /linux-3.5
all:
make-C $(KERN_DIR) M=`pwd` moles
clean:
make-C $(KERN_DIR) M=`pwd` clean

obj-m += hello.o

5、模块加载卸载测试
insmod hello.ko
rmmod hello.ko

然后dmesg|tail就可以看见结果了

最后,再次编译驱动程序hello.c得到hello.ko。执行insmod ./hello.ko,即可正确insert模块。

使用insmod hello.ko 将该Mole加入内核中。在这里需要注意的是要用 su 命令切换到root用户,否则会显示如下的错误:insmod: error inserting 'hello.ko': -1 Operation not permitted

内核模块版本信息的命令为modinfo hello.ko
通过lsmod命令可以查看驱动是否成功加载到内核中
通过insmod命令加载刚编译成功的time.ko模块后,似乎系统没有反应,也没看到打印信息。而事实上,内核模块的打印信息一般不会打印在终端上。驱动的打印都在内核日志中,我们可以使用dmesg命令查看内核日志信息。dmesg|tail

可能还会遇到这种问题insmod: error inserting 'hello.ko': -1 Invalid mole format
用dmesg|tail查看内核日志详细错误
disagrees about version of symbolmole_layout,详细看这里。
http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmoles/index.html
在X86上我的办法是:
make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD moles

Ⅳ Linux系统中文件、模块与设备驱动之间的的区别与联系

linux下的文件的操作方式都是相同的,不要求后缀名,普通文件当然没什么好说的了。
模块是由编译后的内核生成的,也可以自己生成,自己加载。比如说系统启动时加载的usb模块有 usbcore.o、usb-uhci.o、usb-ohci.o、 uhci.o、ehci-hcd.o(usb2.0)、hid.o( USB人机界面设备)、usb-storage.o (U盘驱动),最后一个就是具体的设备驱动程序模块,驱动程序也是以模块的方式加载到系统中,然后才工作的。linux的系统加载了非常多的模块,很多模块在不用的时候都是处于挂起状态,是不占用内存和资源的,用的时候才去唤醒。
linux下操作设备是通过设备文件结点来操作的,/dev下面的东西。应用程序操作这些文件结点,就像操作普通文件一样进行来回的读/写,剩下的事情都是由文件结点具体对应的设备驱动模块完成的,文件结点和设备驱动之间的关系由一个链表来记录。

Ⅵ linux操作系统中,加载和删除内核模块的命令是什么。

modprobe命令
Linux命令:modprobe 。
功能说明:自动处理可载入模块。
语法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]。
补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

内容
1、modprobe 命令是根据depmod -a的输出/lib/moles/version/moles.dep来加载全部的所需要模块。
2、删除模块的命令是:modprobe -r filename。
3、系统启动后,正常工作的模块都在/proc/moles文件中列出。使用lsmod命令也可显示相同内容。
4、在内核中有一个“Automatic kernel mole loading"功能被编译到了内核中。当用户尝试打开某类型的文件时,内核会根据需要尝试加载相应的模块。/etc/moles.conf或 /etc/modprobe.conf文件是一个自动处理内核模块的控制文件。
modprobe命令主要用于在Linux 2.6内核中加载和删除Linux内核模块。通过此命令用户可以轻松地加载和删除Linux内核模块,同时使用此命令加载Linux内核模块时,Linux内核会自动解决内核模块之间的依赖关系,将相互依赖的模块自动加载,如下所示:
1) 加载RAID1阵列级别模块:
[root@rhel5 boot]# modprobe raid1

2) 显示已加载的RAID1阵列级别模块:
[root@rhel5 boot]# lsmod |grep raid1 raid1 25153 0

3) 删除RAID1阵列级别模块:
[root@rhel5 boot]# modprobe -r raid1

4) 显示RAID1阵列级别模块:
[root@rhel5 boot]# lsmod |grep raid1

modprobe命令在加载模块时会自动解决依赖的模块。当加载的模块需依赖另一个模块时,系统会自动将此模块加载。而当用户使用insmod命令加载模块时,则不会自动解决相对应的依赖模块。
modprobe命令中的"-r"参数表示删除指定模块,"-c"参数表示显示/etc/modprobe.conf配置文件的参数,"-C"参数表示指定内核配置文件,"-f"表示覆盖,"-l"表示显示模块的绝对路径。
[root@rhel5 boot]# modprobe -l|grep raid /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid0.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid456.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid1.ko /lib/moles/2.6.18-8.el5/kernel/drivers/md/raid10.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/aacraid/aacraid.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mbox.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_mm.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/megaraid/megaraid_sas.ko /lib/moles/2.6.18-8.el5/kernel/drivers/scsi/raid_class.ko

以上命令表示显示系统中所有的编译模块,并过滤包含有raid字符串的模块。

Ⅶ linux模块

[root@www ~]# modinfo [-adln] [mole_name|filename]
选项与参数:
-a :仅列出作者名称;
-d :仅列出该 moles 的说明 (description);
-l :仅列出授权 (license);
-n :仅列出该模块的详细路径。

范例一:由上个表格当中,请列出 mii 这个模块的相关资讯:
[root@www ~]# modinfo mii
filename: /lib/moles/2.6.18-92.el5/kernel/drivers/net/mii.ko
license: GPL
description: MII hardware support library
author: Jeff Garzik <[email protected]>
srcversion: 16DCEDEE4B5629C222C352D
depends:
vermagic: 2.6.18-92.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1
# 可以看到这个模块的来源,以及该模块的简易说明!(是硬件支持函式库)

范例二:我有一个模块名称为 a.ko ,请问该模块的资讯为?
[root@www ~]# modinfo a.ko
....(省略)....

Ⅷ 怎么查看linux下的模块,很多命令的介绍

1、lsmod 列加以挂载的内核模块;
lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/moles ,我们一样可以知道系统已经加载的模块;
代码:
[root@localhost beinan]# lsmod
2、modinfo 查看模块信息;
modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途;
代码:
[root@localhost beinan]# moinfo 模块名
免费提供最新Linux技术教程书籍,入门自学书籍《linux就该这么学》,为开源技术爱好者努力做得更多更好

热点内容
如何在服务器上进行序列比对 发布:2024-12-23 14:15:25 浏览:284
ga6选哪个配置车 发布:2024-12-23 14:13:36 浏览:274
鸿蒙为什么比安卓占内存 发布:2024-12-23 14:06:13 浏览:180
sql两表更新 发布:2024-12-23 14:01:29 浏览:207
linux驱动spi 发布:2024-12-23 13:25:22 浏览:115
王思聪为什么配服务器 发布:2024-12-23 13:19:48 浏览:374
安卓型号代表什么 发布:2024-12-23 13:13:29 浏览:780
改密码哪里加问题 发布:2024-12-23 13:11:43 浏览:865
安卓手机多开哪个不卡 发布:2024-12-23 13:10:16 浏览:589
源码反码补码 发布:2024-12-23 13:09:25 浏览:260