大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 操作系统 -> Linux -> Linux如何在系统启动时自动加载模块

Linux如何在系统启动时自动加载模块

时间: 2021-07-31 作者:daque

底下是往日进修linux时写的,厥后提防接洽rc.sysinit后创造,只须要窜改下列场合就不妨了,不用这么烦恼的:

rc.sysinit中有如许的一段代码:

# load other user-defined modules

for file in /etc/sysconfig/modules/*.modules ; do

[ -x $file ] && $file

done

# load modules (for backward compatibility with vars)

if [ -f /etc/rc.modules ]; then

/etc/rc.modules

fi

看来只须要摆设两个场合的任何一个就不妨了(以加载fuse内核模块为例)

(1) 在/etc/sysconfig/modules/底下创造*.modules文献,参考仍旧有的*.modules文献,比方我写创造文献my.modules,实质为modprobe fuse

牢记结果chmod 755 my.modules

(2) 大概在/etc/rc.modules内里加上modprobe fuse,没有的话创造该文献。

而后reboot,lsmod | grep fuse考证一下就ok了。

==============

automatically load kernel modules:

为搞领会怎样在体例启用时机动加载模块,探求了长久,网上有很多人提出这个题目,但都没有精确的谜底,不管是华文社区仍旧英文社区,大师的回复都没有讲到点子上,无非是环绕modprobe.conf、modprobe讲来讲去的,要不即是对准一定题目试验各别的本领。有的还倡导把modprobe modulename写入rc.local,却未曾想,rc.local的实行被放在所有启用程序的很反面,而启用init.d底下设置的效劳却在rc.local前方,那么即使某个效劳要用这个模块,就不行了。

在尝试lvs时,由于我的fedora7的kernel(2.6.21-1)缺省没有加载ip_vs模块,而内核中仍旧包括编写翻译好的ipvs关系的模块了,放在:/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/底下,有:

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_dh.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_ftp.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_nq.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_rr.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sed.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sh.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wlc.ko

/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wrr.ko

个中ip_vs.ko是ipvs的基础模块,不加载ipvs就不许处事(运转ipvsadm会报错的),而其余的都是ipvs的安排算法或一定和议的扶助模块,须要时则须加载。

即使体例运转时手动加载则需:modprobe ip_vs 和modprobe ip_vs_sh等。

要领会怎样在体例启用时机动加载模块(automatically load kernel modules),就得先领会体例是如阿启用的,启用的进程中按什么程序做了什么,如何做的,那些启用操纵都有那些文献和剧本遏制。因为google和baidu出来的货色都处置不了题目,并且man modprobe和man modprobe.conf创造并不是须要窜改的文献。

所以复习鸟哥的linux.vbird.org/">http://linux.vbird.org/“开构造机过程与loader”:

1. 所有开机过程是

(1) 载入bios的硬件消息,并博得第一个开机安装的代号

(2)读取第一个开机安装的mbr的boot loader (grub)的开机消息

(3)载入os kernel消息,解压kernel,试验启动硬件

(4) kernel实行init步调并赢得run-lebel消息(如3或5)

(5) init实行/etc/rc.d/rc.sysinit

(6)启用内核外挂模块(/etc/modprobe.conf)

(7) init实行run-level的百般scripts,启用效劳

(8) init实行/etc/rc.d/rc.local

(9)实行/bin/login,等候用户login

(10)login保守入shell

可见精确的办法是把须要加载的模块放在(5)或(6),但正如搜集上很多人的试验,窜改modprobe.conf都没有胜利(比方在modprobe.conf中减少install ip_vs...)。所以我窜改了/etc/rc.d/rc.sysinit就胜利加载了。

发端试验在rc.sysinit结果减少 modprobe.conf ip_vs,重启后lsmod | grep ip_vs,创造胜利机动加载了。

所以仿造rc.sysinit中其余模块的加载本领,扩充改剧本文献,在结果减少下来一段:

# load lvs ipvs modules

if [ -d /lib/modules/$unamer/kernel/net/ipv4/ipvs ]; then

for module in /lib/modules/$unamer/kernel/net/ipv4/ipvs/* ; do

module=${module##*/}

module=${module%.ko}

modprobe $module >/dev/null 2>&1

done

fi

就把/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下的一切模块都机动加载了。个中:

if语句查看ipvs模块的目次能否生存

for轮回遍历该目次底下的一切文献

module=${module##*/} :个中##表白从前方简略字符,*/表白简略到结果一个/,即使一个#就表白只简略到第一个/。即使变量反面接##,表白在##反面的字符串取最长的(从来到结果面),即使接#,表白取最小的一段。

module=${module%.ko}:表白从反面简略.ko。即使变量反面接%%,表白在%%反面的字符串取最长的(从来到最前方),即使接%,表白取最小的一段。

如许多module的两次窜改就获得了模块名,即是文献名不带路途和.ko后缀。

modprobe $module >/dev/null 2>&1:加载模块,输入都指向空摆设

如许重启后lsmod | grep ip_vs就会获得:

ip_vs_wrr 6977 0

ip_vs_wlc 6081 0

ip_vs_sh 6593 0

ip_vs_sed 6081 0

ip_vs_rr 6081 0

ip_vs_nq 5953 0

ip_vs_lc 5953 0

ip_vs_lblcr 10565 0

ip_vs_lblc 9797 0

ip_vs_ftp 10053 0

ip_vs_dh 6593 0

ip_vs 79425 22 ip_vs_wrr,ip_vs_wlc,ip_vs_sh,ip_vs_sed,ip_vs_rr,ip_vs_nq,ip_vs_lc,ip_vs_lblcr,ip_vs_lblc,ip_vs_ftp,ip_vs

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.