深度理解:Linux设备驱动移植简介

深度理解:Linux设备驱动移植简介

作者:BlogUpdater |  时间:2017-04-06 |  浏览:1361 |  评论已关闭 条评论

Linux 发行版

  • Linux是类Unix操作系统的一个分支,最初由Linus于1991年为基于Intel 80386的IBM兼容机开发的。
  • Linux只是个内核的标识,不同于我们平时所说的的CentOS,Ubuntu等发行版本。
  • 发行版本除了内核还包括各种外部应用程序以方便用户使用和管理操作系统。

设备驱动的作用

 

简单的设备驱动层次

 

Linux内核、驱动程序、硬件的关系

 

模块化的驱动程序

  • 为了使系统高效运行,Linux支持内核的动态扩展,即在系统运行时给内核增加新的功能(模块)
  • 驱动程序可以动态安装和卸载,这是Linux下驱动和Windows下的驱动程序的最大不同。

 

设备驱动分类

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

最简单的内核模块例子

/* hello.c */

#include <linux/module.h>  //所有模块都需要的头文件

#include <linux/init.h>         // init/exit相关宏

MODULE_LICENSE("GPL");

static int __init hello_init (void)

{

printk("Hello module init\n");  return 0;

}

static void __exit hello_exit (void)

{

printk("Hello module exit\n");

}

module_init(hello_init);

module_exit(hello_exit);

内核模块编译

/* Makefile */

ifneq ($(KERNELRELEASE),)
obj-m :=hello.o

else
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

clean:
rm -f *.ko *.o *.mod.o *.mod.c .symvers

编译:make

生成:hello.ko

安装/卸载内核模块

  • 使用insmod安装内核模块: insmod hello.ko
  • 使用lsmod查看已安装内核模块: lsmod
  • 使用rmmod卸载内核模块: rmmod hello

设备驱动移植步骤

 

吐血推荐

  • Linux设备驱动程序(中文第三版)
  • Linux设备驱动开发详解
标签:

评论已关闭。