模块:
模块就是一些能实现某些功能的目标文件,也就是.o文件。
模块只供内核使用。
模块不被连接成可执行文件是因为他的连接对象是正在运行的内核
模块存放位置/lib/modules
模块有很多功能,包括硬件驱动模块、加密模块、压缩算法模块、防火墙模块等
arch #有关CPU等项目
crypto #加密相关
drivers #有关驱动,还有防火墙等
fs #有关文件系统
lib #zlib等一些函数库
net #网络协议等
sound #声卡驱动,音效等
模块的操作命令:lsmod、modinfo、insmod、rmmod、modprobe
lsmod:
nvidia 11259462 24
模块 占用空间 有24个其他模块用到nvidiamodinfo nvidia
查看模块信息
modprobe
找出所有跟nvidia有关的模块
modprobe -lt video | grep nvidiakernel/drivers/video/backlight/mbp_nvidia_bl.ko
kernel/drivers/video/nvidia/nvidiafb.komodprobe通过调用modules.dep文件来解决模块依赖性问题
查看模块的依赖性。
grep nvidia /lib/modules/2.6.32-44-generic/modules.depkernel/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中唯一能访问硬件资源的软件
由于内核用不到很多功能,所以就做成模块,用的时候再调用。