- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux 设备驱动快速更新技术
清华大学操作系统研究中心
• 设备驱动代码比 >50%
• Linux 内核更新速度加快
• 设备驱动更新:
• 添加新功能
• 修复 bug
• 适配新内核(与驱动功能无关)
• 自动化的、为开发者提供尽可能多的帮助信息
设备驱动
适配新内
核
人工分析
• 分析错误原因
• 内核接口变化:删除、声明改变
• 寻找解决办法
• 分析相关 patch
• 分析其他设备驱动的相关更新
• 确定修改方案
快速更新技术
• 自动分析编译错误:
• 提取错误关键信息(接口名称)
• 确定接口在内核源码中的详细信息
• 为开发者提供帮助信息:
• 接口的详细变化信息
• 改变接口的相关内核 patch
• 其他驱动的相关更新内容
快速更新技术
• 内核接口差异分析
• 分析内核中所有接口的详细信息
• 分析不同版本之间内核接口的差异
• 驱动更新辅助分析
• 分析驱动的编译错误
• 寻找错误相关的辅助信息
内核接口差异分析
整体设计
• 信息收集
• 完整的内核接口信息收集
• 驱动依赖接口信息收集
• 差异分析
• 分析出驱动依赖接口在不同内核间的差异
信息收集
信息收集
• 类型
• 文件
• 声明
差异分析
差异分析
• ADD
• DELETE
• CHANGE
• FILE CHANGE
• DECL CHANGE
驱动更新辅助分析
整体设计
差异信息
• 导致编译错误的接口在新旧内核中的差异
• 帮助开发者了解错误产生的原因
相关的 Linux 提交信息
• 与错误相关的 patch 信息
• 找出哪个 patch 导致问题接口发生了变化
• 帮助解决接口换名的问题
• 其他驱动的相关更新内容
• 内核接口变化使用者变化
• 找出相关的更新内容
• 借鉴参考
• 解决函数替换的问题
Example
• E1000
• Linux 3.5.4 – Linux 4.1
• 编译错误:
• /e1000/e1000_main.c:817:17: error: ‘ NETIF_F_HW_VLAN_RX’ undecl
ared (first use in this function)
Example – 差异分析
• DECL NAME: NETIF_F_HW_VLAN_RX
• FILE NAME:
• /home/wh/driver-api/kernels/linux-3.5.4/include/linux/netdev_features.h
• CHANGE TYPE: DELETE
• DECLARATION: #define NETIF_F_HW_VLAN_RX __NETIF_F(HW_VLAN_RX)
Example – 相关内核 patch
• commit id: f646968f8f7c624587de729115d802372b9063dd
• include/linux/netdev_features.h
• @@ -80,9 +80,9 @@ enum {
• #define NETIF_F_GSO_ROBUST __NETIF_F(GSO_ROBUST)
• #define NETIF_F_HIGHDMA __NETIF_F(HIGHDMA)
• #define NETIF_F_HW_CSUM __NETIF_F(HW_CSUM)
• -#define NETIF_F_HW_VLAN_FILTER __NETIF_F(HW_VLAN_FILTER)
• -#define NETIF_F_HW_VLAN_RX __NETIF_F(HW_VLAN_RX)
• -#define NETIF_F_HW_VLAN_TX __NETIF_F(HW_VLAN_TX)
•
文档评论(0)