uboot中rtc頂層分析

2021-09-07 14:08:24 字數 2624 閱讀 8112

uboot一般不會要求開啟rtc,只是還是支援rtc以備特殊需求的。

底層驅動移植前面兩篇已經介紹。這裡介紹頂層的呼叫過程。頂層在uboot/common/cmd_date.c

/* * rtc, date & time support: get and set date & time

*/int mk_date (char , struct rtc_time );

int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char *ar**)

else

/* and write to rtc */

rcode = rtc_set (&tm);

if(rcode)

puts("## set date failed\n");

} else

}/* fall trough */

case 1: /* get date & time */

rcode = rtc_get (&tm);

if (rcode)

printf ("date: %4d-%02d-%02d (%sday) time: %2d:%02d:%02d\n",

tm.tm_year, tm.tm_mon, tm.tm_mday,

(tm.tm_wday<0 || tm.tm_wday>6) ?

"unknown " : reloc(weekdays[tm.tm_wday]),

tm.tm_hour, tm.tm_min, tm.tm_sec);

break;

default:

cmd_usage(cmdtp);

rcode = 1;

}/* switch back to original i2c bus */

i2c_set_bus(old_bus);

return rcode;/*

* ****** conversion of two-digit string with error checking

*/ static int cnvrt2 (char *str, int *valp)

else

if (len == 12)

tmp->tm_year = 100 * century + year;

} else if (len == 10)

switch (len)

tmp->tm_mon = val;

if (cnvrt2 (datestr+2, &val) ||

val > ((tmp->tm_mon==2) ? 29 : 31))

tmp->tm_mday = val;

if (cnvrt2 (datestr+4, &val) ||

val > 23)

tmp->tm_hour = val;

if (cnvrt2 (datestr+6, &val) ||

val > 59)

tmp->tm_min = val;

/* calculate day of week */

gregorianday (tmp);

return (0);

default:

break;

}return (-1);/*****************************************/

u_boot_cmd(

date, 2, 1, do_date,

「get/set/reset date & time」,

「[mmddhhmm[[cc]yy][.ss]]\ndate reset\n」

」 - without arguments: print date & time\n」

」 - with numeric argument: set the system date & time\n」

」 - with 『reset』 argument: reset the rtc」

); 這裡反向分析:

第一步是註冊 date命令

u_boot_cmd(

date, 2, 1, do_date,

「get/set/reset date & time」,

「[mmddhhmm[[cc]yy][.ss]]\ndate reset\n」

」 - without arguments: print date & time\n」

」 - with numeric argument: set the system date & time\n」

」 - with 『reset』 argument: reset the rtc」

); 這個命令就是rtc的控制命令了 呼叫的函式是 do_date

int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char *ar**)

能夠看到這命令是呼叫了rtc裡面註冊的rtc_reset、rtc_get、rtc_set

分為case1 :獲取當年的時間

case2 設定時間;

時間轉換函式mk_date 能夠將我們輸入的字串轉化成為時間的年月日 供rtc_set 配置下去去

openwrt頂層Makefile分析

openwrt 這裡主要介紹openwrt的主makefile,並未對各個目錄下的makefile和相關檔案進行介紹。在makefile裡是兩個主要的分支,由if語句根據openwrt build的值進行不同的處理。第乙個部分主要是執行編譯前的準備,第二個部分是執行編譯。開啟makefile檔案,可...

uboot分析 uboot啟動核心

u boot啟動核心概述 u boot啟動完成後,最終進入到main loop 迴圈中。若在bootdelay倒計時為0之前,u boot控制台有輸入,則進入命令解析 執行的迴圈 若控制台無輸入,u boot將啟動核心。u boot啟動核心可歸結為以下四個步驟 1 將核心搬移至ddr中 2 校驗核心...

u boot鏈結分析

乙個典型的嵌入式系統中,bootloader 放在nor flash或nand flash裡面,系統加電或復位後,首先執行這段 通常把bootloader 放在nor flash裡面,nand flash由於硬體原因不能隨機訪問,需要特殊的硬體支援機制。bootloader 除了初始化以外就是搬運程...