exynos4412开发板设备注册与驱动注册剖析

本文深入剖析Linux内核中设备和驱动的注册过程,详细讲解如何在Exynos4412开发板上进行设备注册、添加到平台总线、在Kconfig中添加宏定义,以及驱动注册的步骤,包括probe函数、remove函数等关键操作。
摘要由CSDN通过智能技术生成

linux内核的主要组成部分由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS),网络接口(NET),进程间通信(IPC)
查看linux系统的总线ls /sys/bus
查看linux系统的设备cat /proc/devices

Linux驱动和设备的注册过程

Linux 内核会要求每出现一个设备就要向总线汇报,或者说注册,出现一个驱动,也要向总线汇报,或者叫注册。
在系统初始化的时候,会扫描连接了哪些设备,并为每一个设备建立一个struct_device 的变量,然后将设备的变量插入到devices 链表系统初始化任意一个驱动程序的时候,就要准备一个struct device_driver 结构的变量,然后将驱动的变量插入到drivers 链表
Linux 总线是为了将设备和驱动绑定,方便管理。在系统每注册一个设备的时候,会寻找与之匹配的驱动(后面的热拔插设备会用到这个注册流程);相反,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。

先注册设备再注册驱动

在注册驱动的时候,系统会通过platform_match 函数匹配设备和驱动。注册设备的结构体为platform_device,注册驱动的结构体为platform_driver。设备和和驱动结构体的成员name 字段,相同则匹配如果匹配了则会调用platform_driver 中的probe 函数,注册驱动。

设备节点

上层应用使用设备节点访问对应的设备
ls /dev
上层应用有一套标准的接口文件和函数用来和底层通信。Linux 将所有对设备的操作全部都抽象为对文件的操作,常用的文件操作函数有open、close、write、read、write 等。

设备注册

platform结构体

内核文件include/linux/platform_device.h文件中查看platform_device.

 struct platform_device{
    const char *name,//设备名称,在sys/devices会显示
    int id;//设备id,用于插入总线并具有相同的name的设备编号,只有一个则是-1;
    struct device dev;//结构体内嵌device结构体
    u32 num_resources;//设备使用的资源数量
    struct resource *resource;//设备组使用的资源数组
    const struct platform_device_id *id_entry;

    struct mfd_cell *m
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值