Linux驱动开发--1、设备驱动基础

设备驱动基础

1.设备驱动的使用方式:

a) 动态加载

b) 直接编译进内核

2.直接编译进内核的方法:(内核源码/Doucument/kbuild/...中有相应的介绍)

a) .config:顶层配置文件,可以手动修改,也可以通过make menuconfig等命令配置内核自动生成;该文件对驱动进行三个方面配置:

i. 编译成驱动模块

ii. 编译进内核

iii. 从内核中除去

b) Kconfig:连接LINUX 内核的模块目录文件;功能:

i. 用于定义make menuconfig 命令显示的菜单

ii. 导入位于其他目录的Kconfig文件,make 命令通过Kconfig 文件的递归引用,找到内核代码中所有Kconfig文件,之后创建菜单栏

c) Makefile:一般与Kconfig文件配对,该文件用来指定如何编译

d) 举例说明:

Konfig 文件:

config LED_DRIVER   ----> 用于在.config中生成 CONFIG_LED_DRIVER=y/n;用来将驱 动编译进内核与否

bool “led driver” ----> 菜单中显示的选项名

help ----> 帮助提示

....

3.驱动程序分类:

a) 字符型设备

b) 块设备

c) 网络接口

d) 其他:如SCSI

4.字符设备:

a) 指的存取时没有缓存的设备

b) 可以像文件一样访问字符设备,字符设备驱动程序负责实现这些行为

5.块设备:

a) 块设备是文件系统的宿主,如磁盘。

b) 大多数Unix系统中,只能将块设备看做多个块设备进行访问

c) 块设备经常是1KB数据,LINUX允许像字符设备那样读取块设备--允许一次传输任意数目的字节

6.网络接口设备

a) 任何网络事务都是通过接口实现的

b) 接口是一个硬件设备,也可以是loopback接口一样是软件工具

c) 网路接口由内核网络子系统驱动

7.相关命令

a) insmod

b) lsmod

c) rmmod

d) depmod :生成依赖文件,告诉将来的insmod要从何处调入modules。这个依赖文件是/lib/modules/$(version)/modules.dep

 

最简单的设备驱动框架

#include<linux/init.h>

#include<linux/kernel.h> /*提供printk()打印函数*/

#include<linux/module.h>

 

static int xxx_init()

{

return 0;

}

static void xxx_Exit(void)

{

}

 

module_init(xxx_init); /*insmod 入口*/

module_exit(xxx_Exit); /*rmmod 入口*/

 

Linux 设备模型:

 

你可能感兴趣的:(模块化,嵌入式,Linux驱动开发)