Linux之驱动管理
一、相关概念
- 驱动概念
- 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。
- 将驱动程序载入内核,应用程序可以通过系统调用接口来访问(驱动)底层的硬件设备。
- 驱动功能
- 对设备初始化和释放
- 把数据从内核传送到硬件和从硬件读取数据
- 读取应用程序传送给设备文件的数据和回送应用程序请求的数据
- 检测和处理设备出现的错误
- Linux 驱动有两种运行方式
- 将驱动编译进 Linux 内核中,当 Linux 内核启动的时就会自动运行驱动程序。
- 将驱动编译成模块(Linux 下模块扩展名为.ko),在Linux 内核启动以后使用相应命令加载驱动模块。
内核模块是Linux内核向外部提供的一个插口
内核模块是具有独立功能的程序,他可以被单独编译,但不能单独运行。他在运行时被链接到内核作为内核的一部分在内核空间运行
内核模块便于驱动、文件系统等的二次开发
二、管理命令
实际使用中,我们一般使用模块化的方式为系统动态装载一些驱动,以下是一些模块化驱动的管理命令。
- 驱动的位置
/lib/modules/kernel_release
# ls -l /lib/modules/3.10.0-1160.el7.x86_64/
总用量 3300
lrwxrwxrwx. 1 root root 39 9月 6 16:10 build -> /usr/src/kernels/3.10.0-1160.el7.x86_64
drwxr-xr-x. 2 root root 6 10月 20 2020 extra
drwxr-xr-x. 12 root root 128 9月 6 16:10 kernel
-rw-r--r--. 1 root root 860326 9月 6 16:12 modules.alias
-rw-r--r--. 1 root root 819744 9月 6 16:12 modules.alias.bin
-rw-r--r--. 1 root root 1333 10月 20 2020 modules.block
-rw-r--r--. 1 root root 7391 10月 20 2020 modules.builtin
-rw-r--r--. 1 root root 9440 9月 6 16:12 modules.builtin.bin
-rw-r--r--. 1 root root 273209 9月 6 16:12 modules.dep
-rw-r--r--. 1 root root 382108 9月 6 16:12 modules.dep.bin
-rw-r--r--. 1 root root 361 9月 6 16:12 modules.devname
-rw-r--r--. 1 root root 140 10月 20 2020 modules.drm
-rw-r--r--. 1 root root 69 10月 20 2020 modules.modesetting
-rw-r--r--. 1 root root 1810 10月 20 2020 modules.networking
-rw-r--r--. 1 root root 97935 10月 20 2020 modules.order
-rw-r--r--. 1 root root 569 9月 6 16:12 modules.softdep
-rw-r--r--. 1 root root 397513 9月 6 16:12 modules.symbols
-rw-r--r--. 1 root root 486211 9月 6 16:12 modules.symbols.bin
lrwxrwxrwx. 1 root root 5 9月 6 16:10 source -> build
drwxr-xr-x. 2 root root 6 10月 20 2020 updates
drwxr-xr-x. 2 root root 95 9月 6 16:10 vdso
drwxr-xr-x. 2 root root 6 10月 20 2020 weak-updates
# lsmod //显示当前加载了的驱动,不光有硬件驱动,还有功能驱动
# modinfo 驱动名 //显示模块信息
# modprobe module name //加载驱动
# modprobe-r module name //卸载驱动
# insmod drv.ko //加载drv驱动
# modprob drv //加载drv驱动
insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址。
modprobe则可以一次将有依赖关系的驱动全部加载到内核。不加驱动的具体地址,但需要在安装文件系统时是按照make modues_install的方式安装驱动模块的。驱动被安装在/lib/modules/$(uname -r)/...下。
modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。