讨好面试官之 IIC子系统驱动

大家好我是石斑鱼,

本文适合正在找Linux驱动相关工作的新手开发者,大佬们可以跳过了。

阅读本文之前,建议先大概了解一下IIC的物理电路时序,这个在面试中可能也会被问到,由于我目前主要关注驱动,所以先略过,后面有机会再补上。

Linux面试中,面试官会常问 IIC设备驱动常规写法,因为IIC子系统算经常修改调试的驱动,之前也只是会怎么抄。这里针对口语化理解总结,细节部分没有写出来,细节可以再搜一下其他大佬的文章。

本文大概写下主干框架,方便自己回忆结构,也方便兄弟姐妹们面试口语回答这个问题时候参考,如果哪里写错了,请尽情骂我吧,骂完我马上改。(我个人觉得,要在一大片知识里面总结关键架构,讨好面试官并口语化回答到要点还是挺难的)
如果还有其他IIC相关的面试问题,也欢迎评论,后面增加上来。

面试官:说说IIC驱动怎么写?

口语简答版:
嵌入式Linux驱动中IIC驱动开发大致有三个步骤:

  • 1、在设备树中描述好IIC设备信息
  • 2、实现 i2c_driver 结构体并通过 i2c_add_driver()添加到IIC总线
  • 3、实现 probe() 等函数
    • 使用 register_chrdev() 申请设备号并注册一个字符设备,实现 file_operations
    • 使用 class_create()device_create() 创建设备节点文件
    • 通过IIC的相关接口如 i2c_transfer() 去初始化IIC从设备


虽然上面的口语回答覆盖了面试官的问题答案,但也要了解相关代码:

1. 在设备树中描述好IIC设备信息,挂在哪个IIC总线下,设备寄存器地址。

i2c@138B0000{
    /*i2c adapter信息*/
    #address-cells = <0>;
    #size-cells = <0>;
    samsung,i2c-sda-delay = <100>;
    samsung,i2c-max-bus-freq = <20000>;
    pinctrl-0 = <&i2c5_bus>;
    pinctrl-names = "default";
    status = "okay";
    mpu6050@68{/*i2c client信息*/
    compatible = "invensense,m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值