当前位置: 首页 > >

Linux驱动第四篇-----设备注册

发布时间:

在soc系统中一个驱动对应一个设备,他们都是通过总线来进行匹配的,我们都知道,在linux系统中,把所有的东西都看成了文件。所以在soc系统中所有的设备和驱动都是文件,下面来一张图更好的说明这点。

图的左边是设备,中间是总线,右边是驱动。注册一个设备或者是驱动时,就在链表中注册,然然后通过总线进行匹配有没有这个设备文件。在Linux 创立了一种虚拟总线,也叫*台总线或者 platform 总线,这个总线也有对应的设备 platform_device,对应的驱动叫 platform_driver。


我们在linux中可以通过ls /sys/bus查看总线设备。
Linux将设备分为了三大类:字符设备、块设备、网络设备。
字符设备,字符设备是能够像字节流一样被访问的设备。一般说来对硬件设备 IO 的操作可
以归结为字符设备。常见的字符设备有 led、蜂鸣器、串口、键盘等等。
块设备,块设备室通过内存缓冲区访问,可以随机存取的设备,一般性的理解就是存储介
质类的设备。常见的字符设备有 U 盘、TF 卡、eMMC、电脑硬盘、光盘等等
网络设备,可以和其它主机交换数据的设备。常见的以太网设备、WIFI、蓝牙等


每个设备都有一个编号,在linux中使用cat /proc/devices查看设备的编号。设备号肯定是有限的,一共就只有 256 个主设备号,这里引入了从设备号的概念,理论上就有 256*256 个设备号。


设备的文件有一个结构体platform_device,在文件的vim include/linux/platform_device.h

我们只需要关注name这个指针和id这个变量。
第一个参数“name”,是一个字符指针,驱动初始化前需要和注册驱动的“name”字段
匹配的参数;
第二个参数“id”,表示子设备编号,一个设备如果有多个子设备号,则需写入子设备号
数量,如果只有一个则用-1 表示


添加设备*台总线

进入vim arch/arm/mach-exynos/mach-itop4412.c打开*台文件

led 的驱动相对来说很简单,在里面查找宏定义“LEDS_CTL”,如下图所示

在前面添加一个hello_ctl

再次寻找LEDS_CTL,添加宏定义


这里还需要确认一下,是否有“HELLO_CTL”宏定义,只有定义了这个宏,在生成内核的
时候才会将其编译到内核

使用命令“vim drivers/char/Kconfig ”打开前面定义过“HELLO_CTL”的配置文件

接着到 menuconfig 中将其配置上,使用命令“make menuconfig”,进入“Device Drivers
?>”→“Character devices ?>”→“Enable HELLO config”,如下图所示,配置上宏
定义“HELLO_CTL”


保存退出,重新编译内核,烧写到开发板。
开发板启动之后,使用命令“ls /sys/devices/platform/”可以查看到新注册的 hello 设


到此 设备注册已经完成。


总结下:设备注册需要修改两个文件,第一个是*台问价arch/arm/arch/arm/mach-exynos/mach-itop4412.c的两次宏定义,添加仿写即可。
第二处是drivers/char/Kconfig文件添加CTL文件即可。然后确认下make menuconfig里面是否已经出现了配置的字符设备。
完成之后,内核重新编译 make zImage 在arch/arm/boot里面查找zImage文件即可。



友情链接: