注册过程:
insmod module_name ; 加载驱动程序,运行init函数
register_chrdev(dev_Major, “module_name”, * fs )
// 查看/proc/devices
// 建议在linux下用vi查看,其中包含所有的设备信息。包括:Character Device(字符设备),Block Device(块设备),Network interface Device(网络接口设备)。
// 这里给出一个表示设备主设备名和次设备的例子:hda1
// hda1的意思是:Hard Disk a 1,即hd表示硬盘 a表示第一块盘 1表示第一分区
mknod /dev/module_name c/b 主设备号 次设备号
rmmod module_name ; 卸载驱动,运行 exit函数
unregister_chrdev(dev_Major, “module_name”, * fs )
对以上主要用到的几个函数进行解释:
Linux指令:insmod——载入模块
insmod 就是install module的缩写
功能说明:载入模块。
语法:insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]
说明:Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
参数:
-f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
-k 将模块设置为自动卸除。
-m 输出模块的载入信息。
-o<模块名称> 指定模块的名称,可使用模块文件的文件名。
-p 测试模块是否能正确地载入kernel。
-s 将所有信息记录在系统记录文件中。
-v 执行时显示详细的信息。
-x 不要汇出模块的外部符号。
-X 汇出模块所有的外部符号,此为预设值。
Linux指令:mknod——建立设备文件
用法:
1、mknod Name { b | c } Major Minor
2、mknod Name { p }
只能由 root 用户或系统组成员运行
解释:
mknod 命令建立一个目录项和一个特殊文件的对应索引节点。第一个参数Name 代表的是设备的名称。选择一个描述性的设备名称。
第一项中,mknod 只能由 root 用户或系统组成员执行。使用b 或 c 标志。b 标志表示这个特殊文件是面向块的设备(磁盘、软盘或磁带)。c 标志表示这个特殊文件是面向字符的设备(其他设备)。Major 指定主设备的数目,它帮助操作系统查找设备驱动程序代码,Minor指定次设备的数目,也就是单元驱动器或行号,它们是十进制或八进制的。一个设备的主要和次要编号由该设备的配置方法分配,它们保存在 ODM 中的 CuDvDr 类里。在这个对象类中定义了主要和次要编号以确保整个系统设备定义的一致性。
第二项中,使用了 p 标志来创建 FIFO(已命名的管道)。
例如:我已经建立了一个虚拟字符设备,名字为gobalvar,其主设备号是254,次设备号是0,
则命令为:mknod /dev/globalvar c 254 0
Linux指令:rmmod——删除模块。
rmmod 就是remove module的缩写
功能说明:删除模块。
语法:rmmod [-as][模块名称...]
补充说明:执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
参 数:
-a 删除所有目前不需要的模块。
-s 把信息输出至syslog常驻服务,而非终端机界面。