为OpenWrt添加实时钟(RTC)--以MT7620为例

前言

实时钟,英文名RTC(Real Time Clock),在PC里面很常见,在OpenWrt里面却鲜有提及,手头上有一个DS1307的TinyRTC实时钟模块,经过一番折腾,将其融合到了OpenWrt系统,遂将操作过程记录成文.

背景知识

DS1307在最新的OpenWrt中已经提供支持,却没有整合进ramips中,因此,本文的一个重点便是如何为ramips系统配置ds1307.另外,为ds1307编写合适的dts节点也是本文的一个重点.

实现过程

1.为ramips配置ds1307支持

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

原始的内容:

FEATURES+=usb

修改为:

FEATURES+=usb rtc

即可打开mt7620对rtc的支持.

此时,make kernel_menuconfig进入配置菜单.同时应注意,由于ds1307是i2c接口的模块,因此,在device中需要配置i2c的支持.选中i2c之后,便可以在

Device Drivers -> Real Time Clock中看到ds1307

 .config - Linux/mips 3.14.28 Kernel Configuration
 > Device Drivers > Real Time Clock ─────────────────────────────────────
  ┌──── Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025 ────┐
  │ CONFIG_RTC_DRV_DS1307:                                            │
  │                                                                   │
  │ If you say yes here you get support for various compatible RTC    │
  │ chips (often with battery backup) connected with I2C. This driver │
  │ should handle DS1307, DS1337, DS1338, DS1339, DS1340, ST M41T00,  │
  │ EPSON RX-8025 and probably other chips. In some cases the RTC     │
  │ must already have been initialized (by manufacturing or a         │
  │ bootloader).                                                      │
  │                                                                   │
  │ The first seven registers on these chips hold an RTC, and other   │
  │ registers may add features such as NVRAM, a trickle charger for   │
  │ the RTC/NVRAM backup power, and alarms. NVRAM is visible in       │
  │ sysfs, but other chip features may not be available.              │
  │                                                                   │
  │ This driver can also be built as a module. If so, the module      │
  │ will be called rtc-ds1307.                                        │
  │                                                                   │
  │ Symbol: RTC_DRV_DS1307 [=y]                                       │
  │ Type  : tristate                                                  │
  │ Prompt: Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025 │
  │   Location:                                                       │
  │     -> Device Drivers                                             │
  │       -> Real Time Clock (RTC_CLASS [=y])                         │
  │   Defined at drivers/rtc/Kconfig:166                              │
  │   Depends on: RTC_CLASS [=y] && I2C [=y]                          │
  │                                                                   │
  │                                                                   │
  │                                                                   │
  ├───────────────────────────────────────────────────────────(100%)──┤
  │                             < Exit >                              │
  └───────────────────────────────────────────────────────────────────┘

2.为ds1307建立dts节点

配置好ds1307的编译开关后,接下来的工作就要在dts里面添加ds1307的设备节点.查阅ds1307的资料,其配置的i2c地址为0x68,因此,dts中可以添加如下内容:

	[email protected] {
		compatible = "i2c-gpio";
		gpios = <&gpio2 0 0 /* sda = wan_led*/
				&gpio3 0 0 /* scl = wlan_led*/ >;
		i2c-gpio,delay-us = <10>;	/* ~20 kHz */
		#address-cells = <1>;
		#size-cells = <0>;

		[email protected] {
			compatible = "dallas,ds1307";
			reg = <0x68>;
		};

	}; 

完成这两步后,就可以make出支持ds1307的固件.

系统启动时,可以在TTL中看到如下内容:

[    0.130000] i2c-gpio i2c.4: using pins 40 (SDA) and 72 (SCL)
...
[    0.790000] rtc-ds1307 0-0068: rtc core: registered ds1307 as rtc0
[    0.810000] rtc-ds1307 0-0068: 56 bytes nvram
...
[    0.810000] rtc-ds1307 0-0068: setting system clock to 2015-01-26 22:31:15 UTC (1422311475)

说明RTC已经成功的整合到了mt7620的系统中.

ps:系统自带的hwclock命令可以很方便的对RTC进行相应的操作.

时间: 2024-10-10 14:37:12

为OpenWrt添加实时钟(RTC)--以MT7620为例的相关文章

给博客添加Flash时钟

依稀记得在cnblogs很多大牛的博客里见到过大牛的新闻公告栏里那种动感十足的Flash时钟控件,先上图: 作为一名刚的接触博客菜鸟,自然免不了一番好奇.博客设置选项里翻来覆去找(以为是cnblogs自带的功能...),主题样式换了好几个,就是找不到带Flash样式的.不过倒是在设置里找到个“博客侧边栏公告”的东东,如图所示. 想起刚上大学那会大家在网上搜免费的QQ空间主题js代码的经历,感觉突破口就是它了.稍稍问了一下度姑娘,还真找到了解决方案,总结如下: 1.添加object标签 既然说支持

OpenWRT添加 crontab开机默认执行

[转载请注明出处:钱国正专栏 http://blog.csdn.net/qianguozheng/article/details/37666829] OpenWRT系统默认已经添加了crond,只是没有配置默认配置参数,致使服务起不来. 主要步骤: 1. 修改启动脚本/etc/ini.d/cron /etc/rc.d/S50cron为/etc/ini.d/cron的链接 <span style="font-size:18px;">#!/bin/sh /etc/rc.comm

Linux系统添加虚拟IP(Suse linux为例)

之前有提到Windows服务器添加多个虚拟IP的方法,只需要用图形化界面就可以了,但是Linux服务器就没那么简单.所以总结了这么一篇教程,记录一下如何在Linux服务器上添加虚拟IP. 1)以Root权限登录,或者登陆以后su - 获取root权限. 2)跳转到Network设置的位置: cd /etc/sysconfig/network-scripts 3)查看一下现有的网络适配器有哪些: ls ifcfg-eth* 可以看到一个或一些类似于: ifcfg-eth-id-12:34:56:7

OpenWRT添加模块 Makefile和Config.in

添加模块编译 在网上找了一下,很多关于编译Openwrt系统的资料,不过这些事情芯片厂商提供的开发包都已经办得妥妥了,但是没有找到系统介绍的资料,添加一个包的介绍有不多,其中有两个很有参考价值: http://blog.csdn.net/lj627889343/article/details/7997463 http://kamikaze.openwrt.org/docs/openwrt.html#x1-460002.1.2 详细步骤如下: 在package目录下创建模块目录my_module,

STM32学习笔记10(实时时钟RTC)

对于单片机转ARM的同学来说,RTC可能比较少接触.提到实时时钟,更经常想到的是DS1302.当然,在STM32里,自己一个CPU已经足够,不需要DS1302. 实际上,RTC就只一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器.因为它掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据.我们在本期教程中将详细讲述RTC原理及例程,以引导大家顺利进入RTC的世界. 1.STM32的RTC模块 RTC模块之所以具有实时时钟功能,是因为它内部维

OpenWrt 添加usb驱动及相关脚本

第一步,添加内核相关支持 编译openwrt支持USB自动mount功能 make menuconfig 1). 添加USB相关支持 Kernel modules -> USB Support -> <*> kmod-usb-core. Kernel modules -> USB Support -> <*> kmod-usb-ohci. Kernel modules -> USB Support -> <*> kmod-usb-uh

OpenWrt添加启动脚本

1.在 /etc/init.d 目录下建立文件 vi silabs #!/bin/sh /etc/rc.common # Copyright (C) 2006 OpenWrt.org START=93 start() { # create node if needed insmod /lib/modules/silabs_fxs_3217x_drv_mod.ko } 2.在/etc/rc.d目录下建立链接文件: ln -s /etc/init.d/silabs /etc/rc.d/S93sila

openwrt 添加 802.1x客户端njit

1.修改feed的配置文件 feeds.conf.default 添加下面两句: src-svn njit https://github.com/liuqun/openwrt-clients/trunk/njit      src-svn scut https://github.com/liuqun/openwrt-clients/trunk/scut 2.执行命令 ./scripts/feeds update -a ./scripts/feeds install -a 3.在make menu

openwrt添加自动启动项

在/etc/init.d下添加文件my-plugin #!/bin/sh /etc/rc.common # /etc/init.d/my-plugin start() { sh /root/userinfo/userinfo.sh } stop() { } 建立连接 ln -s /etc/init.d/my-plugin /etc/rc.d/S50my-plugin