网站首页  词典首页

请输入您要查询的论文:

 

标题 基于嵌入式Linux的 platform驱动设计与应用
范文

    王晓君 王星 李玉莹

    摘要:如今的驱动程序已经无法满足越来越多的高度集中的片上系统SOC的要求。本文主要叙述了基于嵌入式 Linux的platform驱动程序的设计方法和应用开发过程。在platform总线架构下温湿度采集驱动设计的基础上,详细阐述了嵌入式 Linux下platform总线驱动设计中的platform总线、platform设备及platform驱动注册和卸载等,并验证设备驱动的正确性。

    关键词:platform总线;platform设备;platform驱动

    中图分类号:TP316文献标识码:A

    Platform的管理是在Linux基础之上完成。platform 在Linux 设备模型中管理外设资源和系统的外围设备。引入platform之后更加便于管理。platform驱动架构有利于这些设备驱动的改写、维护与扩展,提高设备驱动开发[1]的效率。因而,在此基础上完成了驱动设计的温度和湿度采集的实验。

    1 platform总体设计

    Linux设备驱动负责设备的维护和实现,如:电源管理、热插拔、对象生命周期、用户空间和内核空间[2]的交互等。设备驱动主要是用于驱动程序的编写和管理,但是实现相对复杂。总线、设备、驱动就是设备驱动模型的三个主要部分,[35]其组织关系总结为:

    (1)devices:描述了设备如何连接系统;

    (2)drivers:系统中可用的驱动;

    (3)buses:负责匹配设备与驱动,连接到每个总线上;

    (4)classes:设备功能类。

    1.1 platform总线

    platform 总线在内核中用platform_bus_type 结构表示,其实platform_bus_type就是一个关于platform的实例,platform总线启动时由platform_bus_init()进入,具体调用函数的流程如下。

    图1 platform总线流程图

    Fig.1 platform bus flow processes

    1.2 platform设备与platform驱动

    分析设备使用platform_device 和驱动使用platform_driver,并在此基础上对其进行详细的分析和阐述。

    其中针对platform_device,首先在需要包含头文件platform_device.h的头文件,然后设计一个命名为platform_device的结构体。结构体中必须包含设备平台的名称name,设备所需要的id号,并且需要一个用于设置相关项的内置的结构体,还需要结构体包含大的数量和资源指针,以及驱动设备的相关的匹配列表id_table表。

    其中针对platform_driver,也必须包含头文件platform_device.h,然后設计一个命名为platform_driver的结构体。结构体中必须包含设备平台中platform的探测函数probe,与之相反的就是卸载platform的函数remove,platform需要对电源进行管理,包括电源的的设备和状态的选择,并且需要一个用于设置相关项的内置的结构体,还需要结构体包含大的数量和资源指针,以及总线设备的相关的列表id_table表。

    2 platform总线架构下温湿度驱动实现

    2.1 设备平台资源

    在tiny4412相关的硬件设备中对其进行驱动程序的开发和设计,从而进一步的调试和完善platform总线架构的温湿度采集驱动。温度传感器采用DHT11直接外接到嵌入式GPB4引脚上,通过温度采集驱动控制外围设备,控制台实现温湿度的采集。Platform总线架构需要一整套系统的的设计开发过程:首先需要对总线platform bus进行初始化,将 platform_device注册到内核,然后再把 platform 设备挂到 platform bus(虚拟总线)上。最后注册并编写 platform 的驱动程序,实现两者的绑定。

    2.2 实现platform设备

    platform 设备是注册到 platform 总线的,使用 struct platform_device 定义平台设备,通过platform_device_alloc()初始化函数中调用 platform_device_add()完成设备向内核注册,设备注册成功后,platform 总线会有 tiny4412dht11 的设备。platform设备定义及注册核心代码如下:

    static int __init platform_dev_init(void)

    {int ret;

    my_dht11_dev=platform_device_alloc("platform_dht11",1);

    ret = platform_device_add(my_dht11_dev);

    if(ret) platform_device_put(my_dht11_dev);

    return ret;

    }

    2.3 实现platform驱动

    platform驱动定义结构体xing_dht11_drv,核心代码如下所示:

    struct platform_driverdevice_dht11_drv = {

    .probe =xing_dht11_probe,

    .remove =xing_ dht11_remove,

    .driver = {

    .owner =the_module,

    .name = "platform_dht11",

    },

    };

    在tiny4412_dht11_driver中tiny4412_dht11_probe()主要完成查询系统中是否有相应设备,如果检测到相应设备,则说明初始化完成。温湿度采集驱动采用register_chrdev()向内核注册驱动,实现温湿度采集的open(),read()等功能,在read()函数中实现温湿度的读取。tiny4412_dht11_probe()核心代码为:

    驱动,并能与platform_dht11设备建立连接,能在控制台上打印温湿度采集结果。结果如图2所示:

    图2 温湿度采集结果

    Fig.2Temperature and humidity collection results

    3 结语

    基于嵌入式Linux的platform驱动设计与应用中实现了在API上获取设备中的信息,将SOC上的设备添加到虚拟总线上,使得总线到设备到驱动的顺序模式到更加广泛的使用,驱动代码的编写和放置位置可以与其他硬件代码的隔离开来。温湿度采集中关于驱动程序的设计和调试,证明了platform驱动的移植性良好,而且具有很高的可拓展性。

    参考文献:

    [1]李桦,高飞,孙磊.嵌入式Linux设备驱动程序研究[J].微计算机信息,2010,26(14):6870.

    Linux中用户空间与内核空间的通信实现[J].微机发展,2005(05):7576+130.

    [2]宋宝华.Linux 设备驱动开发详解[M].人民邮电出版社,2008.0824.

    [3]赵波,高真香子,项伯阳,等.Linux platform驱动架构的解析与应用[J].大连工业大学学报,2013,32(01):7174.

    [4]周德荣,夏龄.Linux platform驱动架构实现机制研究与应用[J].赤峰学院学报(自然科学版),2010,26(10):2830.

    [5]李建文,李外云,劉宏博,等.基于TinyOS2.x的温湿度传感器的底层驱动与应用[J].单片机与嵌入式系统应用,2013,13(07):2831.

    作者简介:王晓君(1973),男,河北张家口人,教授。

    *通讯作者:王星

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2024/12/23 3:08:45