鸟哥基础第十八章-内核模块

模块:
模块就是一些能实现某些功能的目标文件,也就是.o文件。
模块只供内核使用。
模块不被连接成可执行文件是因为他的连接对象是正在运行的内核
模块存放位置/lib/modules
模块有很多功能,包括硬件驱动模块、加密模块、压缩算法模块、防火墙模块等

arch         #有关CPU等项目
crypto      #加密相关
drivers     #有关驱动,还有防火墙等
fs             #有关文件系统
lib            #zlib等一些函数库
net           #网络协议等
sound      #声卡驱动,音效等

模块的操作命令:lsmod、modinfo、insmod、rmmod、modprobe

lsmod:

nvidia              11259462  24
模块                占用空间   有24个其他模块用到nvidia

modinfo nvidia

查看模块信息

modprobe

找出所有跟nvidia有关的模块
modprobe -lt video | grep nvidia     

kernel/drivers/video/backlight/mbp_nvidia_bl.ko
kernel/drivers/video/nvidia/nvidiafb.ko

modprobe通过调用modules.dep文件来解决模块依赖性问题
查看模块的依赖性。
grep nvidia /lib/modules/2.6.32-44-generic/modules.dep

kernel/drivers/video/backlight/mbp_nvidia_bl.ko:
kernel/drivers/video/nvidia/nvidiafb.ko: kernel/drivers/video/fb_ddc.ko
kernel/drivers/i2c/algos/i2c-algo-bit.ko kernel/drivers/video/vgastate.ko
updates/dkms/nvidia.ko:
#:表示后面的模块要先加载,也就是依赖性
我们可以看出加载nvidiafb.ko之前要先加载:

kernel/drivers/video/fb_ddc.ko
kernel/drivers/i2c/algos/i2c-algo-bit.ko
kernel/drivers/video/vgastate.ko

模块参数设置:modprobe、/etc/modules.conf

/etc/modules.conf

options cx88_alsa index=-2    #给cx88_alsa模块一个参数:index=-2
alias eth0 pcnet32                  #pcnet32一个通用的名字:eth0

如 modprobe cx88_alsa index=-3 ,则modules.conf不起作用
modprobe设置的参数具有优先权
更改/etc/modules.conf文件后,需要使用modules-update来更新。

模块依赖性文件:modules.dep

modules.dep文件格式

kernel/drivers/video/nvidia/nvidiafb.ko: kernel/drivers/video/fb_ddc.ko  …

modules.dep建立命令:depmod

depmod -a:更新模块依赖性文件modules.dep
depmod -A:扫描出新模块才更新
depmod -n:扫描后不写入modules.dep,而是输出到屏幕上
depmod -e:显示当前加载的模块中已不能用的

我们编译好模块后,放入/lib/modules/下面,然后depmod -a,新模块就记录到modules.dep下面了

然后,加载的话:“modprobe 模块”即可。自动加载的话写入/etc/modprobe.conf
核心需要哪些模块的话也会主动去加载模块的。

内核

内核是linux中唯一能访问硬件资源的软件
由于内核用不到很多功能,所以就做成模块,用的时候再调用。