当前位置:首页 > 资讯 > info5 > 正文

总线设备模型(一)

发表于: 2016-06-29   作者:abcamus   来源:转载   浏览:
摘要: 总线设备模型(一)标签:linux系统1.引言本文介绍linux内核是如何支持总线设备驱动框架的。因为amba相关的代码结构比较简单,代码目录位于drivers/amba/下,源代码只有两个文件,分别为bus.c和tegra-ahb.c,相关头文件include/linux/amba/bus.h。我们可以通过阅读这部分代码来了解内核的设备模型。主要内容包含以下几个方面:-注册方式-设备管理-功耗管

总线设备模型(一)

标签: linux系统

1. 引言

本文介绍linux内核是如何支持总线设备驱动框架的。因为amba相关的代码结构比较简单,代码目录位于drivers/amba/下,源代码只有两个文件,分别为bus.c和tegra-ahb.c,相关头文件include/linux/amba/bus.h。我们可以通过阅读这部分代码来了解内核的设备模型。主要内容包含以下几个方面:
- 注册方式
- 设备管理
- 功耗管理
- 事件管理
其中最后两项是和内核其他子系统密切关联的。

2. 主要模块

  1. 总线注册
/* * Primecells are part of the Advanced Microcontroller Bus Architecture, * so we call the bus "amba". */
struct bus_type amba_bustype = {
    .name       = "amba",
    .dev_attrs  = amba_dev_attrs,
    .match      = amba_match,
    .uevent     = amba_uevent,
    .pm     = &amba_pm,
};

static int __init amba_init(void)
{
    return bus_register(&amba_bustype);
}

设备属性
amba_bustype中的amba_dev_attrs成员
事件响应
amba_bustype中有个amba_uevent成员
功耗管理
amba_bustype中的amba_pm成员

  1. 设备注册
    调用内核的device_initialize()接口,初始化struct device,并将dev.bus设置为amba_bustype.这些工作都在amba_device_initialize()中完成。
/** * amba_device_register - register an AMBA device * @dev: AMBA device to register * @parent: parent memory resource * * Setup the AMBA device, reading the cell ID if present. * Claim the resource, and register the AMBA device with * the Linux device manager. */
int amba_device_register(struct amba_device *dev, struct resource *parent)
{
    amba_device_initialize(dev, dev->dev.init_name);
    dev->dev.init_name = NULL;

    return amba_device_add(dev, parent);
}

添加amba设备的流程如图2-1所示

图 2-1 添加设备

  1. 驱动注册
    和设备注册一样,将struct device_driver中的成员bus设为amba_bustype,接着绑定probe,remove,shutdown接口,然后调用driver_register()接口就可以完成驱动注册,最终会调用amba_bustype中的match函数来和之前注册的device匹配。
/** * amba_driver_register - register an AMBA device driver * @drv: amba device driver structure * * Register an AMBA device driver with the Linux device model * core. If devices pre-exist, the drivers probe function will * be called. */
int amba_driver_register(struct amba_driver *drv)
{
    drv->drv.bus = &amba_bustype;

#define SETFN(fn) if (drv->fn) drv->drv.fn = amba_##fn
    SETFN(probe);
    SETFN(remove);
    SETFN(shutdown);

    return driver_register(&drv->drv);
}

总线设备模型(一)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
总线驱动设备模型: 1. 总线设备驱动模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对
总线设备驱动模型 总线:创建一条总线,跟我们前面的按键一样,首先是描述总线结构,接着是注册总线
sysfs文件系统 sysfs is a ram-based filesystem initially based on ramfs.it provides a means to
尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备
原文:http://www.cnblogs.com/image-eye/archive/2012/01/29/2331254.html Kobject,kset是设备模
ref: http://www.cnblogs.com/image-eye/archive/2012/01/29/2331254.html Kobject,kset是设备模型
源自 http://blog.chinaunix.net/uid-27664726-id-3334923.html 如果你了解了前面总线、设备模型,
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver。Linux
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver。Linux
20150225 IMX257 总线设备驱动模型编程之总线篇 2015-02-25 19:40 李海沿 从现在开始,我们开始来实
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号