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文件即可。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值