简单认识驱动与模块

什么是驱动?

以下百度百科中对驱动解释。

驱动(计算机软件术语)

驱动程序全称设备驱动程序,是添加到操作系统中的特殊程序,其中包含有关硬件设备的信息。此信息能够使计算机与相应的设备进行通信。驱动程序是硬件厂商根据操作系统编写的配置文件,可以说没有驱动程序,计算机中的硬件就无法工作。

 

可以看到,驱动相对于一般的软件而言最大的区别是,它是直接与硬件设备进行通讯的。

 

Linux驱动的分类

 

Linux中,将设备分为三种基本的类型。

  • 字符设备
  • 块设备
  • 网络接口

Linux中还有一个很重要的概念,模块。

可在运行时添加到内核中的代码被称为模块。

一般来说一个设备驱动总是被写成一个模块。

 

一个简单的模块

#include 
#include 

MODULE_LICENSE("Dual BSD/GPL")

static int hello_init(void) {
    printk(KERN_ALERT "Hello world");
}

static void hello_exit(void) {
    printk(KERN_ALERT "Bye");
}

module_init(hello_init);
module_exit(hello_exit);

这里看到两个特殊的宏module_init和module_exit,这两个宏指明了模块被装载和卸载时所执行的函数。

printk函数定义在Linux内核中,和c标准库中的printf类似,最大的区别是它缺乏对于浮点的支持,因为内核代码不能实现浮点数运算。

 

模块的编译

对于上面的代码来说。在makefile文件中添加下面一行就足够了。

obj-m := hello.o

假设有两个源文件则可以写成如下形式。

obj-m := module.o

module-objs := file1.o file2.o

 

最后使用make命令编译即可

 

模块的装载和卸载

装载:insmod、modprobe

这里看到,装载时有两个方法可选,区别在于,modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

modprobe是处理层叠模块的一个实用工具。

卸载:rmmod

显示已载入系统的模块:lsmod

 

 

你可能感兴趣的:(驱动)