当前位置:   article > 正文

rockchip驱动开发笔记/PCIE驱动调试、compass sensor驱动(IIO驱动子系统)_pcie驱动开发

pcie驱动开发

PCIE引起的系统无法启动完成

1. 外部晶振芯片的时钟输入是否异常,如果无时钟或者幅度异常,将导致 phy 无法锁定。
2. 检查PCIE供电电压  PCIE30_AVDD_0V9 和 PCIE30_AVDD_1V8 电压是否满足要求。


PCIE不使用时,必须屏蔽,否则启动卡在PCIE3*2附近不远处

&pcie30phy {

status = "disabled";

};

&pcie3x2 {

status = "disabled";

};


Linux中输入设备的事件类型有
EV_SYN 0x00 同步事件
EV_KEY 0x01 按键事件,如KEY_VOLUMEDOWN
EV_REL 0x02 相对坐标,   如鼠标上报的坐标
EV_ABS 0x03 绝对坐标,如触摸屏上报的坐标
EV_MSC 0x04 其它
EV_LED 0x11 LED
EV_SND 0x12 声音
EV_REP 0x14  Repeat
EV_FF 0x15 力反馈 
EV_PWR   0x16    电源
EV_FF_STATUS   0x17 状态

更多看Linux开发指南 572页附近

container_of(ptr,type,number) 第一个参数是第三个参数的指针,返回值是第二个参数的指针。第三个参数是第二个参数的一部分

atomic 原子操作

__maybe_unused 可能不使用 。可以不定义指针函数,指向结构体指针 

_IOWR (魔数, 基数,变量型 )
魔数 (magic number)
魔数范围为 0~255 。通常,用英文字符 "A" ~ "Z" 或者 "a" ~ "z" 来表示。设备驱动程序从传递进来的命令获取魔数,
然后与自身处理的魔数想比较,如果相同则处理,不同则不处理。魔数是拒绝误使用的初步辅助状态。
设备驱动程序可以通过 _IOC_TYPE (cmd) 来获取魔数。不同的设备驱动程序最好设置不同的魔数,但并不是要求绝对,
也是可以使用其他设备驱动程序已用过的魔数.

基(序列号)数
基数用于区别各种命令。通常,从 0开始递增,相同设备驱动程序上可以重复使用该值。例如,
读取和写入命令中使用了相同的基数,设备驱动程序也能分辨出来,原因在于设备驱动程序区分命令时使用 switch ,
且直接使用命令变量 cmd值。创建命令的宏生成的值由多个域组合而成,所以即使是相同的基数,也会判断为不同的命令。
设备驱动程序想要从命令中获取该基数,就使用下面的宏:
_IOC_NR (cmd)
通常,switch 中的 case 值使用的是命令的本身。
变量型
变量型使用 arg 变量指定传送的数据大小,但是不直接代入输入,而是代入变量或者是变量的类型,原因是在使用宏创建命令,
已经包含了 sizeof() 编译命令。比如 _IOR() 宏的定义是:
#define _IOR(type,nr,size)    _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
而 _IOC_TYPECHECK() 的定义正是:
#define _IOC_TYPECHECK(t) (sizeof(t))
设备驱动程序想要从传送的命令获取相应的值,就要使用下列宏函数:
_IOC_SIZE(cmd)

https://blog.csdn.net/csljl11/article/details/78621545

pm_stay_awake()和pm_relax()的意义
pm_stay_awake() 在中断里保持系统不进入睡眠 ,同时调用schedule_delayed_work(&delay_work, msecs_to_jiffies(10) )函数,   
pm_relax()在下半部delay_work中,让系统自由进入睡眠。
https://blog.csdn.net/chizhang7815/article/details/100800761

gpio_desc  of_get_named_gpio_flag(devicenode,name,index,&flag) 

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/251275
推荐阅读
相关标签
  

闽ICP备14008679号