openwrt配置内核驱动_openwrt 增加RTC(MCP7940 I2C总线)驱动详解

标签:

一、硬件平台

1.1 控制器:MT7620(A9内核)

1.2 RTC芯片:MCP7940(I2C总线)

二、软件平台

2.1、开发环境:Ubuntu12.04

2.2、软件版本:openwrt 官方15.05版本SDK开发包(CHAOS CALMER 15.05版本)

三、功能说明

本文章所选择的目标芯片为MT7620,profile 选择的为“Xiaomi MiWiFi Mini ”。

3.1、在openwrt 系统上,移植mcp7940的rtc芯片驱动。

3.2、在openwrt系统上,增加对i2c总线的支持。

注意事项:openwrt系统比较奇怪,在menuconfig配置中,配置了i2c,仍然不能支持。需要另外修改“*.dts”文件,才能支持i2c总线。

四、操作步骤

4.1 增加系统对于 i2c 总线的支持

对于系统增加i2c总线的支持,需要修改2个地方

1、openwrt增加对i2c支持。

2、目标芯片的kernel,增加i2c支持。

3、修改dts文件,增加对i2c支持。

4.1.1 配置openwrt 的I2C

在openwrt 目录下,执行“make menuconfig”命令。

进入菜单 Kernel modules  --->I2C support  --->,在菜单选项中,配置如图4-1所示。

af29c971c8f54901b38c52a1e23459cd.png

图4-1 I2C support

4.1.2 配置目标芯片的 I2C

在openwrt 目录下,执行"make kernel_menuconfig"命令,对目标芯片内核进行配置。

进入菜单, Device Drivers  ---> I2C support  --->,如图4-2所示。

65e4bd3a25d27538db78129457104ef4.png

图4-2 目标芯片的I2C总线配置

在图4-2中,选择“I2C Hardware Bus support  ---> ”,配置I2C 硬件总线的支持,选择“Ralink I2C Controller”,如图4-3所示。

bcd908aaa0f125bad757959e35c05512.png

图4-3 I2C Hardware Bus support

4.1.3 修改DTS配置文件

默认的openwrt系统,没有对I2C总线的支持,需要自己修改DTS配置文件。由于本文章选择的芯片为MT7620A,目标profile 选择的为“Xiaomi MiWiFi Mini”,故需要修改的文件为“XIAOMI-MIWIFI-MINI.dts”

文件的路径为“openwrt/target/linux/ramips/dts/XIAOMI-MIWIFI-MINI.dts”

修改之前的DTS文件:

palmbus@10000000 {

gpio0: gpio@600 {

status = "okay";

};

gpio1: gpio@638 {

status = "okay";

};

gpio2: gpio@660 {

status = "okay";

};

spi@b00 {

status = "okay";

m25p80@0 {

在palmbus节点中,增加MT7620A对I2C总线和RTC芯片的支持,修改之后的DTS文件:

palmbus@10000000 {

gpio0: gpio@600 {

status = "okay";

};

gpio1: gpio@638 {

status = "okay";

};

gpio2: gpio@660 {

status = "okay";

};

i2c@900 {

compatible ="ralink,mt7620a-i2c", "ralink,rt2880-i2c";

reg= <0x900 0x100>;

resets = ;

reset-names= "i2c";

#address-cells = <1>;

#size-cells= <0>;

status= "okay";

rtc@6f {

compatible = "mcp,mcp7940";

reg = <0x6f>;

};

};

spi@b00 {

status = "okay";

m25p80@0 {

说明:

1、i2c@900为MT7620A的I2C节点;

2、对于MCP7940芯片,通过查找芯片手册,知道其通信地址为0x6f。如果需要换成其他的芯片,则将对应的地址0x6f都改成其对应的地址即可。

3、对于RTC的名称描述也需要注意,compatible = "mcp,mcp7940",其中mcp7940对应本文5.1章节,驱动程序rtc_mcp7940.c中第93行,“struct

i2c_device_id”中的名称。如果名字不匹配,则会导致驱动程序执行到probe函数不成功,导致rtc驱动加载失败。

static const struct i2c_device_id mcp7940_id[] = {

{ "mcp7940", mcp7940 },

{ }

};

4、如果I2C的引脚,没有设置,则默认可能工作在GPIO模式,特别注意!在本文中的RTC驱动程序,将I2C的引脚设置为了I2C模式,所以在DTS文件中,就没有再设置I2C引脚的工作模式。如果自己的RTC驱动程序中,没有设置I2C引脚,请在DTS文件中设置其工作为I2C模式,以免它默认工作在GPIO模式中!

i2c@900 {

compatible ="ralink,mt7620a-i2c", "ralink,rt2880-i2c";

reg= <0x900 0x100>;

resets = ;

reset-names= "i2c";

#address-cells = <1>;

#size-cells= <0>;

status= "okay";

rtc@6f {

compatible = "mcp,mcp7940";

reg = <0x6f>;

};

};

如果需要修改为ds1307芯片,则只需要将其中的rtc地址和comatible修改即可。ds1307的通信地址为0x68,则修改如下:

rtc@68 {

compatible = "dallas,ds1307";

reg = <0x68>;

};

4.2 增加对RTC的支持

openwrt系统增加对RTC的支持,需要两个操作:

1、修改target文件,增加RTC支持。

2、修改内核配置,增加RTC支持和配置。

4.2.1 修改target文件

系统在./scripts/medatata.pl中判断并处理RTC_SUPPORT开关,分析之后,原来是在 target/linux/ramips/mt7620/target.mk中,将原始的内容:

FEATURES+=usb

修改为:

FEATURES+=usb rtc

即可打开mt7620对rtc的支持。修改之后,target.mk内容如下:

#

# Copyright (C) 2009 OpenWrt.org

#

SUBTARGET:=mt7620

BOARDNAME:=MT7620 based boards

ARCH_PACKAGES:=ramips_24kec

FEATURES+=usb rtc

CPU_TYPE:=24kec

CPU_SUBTYPE:=dsp

DEFAULT_PACKAGES += kmod-rt2800-pci kmod-rt2800-soc

define Target/Description

Build

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值