i2c驱动调试经验

本文介绍了将I2C驱动从2.6.21版本升级到2.6.39版本的过程,包括理解驱动架构、更新代码以及解决probe函数调用问题。在调试过程中,发现需要调用i2c_register_board_info来注册设备,并对比了普通设备与I2C设备的添加方式。通过示波器检测通信协议,发现地址和ACK问题,最终解决了驱动加载失败的问题。此外,还提到了i2c-tools在检测设备中的作用以及I2C地址的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把一个i2c驱动从2.6.21升级到2.6.39

 

 上网查到一篇帖子,讲了驱动分为i2c总线,i2c设备,总线驱动做实际的总线读写操作,设备驱动实现针对不同设备操作。先找一篇帖子看看整体架构,再看代码,理解效果不错,这招是跟老猫学的。

又查到一篇帖子,讲了从老版本i2c驱动,升级到新版本,需要做哪些变更,是翻译的内核文档。

 

照做,但是i2c设备驱动的probe函数调不起来,这个根据我的经验要加个device,但是i2c的device不知道怎么加。翻了翻i2c总线的代码,后来还是同事发现没有调用i2c_register_board_info。之前的老版本驱动就有这个i2c_register_board_info调用,在arch/arm里面一个跟board相关的文件里,我光注意driver目录下的内容,给漏掉了。

 

 

 

 

普通的设备,调用platform_add_devices添加设备 vs i2c总线上的设备,调用i2c_register_board_info添加设备,添加到了一个i2c单独的设备list结构里

添加驱动的函数与platform_add_devices也不一样,添加驱动后,就遍历设备列表,看哪个匹配

 

### 判断二叉搜索树的有效性 要判断一个树是否为有效的二叉搜索树(BST),可以通过递归方法验证每个节点是否满足 BST 的定义条件。具体来说,对于任意节点 `node`: - 左子树中的所有节点值都应小于当前节点值; - 右子树中的所有节点值都应大于等于当前节点值。 以下是基于 Python 实现的一个解决方案,它通过递归来检查上述条件并返回布尔值表示结果[^1]。 #### 解决方案代码 ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def isValidBST(root: TreeNode) -> bool: def helper(node, lower=float('-inf'), upper=float('inf')): if not node: return True # 当前节点值不在允许范围内则不合法 if node.val <= lower or node.val >= upper: return False # 递归检查左子树和右子树 if not helper(node.left, lower, node.val): # 更新上界 return False if not helper(node.right, node.val, upper): # 更新下界 return False return True return helper(root) # 测试用例构建 root = TreeNode(8) root.left = TreeNode(6) root.left.left = TreeNode(5) root.left.right = TreeNode(7) root.right = TreeNode(10) root.right.left = TreeNode(8) root.right.right = TreeNode(11) print(isValidBST(root)) # 输出结果应该是 True 或 False ``` 此代码实现了对二叉树的合法性检测功能,并利用辅助函数 `helper` 来维护上下限范围以确保每层节点均符合约束条件[^2]。 如果题目涉及的是从前序遍历序列重建树再做判定的情况,则需额外考虑如何解析输入数据以及处理可能存在的镜像情况[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值