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 除了初始化以外就是搬運程...