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

linux模块依赖

发布时间: 2022-05-09 07:30:08

linux的依赖包有何用

Linux系统和其他操作系统一样,都是模块化的设计,也就是说功能互相依靠,有些功能需要一些其他功能来支撑,这样可以提高代码的可重用性:


大部分依赖包都是一些库文件,有动态库也有静态库,一个程序的依赖包如果没有安装,只安装了这个程序本身是不能使用

你可以理解为似windows的库文件,譬如DLL


比如我要装某个软件,这个软件又依赖于某个开发包,这个开发包包含这个软件所要运行

的环境文件,这就是依赖关系。

再举个例子,比如我要去优酷看视频一样。
我就需要需要装flash。因为优酷的播放器是基于flash开发的。

⑵ Linux内核模块的优缺点

利用内核模块的动态装载性具有如下优点:
·将内核映象的尺寸保持在最小,并具有最大的灵活性;
·便于检验新的内核代码,而不需重新编译内核并重新引导。
但是,内核模块的引入也带来了如下问题:
·对系统性能和内存利用有负面影响;
·装入的内核模块和其他内核部分一样,具有相同的访问权限,因此,差的内核模块会导致系统崩溃;
·为了使内核模块访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时修改这些符号表;
·有些模块要求利用其他模块的功能,因此,内核要维护模块之间的依赖性。
·内核必须能够在卸载模块时通知模块,并且要释放分配给模块的内存和中断等资源;
·内核版本和模块版本的不兼容,也可能导致系统崩溃,因此,严格的版本检查是必需的。
尽管内核模块的引入同时也带来不少问题,但是模块机制确实是扩充内核功能一种行之有效的方法,也是在内核级进行编程的有效途径。

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

1、lsmod 列加以挂载的内核模块;
lsmod 是列出目前系统中已加载的模块的名称及大小等;另外我们还可以查看 /proc/moles ,我们一样可以知道系统已经加载的模块;
代码:

[root@localhost beinan]# lsmod
2、modinfo 查看模块信息;
modinfo 可以查看模块的信息,通过查看模块信息来判定这个模块的用途;
代码:

[root@localhost beinan]# moinfo 模块名
举例:
代码:

[root@localhost beinan]# modinfo ne2k-pcifilename: /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.koauthor: Donald Becker / Paul Gortmakerdescription: PCI NE2000 clone driverlicense: GPLparmtype: debug:intparmtype: options:array of intparmtype: full_plex:array of intparm: debug:debug level (1-2)parm: options:Bit 5: full plexparm: full_plex:full plex setting(s) (1)vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0depends: 8390alias: pci:v000010ECd00008029sv*sd*bc*sc*i*alias: pci:v00001050d00000940sv*sd*bc*sc*i*alias: pci:v000011F6d00001401sv*sd*bc*sc*i*alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*alias: pci:v00004A14d00005000sv*sd*bc*sc*i*alias: pci:v00001106d00000926sv*sd*bc*sc*i*alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*alias: pci:v000012C3d00000058sv*sd*bc*sc*i*alias: pci:v000012C3d00005598sv*sd*bc*sc*i*alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*srcversion: 6ACE95F441CD26DF9DC31C2
上 面的例子是我们查看 ne2k-pci 这个模块的信息,通过查看,我们知道ne2k-pci 模块是8029网卡(PCI NE2000 clone driver)的驱动;模块是位于 /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko
我们现在常用的网卡也有8139的,8139网卡所用的驱动是 8139too ;查查看?
代码:

[root@localhost beinan]# modinfo 8139too

我们再查查vfat 和ntfs 的模块信息;
代码:

[root@localhost beinan]# modinfo vfat[root@localhost beinan]# modinfo ntfs

自己尝试一下;
注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;
3、modprobe 挂载新模块以及新模块相依赖的模块
modprobe 我们常用的功能就是挂载模块,在挂载某个内核模块的同时,这个模块所依赖的模块也被同时挂载;当然modprobe 也有列出内核所有模块,还有移除模块的功能;下在我们举个例子说一说咱们常用的功能和参数;
代码:
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o ] [parameters...]
modprobe -r [-n] [-i] [-v] ...
modprobe -l -t [ -a ...]
上面是modprobe 的用法,具体更为详细的帮助,我们可以查看 man modprobe ;
代码:
[root@localhost beinan]# modprobe -c
modprobe -c 可以查看moles 的配置文件,比如模块的别名是什么等;
代码:

[root@localhost beinan]# modprobe -l
modprobe -l 是列出内核中所有的模块,包括已挂载和未挂载的;通过modprobe -l ,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l 读取的模块列表就位于 /lib/moles/'uname -r' 目录中;其中uname -r 是内核的版本;
代码:

[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/
通过上面的命令,自己试试看?
代码:

[root@localhost beinan]# modprobe 模块名 注:挂载一个模块;
举例:
代码:

[root@localhost beinan]# modprobe ne2k-pci 注:挂载 ne2k-pci 模块;[root@localhost beinan]# modprobe vfat 注:挂载vfat 模块[root@localhost beinan]# modprobe ntfs 注:挂载ntfs 模块[root@localhost beinan]# lsmod 注:列出已挂载模块, 我们会看到ne2k-pci ,vfat ,ntfs的模块 ;
注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;
代码:

[root@localhost beinan]# modprobe -r 模块名 注:移除已加载的模块,和rmmod 功能相同;
注意:模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;
代码:

[root@localhost beinan]# modprobe -r 模块名
举例:
代码:

[root@localhost beinan]# modprobe -r ne2k-pci
就说这么多吧,更为详细的还是用 man modprobe 来查看和尝试;

4、rmmod 移除已挂载模块;
命令格式:
代码:
rmmod 模块名
注意: 模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀;
举例:
代码:
[root@localhost beinan]# rmmod vfat 注:移除已挂载的模块vfat
5、depmod 创建模块依赖关系的列表
这 个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;
再 举个例子:sata的硬盘,在Linux中的设备表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系统要驱动 sata硬盘,则需要把sata在内核中选中,或编译成模块,或内置于内核之中,在此同时,还需要在内核中选中ide ,scsi 的支持等;
depmod 工具的洋文原意:depmod — program to generate moles.dep and map files.(我译的:为moles.dep 文件或映射文件创建依赖关系)
代码:

[root@localhost beinan]# depmod -a 注:为所有列在/etc/modprobe.conf 或/etc/moles.conf 中的所有模块创建依赖关系,并且写入到moles.dep文件;[root@localhost beinan]# depmod -e 注:列出已挂载但不可用的模块;[root@localhost beinan]# depmod -n 注:列出所有模块的依赖关系,但仅仅是输出出来 (Write the dependency file on stdout only)
注:moles.dep 位于 /lib/moles/内核版本 目录
比如 Fedora Core 4.0 中,系统默认的内核:
代码:

[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/moles.dep/lib/moles/2.6.11-1.1369_FC4/moles.dep

6、insmod 挂载模块;
insmod 这个工具,和modprobe 有点类似,但功能上没有modprobe 强,modprobe 在挂载模块是不用指定模块文件的路径,也不用带文件的后缀.o 或.ko ;而insmod 需要的是模块的所在目录的绝对路径,并且一定要带有模块文件名后缀的(molefile.o 或molesfile.ko );
对于这个工具,我们只是介绍一下, 并不推荐使用。因为模块有依赖关系,对于新手来说,可能不知道这个模块依赖和哪个模块依赖;
举例:
代码:
[root@localhost beinan]# insmod /lib/moles/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko
我们要到 /lib/moles/内核版本 uname -r 的命令输出/kernel/drivers 中找相对应的模块才行,要有绝对路径,而且必须要用到文件名的全称,不能把文件名的后缀省略;
四、与内核模块加载相关的配置文件;
1、模块的配置文件 moles.conf 或 modprobe.conf
内 核模块的开机自动挂载模块一般是位于一个配置文件,一般的Linux发行版本都有 /etc/moles.conf 或 /etc/modprobe.conf 。比如Fedora Core 4.0 内核模块开机自动加载文件是 /etc/modprobe.conf ;在这个文件中,一般是写入模块的加载命令或模块的别名的定义等;比如我们在moles.conf 中可能会发行类似的一行 ;
代码:

alias eth0 8139too
而8029的网卡应该是
代码:

alias eth0 ne2k-pci
这样系统启动的时候,首先会modprobe 8139too ,然后再为8139too 指定别名为 eth0,然后我们在登录的时候,用 ifconfig 就会查看到网卡的IP 等情况,当然您得为网卡设置IP 才行;
一 般的情况下,modproe.conf 或moles.conf的内容 是我们用相应的硬件配置工具而生成的;如果您的硬件驱动是没有被内核支持,您自己到硬件的厂商下载而来的驱动。一般的情况下都有安装和帮助文件。他们的驱 动在配置时,他会写入硬件的支持到moles.conf 或modprobe.conf 文件中。
再比如我们的声卡在moles.conf 或modprobe.conf 中也有相应的内容,这是由alsaconf 配置工具生成的,明白了吧;同理网卡在modprobe.conf 或moles.conf中的内容也是由网卡的配置工具而来的。
有些硬件是以内核模块的方式驱动的,模块一旦加载上就能用,也没有什么配置工具,比如vfat 和ntfs 的支持;如果是硬件驱动不以模块的方式支持,而是直接编入内核,也不会用在modprobe.conf 或 moles.conf 中加入什么内容;
如果您有些模块不能开机加载,您想让一些模块加机自动加载,就可以把modprobe 模块 直接写入配置文件;
2、内核模块其它配置文件
内核模块的其它配置文件还是需要了解的,比如 /lib/moles/内核版本目录下的几个文件;了解一下就行;比如:
代码:

[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/build misc moles.ccwmap moles.ieee1394map moles.isapnpmap moles.symbols sourcekernel moles.alias moles.dep moles.inputmap moles.pcimap moles.usbmap
五、硬件驱动在系统中的目录;
硬件驱动在内核中以模块支持的目录;
硬 件驱动是必须由内核支持的,无论是我们自己安装驱动,还是内核自带的驱动都是如此。硬件驱动如果是以内核模块支持的,驱动目录位于: /lib/moles/内核版本/kernel/目录 或 /lib/moles/内核版本/kernel/drivers 目录中;
代码:

[root@localhost beinan]# uname -r2.6.11-1.1369_FC4[root@localhost beinan]# ls /lib/moles/2.6.11-1.1369_FC4/kernelarch crypto drivers fs lib net sound
注:只有驱动在内核中以模块的方法支持,驱动才位于 /lib/moles/相应的目录;如果是直接置入内核的,不会出现在/lib/moles驱动相关的目录;
六、自己编译驱动的办法;
通 过源码编译驱动一般是./configure ;make;make install ,有时程序不提供./configure ,我们可以make或make install ,或者执行make;make install ;如果不能make install ,则需要我们自己复制.o或者.ko文件到 /lib/moles/内核版本/kernel/目录 或 /lib/moles/内核版本/kernel/drivers 目录中相应的驱动目录;
这个还是自己尝试吧,说也说不清楚,遇到问题后就知道怎么弄了;具体的还是驱动的REAME和INSTALL为准;
现在大多驱动都是在编译安装时,都自动复制.o或.ko 文件到内核模块目录,大多不用我们自己动手复制过去。如果您尝试编译安装声卡驱动 alsa-drivers 就会明白我所说的意思。

⑷ linux内核编程 怎么知道自己的内核程序依赖哪些模块

usb_register_notify,你当前的系统中运行的内核缺少这个函数定义,你这个因为你要安装的模块,并没有在这个你运行的这个系统中编译生成,而是拿别的机器,或者别人的模块安装在你当前的机器上,不提倡。

有源码的话,在你本机上重新编译一次,模块是要和你当前运行的kernel版本相匹配的。

⑸ 解决linux系统模块依赖关系 安装yum系统

要解决依赖关系,直接yum -y install 包,就可以了,加油

⑹ linux模块对内核的依赖性怎么查询 比如需要内核开启某个组件。

redhat或centos rpm包用
rpm -qpR 文件名
modprobe 查看模块依赖
其他的系统没用过

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

nsmod和rmmod分别用于加载和卸载模块,但是每次只能加载/卸载一个模块,如果一个模块依赖于多个模块,则需要进行多次操作,比较繁琐。modprobe命令集加载/卸载功能于一身,并且可以自动解决模块的依赖关系,将某个模块所依赖的其他模块全部加载。
用法:#modprobe 【选项】 模块 【符号=值】
同时modprobe支持很多选项
你也可以看一下ZLG的嵌入式Linux开发教程第64页,写得非常详细,我觉得很适合入门。

⑻ 编译linux内核时 make moles有啥用

make moles是编译模块,很多驱动还有功能在选的时候选成M的都是moles,不过直接make,不加任何参数,就是make all,包含make moles。不用额外加此make,但是在安装的时候make install只是安装bzimage,Systemmap。没有把moles安装好,还要额外的make moles_install,把模块放到/lib/moles文件夹一个和内核名一样的文件夹下,并且运行depmod生成模块依赖关系文件,系统启动时加载模块就是从dep里面读取信息加载模块。

⑼ linux怎么编译两个相互依赖的模块

insmod不过最好是modprobe这个命令会检测模块之间的功能依赖关系一同载入。不过需要在/lib/moles里面有模块的信息(这个信息怎么写怎么生成我不清楚)。

热点内容
2013年二级c语言真题 发布:2024-10-08 10:44:47 浏览:242
linux的locale 发布:2024-10-08 10:44:36 浏览:91
2rsa算法 发布:2024-10-08 10:29:53 浏览:542
南京社保密码多少 发布:2024-10-08 10:21:01 浏览:472
国内的少儿编程 发布:2024-10-08 10:21:00 浏览:520
vscode编译调试闪退 发布:2024-10-08 10:19:27 浏览:671
oracle数据库用户权限 发布:2024-10-08 09:46:00 浏览:708
立方的算法口诀 发布:2024-10-08 09:44:30 浏览:820
python输入到excel表格 发布:2024-10-08 09:36:31 浏览:285
脚本拒绝访问闪退 发布:2024-10-08 09:34:55 浏览:939