目录
寄存器篇
修改速率很简单,看到手册里面的寄存器说明,然后将其改掉即可。
寄存器偏移量为0,bit2:1修改为不同值可以配置为100和400两个速率。
修改寄存器
在用户态修改寄存器很简单。
1) 首先查看设备的地址段
我们看到 15.0 I2C控制器占用的地址段 为 0xdf930000开始。
于是我们编写一个用户态mmap映射的程序,进行测试。由于地址空间已经被内核驱动占用,导致mmap读取访问返回为FF。
2)所以我们先卸载掉驱动。
rmmod intel_lpss_pci
同时又需要将设备pcie配置空间相关操作使能
setpci -s 0:15.0 4.B=6
3) 修改寄存器
./pcie_test 0x8086 0xa160
bar phyaddr:0xdf930000
Memory mapped at address 0x7fda2d086000.
bar map virtual address 0x7fda2d086000.
00000075 读取的值为75,即bit1-2为10 400K
./write_pci 0x8086 0xa160 将寄存器写为100K
这时,我们将lpss驱动重新加载,发现寄存器的值又变成了400K。也就是驱动本身还会改这个寄存器,手动修改寄存器改速率这条路是不同的。
intel I2C 驱动结构
于是我们只能寄希望于驱动的修改。但是明明我们加载的驱动是lpss,但是i2cdetect -l查询到的驱动信息却是:i2c-designware ,而这个又是编译到内核中的,并非module模块!!<