前置说明

本文例子中涉及两个模块hello.ko和world.ko,其中hello导出符号供world使用;

insmod

该命令将模块的代码和数据装入内核,然后使用内核的符号表继续模块中任何未解析的符号。insmod不会修改模块的磁盘文件,而仅仅修改内存中的副本。insmod可以接受一些命令行选项,并且可以再模块链接到内核之前给模块中的整数和字符串变量赋值。

按照顺序加载,通过;

1 [root@localhost export]# insmodhello.ko2 [root@localhost export]# insmod world.ko

先加载world.ko,不通过,因为world找不到从a中引用的符号;

1 [root@localhost export]# insmodworld.ko2 insmod: ERROR: could not insert module world.ko: Unknown symbol in module

modprobe

与insmod类型,modprobe也用来将模块装入内核,区别在于,modprobe会考虑要加载的模块是否引用了一些当前内核中不存在的符号,如果有这类引用,modprobe会在当前模块搜索路径中查找定义了这些符号的其他模块,如果找到了这些依赖模块,它会同时将这些模块也装载到内核。这种情况下使用insmod会失败,并在系统日志文件中记录”unresolved symbols”消息;

在使用modprobe时,在配置文件中加入 modules_install行和clean行;

1 ifneq ($(KERNELRELEASE),)2 obj-m :=hello.o world.o3 # module-objs :=file1.o file2.o4 else

5 KERNELDIR ?=/lib/modules/$(shell uname -r)/build6 PWD :=$(shell pwd)7 default:8 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules9 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install10 clean:11 rm -rf *.o *.mod.c *.ko *.symvers *.order *.makers12 $(MAKE) -C $(KERNELDIR) M=$(PWD) clean13 endif

加载模块world,成功;

1 [root@localhost export]# modprobe world

lsmod查看,可见依赖的模块hello也被加载进内核;

1 [root@localhost export]# lsmod

2 Module Size Used by3 world 16384 0

4 hello 16384 1 world

rmmod

rmmod用于从内核中移除模块;如果内核模块仍然在使用状态,或者内核被配置为禁止移除模块,则无法移除该模块;配置内核并支持在模块忙的时候仍能移除模块是可能的;但是,重新引导系统是更合适的办法;

先移除world.ko,再移除hello.ko,成功;

[root@localhost export]# rmmod world.ko

[root@localhost export]# rmmod hello.ko

先移除模块hello.ko,产生错误,因为hello在被world使用;

1 [root@localhost export]# rmmod hello.ko2 rmmod: ERROR: Module hello is in use by: world

lsmod

lsmod用于列出当前装载到内核中的所有模块,包括一些其他信息,其通过读取/proc/modules来获取这些信息;

1 [root@localhost export]# lsmod

2 Module Size Used by3 world 16384 0

4 hello 16384 1 world

linux卸载模块驱动程序,Linux设备驱动程序 之 装载和卸载模块相关推荐

  1. Unix/Linux操作系统分析实验四 设备驱动: Linux系统下的字符设备驱动程序编程

    Unix/Linux操作系统分析实验一 进程控制与进程互斥 Unix/Linux操作系统分析实验二 内存分配与回收:Linux系统下利用链表实现动态内存分配 Unix/Linux操作系统分析实验三 文 ...

  2. linux kernel 2.6 i2c设备驱动程序框架介绍,linux设备驱动程序-i2c(2)-adapter和设备树的解析...

    linux设备驱动程序-i2c(2)-adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 而在linux设备驱动程序--串行通信驱动框架分 ...

  3. linux 驱动 文件计数,字符设备驱动程序1

    一.主设备号和此设备号主设备号表示设备对应的驱动程序:次设备号由内核使用,用于正确确定设备文件所指的设备.内核用dev_t类型()来保存设备编号,dev_t是一个32位的数,12位表示主设备号,20为 ...

  4. 嵌入式Linux中I2C设备驱动程序的研究与实现

    I2C是"Inter Integrated Circuit Bus"的缩写,中文译成"内部集成电路总线", 它是Philips 公司于20 世纪80 年代研发成 ...

  5. Linux设备驱动程序

    第一章 设备驱动程序简介   设备驱动程序在Linux内核中扮演着特殊的角色.它们是一个个独立的"黑盒子",使某个特定硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设备的工 ...

  6. can总线linux程序,CAN通信卡的Linux设备驱动程序 - 嵌入式操作系统 - 电子发烧友网...

    CAN通信卡的Linux设备驱动程序设计实现 目前,许多工业现场如电力系统.化工系统等大量使用控制器局部网(CAN--Controller Area Network)现场总线网络,CAN通信卡作为计算 ...

  7. 深入理解 Linux 内核---块设备驱动程序

    块设备的处理 一个进程在某个磁盘文件上发出一个 read() 系统调用,内核对进程请求回应的一般步骤: read() 调用一个适当的 VFS 函数,将文件描述符和文件内的偏移量传递给它. 虚拟文件系统 ...

  8. 嵌入式Linux设备驱动程序开发指南20(Linux USB设备驱动)——读书笔记

    Linux USB设备驱动 二十.Linux USB设备驱动 20.1 USB简介 20.1.1 USB2.0总线拓扑 20.1.2 USB总线枚举和设备布局 20.1.3 USB数据传输 20.1. ...

  9. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

  10. 目前最全面深入的Linux设备驱动程序著作

    <精通Linux驱动程序开发(英文版)> 在Linux内核源代码树提供的各个子系统中,drivers/目录是其中最大的一个分支,它比其他子系统大数倍.随着各种新技术的广泛应用,内核中新的设 ...

最新文章

  1. Delegate和Command Pattern
  2. 天才大猩猩可可去世,享年 46 岁
  3. CentOS7安装cuda及GPU驱动--基于runfile文件
  4. mesageflow 集成spider 开发思路 手稿
  5. 创建型模式——抽象工厂模式
  6. 【数据结构与算法】【算法思想】 A *搜索算法
  7. CocoaPods学习系列5——错误集锦
  8. Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?
  9. python 打印类型_让Python输出更漂亮:PrettyPrinter
  10. iOS UICollectionView的简单使用和常用代理方法
  11. numpy中相关系数
  12. win7与internet时间同步出错_Win7电脑时间同步出错怎么办?Win7电脑时间同步出错的解决方法...
  13. 高动态范围(High-Dynamic Range,简称HDR)
  14. dnf服务器维护2018,2018年更新dnf游戏登陆不上 | 手游网游页游攻略大全
  15. A股市股票行情实时数据最简封装API接口的python实现
  16. Apache Calcite: 初窥门径
  17. 人工智能数学基础3:部分数学符号以及自然数、整数、有理数和实数的势
  18. fragment中文网_Fragment基本概述
  19. linux dd销毁数据,dd命令详解(清除硬盘数据)
  20. 华硕部分飞行堡垒系列安装ubuntu16.04(uefi+gpt+win10环境)

热门文章

  1. Java 集合时间复杂度
  2. 【千字分析】剑指 Offer 05. 替换空格
  3. 【最后测试点超时】1063 Set Similarity (25 分)_22行代码AC
  4. 计算机网络实验(华为eNSP模拟器)——第五章 单臂路由
  5. 将函数当做参数 matlab,Matlab中如何将(自定义)函数作为参数传递给另一个函数...
  6. 详解 Linux环境中DHCP分配IP地址(实验详解)
  7. 中职计算机专业英语说课稿,高职高专英语说课稿
  8. html弹出文本输入框,Windows API 弹出文本框输入的内容
  9. copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
  10. m6000路由器产品介绍与基本操作_交换机与路由器的区别及光模块搭配方案_光模块吧...