当前位置: 首页 > news >正文

Linux驱动:设备树、中断(中断子系统)

一、设备树

(一)概念

        1.设备树:描述硬件资源(以开发版为单位)

        2..dts:描述板级资源的设备树文件(一般一个开发板对应一个文件)

        3..dtsi:描述SOC的设备树文件(类似于.c对应的.h文件)

        4..h:c语言的头文件,设备树编译支持预处理c文件

        5..dtb:最终编译完成后生成的可加载的设备树文件(类似a.out)

(二)操作设备树步骤

        1.cp arch/arm/boot/dts/imx6ull-alientek-emmc.dts         arch/arm/boot/dts/wwb.dts

        2.修改arch/arm/boot/dts/Makefile                //新增一行,wwb.dtb(加到对应的SOC下)

        3.make dtbs         //编译所有的设备树文件

                make  wwb.dtb        //只编译wwb.dts

        4.设备树属性书写原则:

                ①该属性通用性高,则按照设备树中已有的属性名及格式定义

                ②该属性如果未在设备树中定义,则自行定义

        5.节点查找

                ①of_find_node_by_path();

                ②of_property_read_u32_array();

                ③_property_read_string();

(三)GPIO子系统:内核帮我们实现操作对应接口的函数

        1.设备树中定义对应的引脚及设置电器属性

                pinctrl_wwbled:wwbledgrp{

        fsl,pin = <MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0>;

};

        2.wwbled{

                #address-cells = <1>;

                #size-cells = <1>;

                compitable = "wwbled";

                pinctrl-0 = &pinctrl_wuled;

                led-gpio = <&gpio1 3 1>;

                status = "okay";

};

        of_get_named_gpio();

        3.inline:内联函数

        被inline修饰的函数编译时会被原地展开在调用的位置

        4.带设备树的platform的驱动:

static struct of_device_id led_table[] = 

{

         {

         .compatible = "wu-led-subgpio"},

        {} 

 };

 static struct platform_driver pdrv = 

{

.probe = probe, 

.remove = remove, 

.driver = 

         {

      .name = DEV_NAME, 

      .of_match_table = led_table

        }

};

必须定义of_device_if 结构体并初始化compatible成员 该成员和设备树中的compatible匹配,匹配成功后执行 dirver中的probe函数

二、中断(中断子系统)

(一)ptkey {

 #address-cells = ;

#size-cells = ; 

compatible = "pt-key"; 

interrupt-parent = ; 

interrupts = ;

status = "okay"; 

};

irq_of_parse_and_map();

request_irq();

free_irq();

(二)示意图

(三)taskled和workqueue

        1.中断上下文: 和中断处理相关的代码 --- 中断服务程序(中断顶半部) 、软中断、 tasklet -----------不能休眠、不能阻塞 不要做耗时操作

        2.进程上下文:和进程操作相关的代码 --- open read write close 、 workqueue -----可以休眠、阻塞 可以做耗时操作

        3.taskled

 irq_task_fun();

struct tasklet_struct tsk;

tasklet_init(&tsk, irq_task_fun, 100);

tasklet_schedule(&tsk);

        4.workqueue

irq_workqueue_fun();

struct work_struct wk;

INIT_WORK(&wk, irq_workqueue_fun);

schedule_work(&wk);

http://www.dtcms.com/a/424885.html

相关文章:

  • 全球网站建设建站资源
  • 惠州免费网站建设首页页面设计
  • 电商型网站是否是趋势chrome网站开发插件
  • 长治网站公司上海做网站的公司有哪些
  • 哪些网站结构是不合理的广州市建设和水务局网站
  • JAVA中的抽象类和抽象方法
  • 抄袭网站设计网站关键词优化推广
  • 软件下载网站源码上海网站推广哪家好
  • 网站字体标准自己制作网页怎么制作的
  • 企业官方网站管理制度成全视频免费观看在线看电视剧
  • 无锡模板网站设计公司云设计工具
  • 企业做网站要注意些什么问题长沙网站设计工作室
  • 网站建设 关于我们网络编辑的工作内容
  • 免费创建app网站百科网站推广
  • 江苏建设人才网网站wordpress 外贸
  • 做logo好的网站汕头专业的免费建站
  • MySQL InnoDB存储引擎表的逻辑存储结构实现原理详细介绍
  • 【python】条件与循环语法详解
  • C++函数模板详解
  • ros_control 中 hardware_interface 教程
  • 做视频网站教程wordpress页面添加描述
  • 青岛专业设计网站公司怎样做关键词排名优化
  • Spring 统一功能处理 - 拦截器与适配器
  • 浙江省建设厅干部学校门户网站vi设计与网站建设招标文件
  • 网站群建设方案黄金网站大全免费2023
  • C++指针与引用详解
  • 国内做免费视频网站哪些网站可以做淘宝店招
  • 生物化学Learning Track(9)核酸的结构和功能
  • 绿园区建设局网站惠州seo报价
  • 建设360导航网站的目的是什么意思网站推广的建议