飛凌干貨丨OK-xx18 Android實(shí)時(shí)時(shí)鐘框架介紹
RTC(Real-TimeClock)實(shí)時(shí)時(shí)鐘為操作系統(tǒng)提供了一個(gè)可靠的時(shí)間,并且在斷電的情況下,RTC實(shí)時(shí)時(shí)鐘也可以通過(guò)電池供電,一直運(yùn)行下去。本文以O(shè)K-4418-C為例,介紹在Android實(shí)時(shí)時(shí)鐘框架。
整體流程介紹
由于實(shí)時(shí)時(shí)鐘子系統(tǒng),硬件抽象層、框架層、應(yīng)用層、谷歌的android開(kāi)發(fā)包都已經(jīng)做好,因此此接口的主要設(shè)計(jì)工作在于rx8010芯片的驅(qū)動(dòng)的實(shí)現(xiàn),包括芯片的初始化及配置時(shí)間,讀取時(shí)間及接入實(shí)時(shí)時(shí)鐘子系統(tǒng)等功能。
板子上電以后,內(nèi)核驅(qū)動(dòng)會(huì)初始化rtc芯片rx8010,并生成/dev/rtc0設(shè)備文件,注冊(cè)其設(shè)置時(shí)間等操作函數(shù)。
進(jìn)入android系統(tǒng)后,點(diǎn)擊設(shè)置界面的設(shè)置時(shí)間,應(yīng)用程序會(huì)調(diào)用框架層鬧鐘管理服務(wù)的設(shè)置時(shí)間的接口,框架層會(huì)調(diào)用硬件抽象層的設(shè)置時(shí)間接口,硬件抽象層會(huì)打開(kāi)/dev/rtc0設(shè)備文件并調(diào)用其ioctl函數(shù),內(nèi)核層實(shí)時(shí)時(shí)鐘子系統(tǒng)將調(diào)用實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)的設(shè)置時(shí)間函數(shù),內(nèi)核驅(qū)動(dòng)層實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)調(diào)用設(shè)置時(shí)間的函數(shù),設(shè)置實(shí)時(shí)時(shí)鐘芯片的對(duì)應(yīng)寄存器。
流程圖說(shuō)明
成/dev/rtc0設(shè)備文件,注冊(cè)其設(shè)置時(shí)間等操作函數(shù)。進(jìn)入android系統(tǒng)后,點(diǎn)擊設(shè)置界面的設(shè)置時(shí)間,應(yīng)用程序會(huì)調(diào)用框架層鬧鐘管理服務(wù)的設(shè)置時(shí)間的接口,框架層會(huì)調(diào)用硬件抽象層的設(shè)置時(shí)間接口,硬件抽象層會(huì)打開(kāi)/dev/rtc0設(shè)備文件并調(diào)用其ioctl函數(shù),內(nèi)核層實(shí)時(shí)時(shí)鐘子系統(tǒng)將調(diào)用實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)的設(shè)置時(shí)間函數(shù),內(nèi)核驅(qū)動(dòng)層實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)調(diào)用設(shè)置時(shí)間的函數(shù),設(shè)置實(shí)時(shí)時(shí)鐘芯片的對(duì)應(yīng)寄存器。
基本邏輯圖如下:
板子上電以后,內(nèi)核驅(qū)動(dòng)會(huì)初始化rtc芯片rx8010,并生成/dev/rtc0設(shè)備文件,注冊(cè)其設(shè)置時(shí)間等操作函數(shù)。
進(jìn)入android系統(tǒng)后,點(diǎn)擊設(shè)置界面的設(shè)置時(shí)間,應(yīng)用程序會(huì)調(diào)用框架層鬧鐘管理服務(wù)的設(shè)置時(shí)間的接口,框架層會(huì)調(diào)用硬件抽象層的設(shè)置時(shí)間接口,硬件抽象層會(huì)打開(kāi)/dev/rtc0設(shè)備文件并調(diào)用其ioctl函數(shù),內(nèi)核層實(shí)時(shí)時(shí)鐘子系統(tǒng)將調(diào)用實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)的設(shè)置時(shí)間函數(shù),內(nèi)核驅(qū)動(dòng)層實(shí)時(shí)時(shí)鐘芯片驅(qū)動(dòng)調(diào)用設(shè)置時(shí)間的函數(shù),設(shè)置實(shí)時(shí)時(shí)鐘芯片的對(duì)應(yīng)寄存器。
流程圖中各個(gè)部分涉及到的函數(shù)名稱及功能
■ 應(yīng)用層函數(shù):
packages/apps/Settings/src/com/android/settings/DateTimeSettings.java文件
static void setTime(Context context, int hourOfDay, int minute)
功能:設(shè)置Calendar的時(shí)分秒毫秒信息,并調(diào)用系統(tǒng)的鬧鐘服務(wù)的設(shè)置時(shí)間setTime的接口。
■ 系統(tǒng)框架層函數(shù):
./frameworks/base/services/core/java/com/android/server/AlarmManagerService.java文件
public boolean setTime(long millis)
功能:檢查權(quán)限及是否存在alarm驅(qū)動(dòng),并調(diào)用setKernelTime(mNativeData,millis)接口。
■ 硬件抽象層函數(shù):
frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp文件
static jint android_server_AlarmManagerService_setKernelTime(JNIEnv*,jobject, jlong nativeData, jlong millis)
功能:將毫秒轉(zhuǎn)換成秒及微秒并調(diào)用setTime接口。
frameworks/base/services/core/jni/com_android_server_AlarmManagerService.cpp文件
int AlarmImplTimerFd::setTime(struct timeval *tv)
功能:打開(kāi)的內(nèi)核生成的/dev/rtc0設(shè)備文件,并調(diào)用其ioctl接口。
■ 內(nèi)核驅(qū)動(dòng)層函數(shù):
linux/kernel/kernel-3.4.39/drivers/rtc/rtc-dev.c文件
static long rtc_dev_ioctl(struct file *file,
unsigned int cmd, unsigned long arg)
功能:根據(jù)ioctl的相關(guān)條件做出對(duì)應(yīng)的rtc函數(shù)的調(diào)用。
linux/kernel/kernel-3.4.39/drivers/rtc/interface.c文件
int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm)
功能:調(diào)用rtc設(shè)備操作函數(shù)的set_time函數(shù)。
linux/kernel/kernel-3.4.39/drivers/rtc/rtc-rx8010.c文件
static int rx8010_probe(struct i2c_client *client, const structi2c_device_id *id)
功能:初始化rx8010芯片,并注冊(cè)生成/dev/rtc0設(shè)備。
linux/kernel/kernel-3.4.39/drivers/rtc/rtc-rx8010.c文件
static int rx8010_set_time(struct device *dev, struct rtc_time *dt)
功能:此為rtc操作函數(shù)set_time對(duì)應(yīng)的函數(shù),作用是將時(shí)間值寫(xiě)入rx8010寄存器。
實(shí)際運(yùn)行效果
板子上電,系統(tǒng)起來(lái)以后,選擇“ ”->“Settings”->“Date&time”,在這里可以更改日期和時(shí)間,并且在您斷電之后時(shí)間仍可同步更新(確保板子上已經(jīng)安裝了紐扣電池)。
注意:此步測(cè)試一定要先去掉“Automaticdate & time”以及“Automatictime zone”兩部分的勾選,否則無(wú)法準(zhǔn)確測(cè)試RTC功能,如下:
點(diǎn)擊“set date”和“set time”設(shè)置好之后,就可以給板子斷電再上電,再次進(jìn)入時(shí)間設(shè)置界面,就會(huì)看到時(shí)間已經(jīng)同步更新了。
相關(guān)產(chǎn)品 >
-
OK4418/6818-C開(kāi)發(fā)板
飛凌提供S5P4418/s5p6818,S5P4418/s5p6818開(kāi)發(fā)板,4418/6818開(kāi)發(fā)板,s5p4418/s5p6818開(kāi)發(fā)板解決方案,S5p4418/s5p6818多媒體解決方案,s5p4418硬件解決方案,更多S5P4418/s5p6818方案敬請(qǐng)聯(lián)系飛凌嵌入式。Cortex-A9 四核S5P4418/6818 支持Android5.1.1,Linux3.4.39、QT4.8.6等系統(tǒng) 了解詳情 -
OK3568-C開(kāi)發(fā)板
強(qiáng)而穩(wěn),國(guó)產(chǎn)芯,1Tops算力,多路高速接口|飛凌RK3568系列RK3568開(kāi)發(fā)板基于國(guó)產(chǎn)工業(yè)級(jí)AI處理器RK3568四核64位Cortex-A55 處理器設(shè)計(jì)。RK3568作為國(guó)產(chǎn)化高性能處理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU達(dá)到1Tops,飛凌RK3568系列核心板提供瑞芯微RK3568規(guī)格書(shū)_datasheet_數(shù)據(jù)手冊(cè)_原理圖等,