前面几篇文章编写了 字符设备驱动模块加载与卸载框架代码,设置了开发板启动方式。文章地址如下:
本文学习如何加载与卸载驱动模块。
上一篇文章做了字符驱动模块加载前的工作。具体工作为:
开发板设置为 从 SD卡启动,即 SD卡内烧写了uboot,开发板 从 SD卡中启动 uboot。
通过 tftp服务从 ubuntu系统下加载 内核镜像 zImage与 .dtb设备树文件,通过 nfs服务从 ubuntu系统下加载 根文件系统 rootfs。
前面一篇文章编写了初步的字符设备驱动框架,最后,编译出了 .ko 文件,这里将编译出来的驱动文件即 .ko文件放到根文件系统 rootfs 中。
开发板上电启动后,进入根文件系统下。首先,在开发板的根文件系统下创建 /lib/modules 目录:
/ # ls
bin hello.c proc sys
dev lib root tmp
etc linuxrc rootfs.tar.bz2 usr
hello mnt sbin 中文测试
/ # cd lib/
/lib # mkdir modules
/ #
进入 /lib/modules 目录下,再运行 modprobe命令:
以上提示可以看出,还需要再? /lib/modules目录下,创建目录 /4.1.15目录:
/lib/modules # mkdir 4.1.15
进入 /lib/modules 目录下,再运行 modprobe命令:
可以看出,这时运行 modprobe命令,已经没有任何提示了。
将前面一篇文章编译的 字符驱动模块(即 .ko文件) 存放到 开发板根文件系统下 /lib/modules/4.1.15目录下。进入 ubuntu系统下,进入 1_chrdevbase工程目录下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$ sudo cp chrdevbase.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f
[sudo] wangtian 的密码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/1_chrdevbase$
在开发板根文件系统 /lib/modules/4.1.15目录下可以查看到 .ko文件。加载 chrdevbase.ko 驱动文件:
以上提示无法打开“modules.dep”这个文件。我们不用手动创建 modules.dep 这个文件,直接输入 depmod 命令即可自动生成 modules.dep,有些根文件系统可能没有 depmod 这个命令,如果没有这个命令就只能重新配置 busybox,使能此命令,然后重新编译 busybox。
输入“depmod” 命令来解决:
运行 modprobe命令加载? 驱动模块:
/lib/modules/4.1.15 # modprobe chrdevbase.ko
chrdevbase: module license 'unspecified' taints kernel.
Disabling lock debugging due to kernel taint
“lsmod” 命令即可查看当前系统中存在的模块。查看所加载的驱动模块:
/lib/modules/4.1.15 # lsmod
Module Size Used by Tainted: P
chrdevbase 586 0
/lib/modules/4.1.15 #
/lib/modules/4.1.15 # rmmod chrdevbase.ko
查看 .ko 模块驱动是否还存在:
/lib/modules/4.1.15 # lsmod
Module Size Used by Tainted: P
/lib/modules/4.1.15 #
可以看出,驱动模块已经不存在,说明驱动模块已经成功卸载了。