一般情况下在acpi_set_pnp_ids函数中通过bios传递的HID/CLD/UID/CLS/method/path等flags来识别不同的device。
static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,int device_type)
{acpi_status status;struct acpi_device_info *info;struct acpi_pnp_device_id_list *cid_list;int i;switch (device_type) {case ACPI_BUS_TYPE_DEVICE:if (handle == ACPI_ROOT_OBJECT) {acpi_add_id(pnp, ACPI_SYSTEM_HID);break;}status = acpi_get_object_info(handle, &info);if (ACPI_FAILURE(status)) {pr_err(PREFIX "%s: Error reading device info\n",__func__);return;}
//通过HID 识别deviceif (info->valid & ACPI_VALID_HID) {acpi_add_id(pnp, info->hardware_id.string);pnp->type.platform_id = 1;}
//通过CID 识别deviceif (info->valid & ACPI_VALID_CID) {cid_list = &info->compatible_id_list;for (i = 0; i < cid_list->count; i++)acpi_add_id(pnp, cid_list->ids[i].string);}
//通过UID 识别deviceif (info->valid & ACPI_VALID_UID)pnp->unique_id = kstrdup(info->unique_id.string,GFP_KERNEL);if (info->valid & ACPI_VALID_CLS)acpi_add_id(pnp, info->class_code.string);kfree(info);/** Some devices don't reliably have _HIDs & _CIDs, so add* synthetic HIDs to make sure drivers can find them.*/
//通过method来识别deviceif (acpi_is_video_device(handle))acpi_add_id(pnp, ACPI_VIDEO_HID);else if (acpi_bay_match(handle))acpi_add_id(pnp, ACPI_BAY_HID);else if (acpi_dock_match(handle))acpi_add_id(pnp, ACPI_DOCK_HID);else if (acpi_ibm_smbus_match(handle))acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);//通过path识别deviceelse if (list_empty(&pnp->ids) &&acpi_object_is_system_bus(handle)) {/* \_SB, \_TZ, LNXSYBUS */acpi_add_id(pnp, ACPI_BUS_HID);strcpy(pnp->device_name, ACPI_BUS_DEVICE_NAME);strcpy(pnp->device_class, ACPI_BUS_CLASS);}break;}
}
通过HID/CLD/UID/CLS识别device 比较好理解,先看看通过method来识别device
long acpi_is_video_device(acpi_handle handle)
{long video_caps = 0;
//可见主要是通过判断这个handle是否有相关的method。/* Is this device able to support video switching ? */if (acpi_has_method(handle, "_DOD") || acpi_has_method(handle, "_DOS"))video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING;return video_caps;
}再看看通过path识别device的
static bool acpi_object_is_system_bus(acpi_handle handle)
{acpi_handle tmp;if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_SB", &tmp)) &&tmp == handle)return true;if (ACPI_SUCCESS(acpi_get_handle(NULL, "\\_TZ", &tmp)) &&tmp == handle)return true;return false;
}
其中acpi_get_handle的原型如下:可见本例是通过\\_SB 这个路径下的handle是否等于要识别device的handle来确认是否是同一个device的
acpi_status   acpi_get_handle(acpi_handle parent,  acpi_string pathname,acpi_handle *ret_handle)

acpi_hardware_id可以通过HID/CLD/UID/CLS/method/path获得相关推荐

  1. Actions require unique method/path combination for Swagger

    services.AddSwaggerGen (c =>{c.ResolveConflictingActions (apiDescriptions => apiDescriptions.F ...

  2. 安卓uc斗鱼html5,斗鱼HTML5播放器

    // ==UserScript== // @description 基于 flv.js 的斗鱼HTML5播放器. // @icon https://ojiju7xvu.qnssl.com/d5hp/i ...

  3. OC Runtime探索

    文章目录 runtime是什么 运行时 OC对象和消息发送 给对象发送方法 给类发送消息 给父类消息 对象方法 类方法 类的元类 block即对象 类 类的加载 objc_msgSend消息发送 消息 ...

  4. 20200215惠普(HP)星14(R5-3500U)在ubuntu20.04下启动通过dmesg打印的内核信息

    惠普(HP)星14(R5-3500U)在ubuntu20.04下启动通过dmesg打印的内核信息 20:58 2020/2/15 星期六 rootroot@rootroot-HP-Laptop-14s ...

  5. Java Api知识点

    目录 1.文档注释 2.String api 1.String 字符串 2.int length() 返回当前字符串的长度 3.int indexOf(String str): 4.String su ...

  6. Python开发实战

    一.搭建开发环境 搭建开发环境: 首先,确认系统安装的Python版本是3.7.x: $ python3 --version Python 3.7.0 然后,用pip安装开发Web App需要的第三方 ...

  7. mysql udate 充值_分享下一个mysql的充值记录系统

    总共分为几个步骤" 1.链接mysql 2.所有用户到处到listview 3.查询(if(#r)判断找没找到而不是if(!r)) 4.就是充值那 5.充值记录调用进程process 完整代 ...

  8. Express4.x api 翻译(draft)

    用了一年多的Express了,其实会用的功能也能基本满足业务的需求,但是总是感觉自己对其的掌握还是缺少一种系统性.故翻译其api,以期自己在翻译过程中对其有更深的认识. API 原文地址 翻译的内容还 ...

  9. qps是什么意思_面试官:说说你之前负责的系统,QPS 能达到多少?

    被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾吾,导致整体面试效果降低? 原因基本是一些公司中,做完功能测试就完了,压根不会有性能测试这一步,或者说并发量较少,没有 ...

  10. Http压测工具wrk使用指南【转】

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

最新文章

  1. CodeChef--SEPT14小结
  2. 快速建站的php开源程序
  3. Dev控件用法 aspxTreeList 无刷新 aspxGridView 数据
  4. 用TLS实现安全TCP传输及配置和访问https的web服务(转)
  5. xcode 4.2 如何调试 EXC_BAD_ACCESS
  6. python 日期格式校验_python – 如何验证时间格式?
  7. python request 留位置4
  8. #line预编译字分析
  9. cocos2d-x for wp8 设置横竖屏
  10. 自己给打印机怎么加粉墨,联想兄弟打印机加粉步骤
  11. 用 TypeScript 写一个轻量级的 UI 框架之八:表单控件之富文本编辑器
  12. 嵌入式Linux——学习经历
  13. Android 学习笔记(5)之RxJava解析1
  14. O2O模式为什么这么火
  15. FANUC机器人动作指令的定位类型FINE和CNT详解
  16. [架构之路-179]-《软考-系统分析师》-19- 系统可靠性分析与设计 -1- 故障模型、可靠性模型、可靠性分析
  17. Java 从键盘输入一个字符串,统计某个字符的个数
  18. 520到了,是时候展示真正的技术了,程序猿的浪漫代码集合
  19. 金蝶K3 WISE 视频教程-金速鹏-专题视频课程
  20. 常用shell脚本集合

热门文章

  1. 计算机电子书 2019 归档
  2. Sublime text 2 无需注册码的破解方法,只改2个字节
  3. Maven下载安装旧版本
  4. svc补偿时matlab仿真设计,TCR+FC型SVC的研究及MATLAB仿真
  5. css设置弹出信息,javaScript自定义alert弹出信息窗口
  6. 关于Eclipse优化记录
  7. ERROR: librtmp not found 解决方案
  8. 阿里云服务器“禁止外国IP访问服务器”和“禁止服务器访问外国IP”的安全组策略配置方法
  9. f2fs学习笔记 - 9. f2fs 写文件
  10. matlab人脸识别论文,基于matlab的人脸识别系统设计本科毕业论文(设计).doc