作者信息

作者: 彭东林

邮箱:pengdonglin137@163.com

QQ:405728433

平台简介

开发板:tiny4412ADK + S700 + 4GB Flash

要移植的内核版本:Linux-4.4.0 (支持device tree)

u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动)

busybox版本:busybox 1.25

交叉编译工具链: arm-none-linux-gnueabi-gcc

(gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))

摘要

上一篇博文在tiny4412上移植了MMA7660驱动程序,使用的是exynos4412自带的I2C硬件控制器,下面我要说的是用软件模拟一个I2C控制器,用的还是原来的两个GPIO引脚,这不过此时这两个GPIO的功能复用还是GPIO功能。关于这部分可以参考:http://www.cnblogs.com/pengdonglin137/p/4623169.html

移植

Linux内核的驱动分层设计带来好处,我们这里只需要修改I2C控制器的驱动部分,MMA7660的驱动程序部分完全不需要任何改动,而且Linux内核也已经把软件模拟I2C控制器的代码实现好了:drivers/i2c/busses/i2c-gpio.c,我们需要做的只剩下配置设备树了,在arch/arm/boot/dts/exynos4412-tiny4412.dts中添加软件I2C的硬件信息,可以参考:Documentation/devicetree/bindings/i2c/i2c-gpio.txt:

1: i2c_mma7660: i2c-gpio-0 {

2: compatible = "i2c-gpio";

3: gpios = , /* SDA */

4: ; /* SCL */

5: /* i2c-gpio,sda-open-drain; */

6: /* i2c-gpio,scl-open-drain; */

7: i2c-gpio,delay-us = <2>; /* 250 kHz */

8: #address-cells = <1>;

9: #size-cells = <0>;

10: status = "okay";

11:

12: mma7660@4c {

13: compatible = "freescale,mma7660";

14: reg = <0x4c>;

15: interrupt-parent = ;

16: interrupts = <1 2>;

17: poll_interval = <100>;

18: input_fuzz = <4>;

19: input_flat = <4>;

20: status = "okay";

21: };

22: };

其中需要关注的:

第3行表示实现SDA信号的GPIO引脚;

第4行表示实现SCL信号的GPIO引脚;

第7行用于控制SCL的频率;

第12-20行还是MMA7660的硬件信息,跟上篇一样,一点都没有变;

下面是SDA和SCL的大致时序图:

可以看到我给udelay设置的值是2,所以周期是4,单位是微秒,所以频率大致是250KHz左右,MMA7660的芯片手册上说I2C的通信速率最大为400KHz,小于这个就可以了:

这部分代码我已经上传到github上了:

git clone https://github.com/pengdonglin137/linux-4.4_tiny4412.git -b port_to_tiny4412

需要执行make menuconfig,将CONFIG_MMA7660_USE_I2C_GPIO设置成y,然后再执行make dtbs。

测试

GPIO使用情况

1: [root@tiny4412 ]# cat /sys/kernel/debug/gpio

2: GPIOs 0-7, platform/11400000.pinctrl, gpa0:

3:

4: GPIOs 8-13, platform/11400000.pinctrl, gpa1:

5: gpio-10 ( |sda ) in hi

6: gpio-11 ( |scl ) in hi

读取MMA7660的寄存器的值

1: [root@tiny4412 ]# cd /sys/bus/i2c/drivers/mma7660/9-004c/

2: [root@tiny4412 9-004c]# ls

3: all_axis_g input of_node subsystem x_axis_g

4: driver modalias power tilt_status y_axis_g

5: hwmon name registers uevent z_axis_g

6: [root@tiny4412 9-004c]# cat all_axis_g

7: 3, 0, 22

8: [root@tiny4412 9-004c]# cat registers

9: REG: 0x00 = 0x02 ...... [ 0000 0010 ]

10: REG: 0x01 = 0x00 ...... [ 0000 0000 ]

11: REG: 0x02 = 0x17 ...... [ 0001 0111 ]

12: REG: 0x03 = 0x01 ...... [ 0000 0001 ]

13: REG: 0x04 = 0x02 ...... [ 0000 0010 ]

14: REG: 0x05 = 0xa0 ...... [ 1010 0000 ]

15: REG: 0x06 = 0xe7 ...... [ 1110 0111 ]

16: REG: 0x07 = 0x59 ...... [ 0101 1001 ]

17: REG: 0x08 = 0x49 ...... [ 0100 1001 ]

18: REG: 0x09 = 0x04 ...... [ 0000 0100 ]

19: REG: 0x0a = 0x0f ...... [ 0000 1111 ]

查看MMA7660上报事件

1: [root@tiny4412 9-004c]# hexdump /dev/input/event0

2: 0000000 00b6 0000 f0a8 000d 0003 0002 0016 0000

3: 0000010 00b6 0000 f0a8 000d 0000 0000 0000 0000

4: 0000020 00b7 0000 b77c 0001 0003 0000 0002 0000

5: 0000030 00b7 0000 b77c 0001 0000 0000 0000 0000

6: 0000040 00b9 0000 3125 0000 0003 0000 0004 0000

7: 0000050 00b9 0000 3125 0000 0003 0002 0015 0000

8: 0000060 00b9 0000 3125 0000 0000 0000 0000 0000

9: 0000070 00b9 0000 df77 000a 0003 0000 0003 0000

10: 0000080 00b9 0000 df77 000a 0000 0000 0000 0000

11: 0000090 00b9 0000 ec9b 000d 0003 0000 0002 0000

12: 00000a0 00b9 0000 ec9b 000d 0000 0000 0000 0000

13: 00000b0 00ba 0000 3148 0000 0003 0000 0001 0000

14: 00000c0 00ba 0000 3148 0000 0000 0000 0000 0000

15: 00000d0 00ba 0000 58af 0009 0003 0002 0014 0000

16: 00000e0 00ba 0000 58af 0009 0000 0000 0000 0000

未完待续……

linux不同内核驱动移植问题,基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)...相关推荐

  1. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  2. 学内核之二:基于QEMU搭建Linux内核运行调试环境

    目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...

  3. 基于tiny4412的Linux内核移植 -- eMMC驱动移植(六)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  4. 基于tiny4412的Linux内核移植 -- 设备树的展开【转】

    转自:https://www.cnblogs.com/pengdonglin137/p/5248114.html#_lab2_3_1 阅读目录(Content) 作者信息 平台简介 摘要 正文 一.根 ...

  5. 基于tiny4412的Linux内核移植 -- 设备树的展开

    http://blog.csdn.net/ermuzhi/article/details/9298541 摘要 在Linux引入设备树之后,将原来写在代码中的大量的硬件信息全部移到了设备树中,然后在L ...

  6. 基于tiny4412的Linux内核移植(支持device tree)(二)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. linux gianfar 网口驱动源码,基于MPC8313ERDB平台的Marvell88E1111型网卡驱动移植(uboot+kernel)...

    最近一个月挣扎于千兆网的设备驱动移植,现在终于弄出来了,虽然有点累但是收获还是挺多的. 进入主题前,首先要感谢网友gorilla0123,他的博客给了我很多启发,在此非常感谢.我建议做网卡驱动这方面的 ...

  8. linux修改时间_技术干货||基于Centos8的Linux简单入门学习笔记

    很基础 以后不想记笔记了 最后分享一次

  9. 嵌入式linux与pc串口传输文件基于lrzsz

    嵌入式linux与pc串口传输文件基于lrzsz 嵌入式linux传输应用程序通常用nfs.tftp等比较麻烦,一般小应用也就几k用串口就行,这里给出一种串口传输文件的方式lrzsz lzsz需要在开 ...

最新文章

  1. c语言注释seg fault,segmentation fault求解
  2. 网上整理的jQuery插件开发教程
  3. pytorch 笔记:手动实现AR (auto regressive)
  4. 数据结构之单向环形列表解决josef问题
  5. [转]四种π型RC滤波电路
  6. No portmap or rpcbind service is running on this host
  7. flume1.6 + syslogtcp + kafka 日志采集(二)
  8. activemq linux 100M,Linux下安装 activemq 并指定jdk 1.8(示例代码)
  9. SIR模型的应用(2) - Influence maximization in social networks based on TOPSIS(3)
  10. matlab 半正定规划,半正定规划
  11. Android网络验证逆向,【Android逆向】去除无聊的网络验证弹窗与360加固
  12. CHM格式打不开解决方案
  13. fflush()函数
  14. HOOK技术四-插件中Activity启动实战
  15. 一个可以免费下载表情包的小程序
  16. 【thinkphp5.1】htmlentities() expects parameter 1 to be string, array given
  17. 企业办理的icp许可证领取需要什么手续
  18. 从控制台输入用户名和密码, 然后 判断输入的用户名是否是@“Frank”, 密码 是否是 @“lanou”, 如果用户名和密码都正确,则输出登录成功, 否则输出登录失败. 提示:
  19. Win7屏幕显示方向怎么调整为竖屏显示操作教学分享
  20. 云服务器无法访问解决办法

热门文章

  1. [深度学习] 池化层函数及其逆过程函数
  2. js中字符串类型转化toString、parseInt、parseFloat、Number
  3. 8086寄存器的配合使用
  4. linux服务器查看系统装到哪个盘,查看linux安装了什么服务器地址
  5. Linux下如何查看定位当前正在运行的Nginx的配置文件
  6. Fix Corrupt Blocks on HDFS
  7. XCL-Charts圈图
  8. Tesseract训练笔记
  9. Eclipse启动莫名报错处理
  10. [转载] 用Tkinter打造GUI开发工具(45)用Tkinter做自己的中文代码编辑器