當前位置:首頁 » 自動清洗 » uboot下怎樣獲取系統時間
擴展閱讀
買電腦怎樣用京東白條 2025-06-18 20:32:00
臉部發紅發癢什麼原因 2025-06-18 19:52:22

uboot下怎樣獲取系統時間

發布時間: 2022-10-08 05:12:25

『壹』 進uboot,主機和虛擬機可以相互ping通,開發板也可以ping通主機和虛擬機,但是主機和虛擬機ping不通開發板

主機和虛擬機能相互ping通是因為主機與虛擬機都開啟了對應的進程(或線程,不清楚)等待ping命令的到來,而在uboot命令輸入狀態下,當使用ping命令時,實際上是uboot先根據你輸入的IP地址發送一個ICMP回送請求和回答報文到對應主機,然後再等待一段時間,如果在這段時間後主機沒有響應,則顯示ping不通,主機如果在這段時間內發送了回答報文則能ping通。可以通過追蹤程序的調用來查看該過程。
你使用主機或虛擬機ping開發板時,開發板正處於main_loop循環中(等待用戶輸入命令),根本沒有對應的程序或中斷(uboot中一般不使用中斷)來檢測主機的ping命令,當然ping不通。
只要開發板能ping通主機就可以使用網線下載linux內核映像或文件系統了。

『貳』 我的友善之臂micro2440開發板,燒寫uboot和Linux內核後我想設置nfs網路根文件系統,但是一直有問題。

linux-2.6.35在fs2410開發板啟動後,通過nfs掛載文件系統,但是rtc不能用,也會在掛載文件系統之前列印如下提示信息:

TCP cubic registered

NET: Registered protocol family 1

RPC: Registered udp transport mole.

RPC: Registered tcp transport mole.

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)

IP-Config: Complete:

device=eth0, addr=192.168.20.253, mask=255.255.255.0, gw=192.168.20.1,
host=thomas_fs2410, domain=, nis-domain=(none),
bootserver=192.168.20.192, rootserver=192.168.20.192, rootpath=
Looking up port of RPC 100003/2 on 192.168.20.192
Looking up port of RPC 100005/1 on 192.168.20.192
VFS: Mounted root (nfs filesystem).
Mounted devfs on /dev
Freeing init memory: 184K

解決方案:

1. 內核配置選項

--- Real Time Clock
[*] Set system time from RTC on startup and resume
(rtc0) RTC used to set the system time
[ ] RTC debug support
*** RTC interfaces ***
[*] /sys/class/rtc/rtcN (sysfs)
[*] /dev/rtcN (character devices)
[ ] RTC UIE emulation on dev interface
*** on-CPU RTC drivers ***
<*> Samsung S3C series SoC RTC

2. linux kernel 中 已經支持S3C2410的RTC,但是並沒有添加到平台設備初始化數組中,所以系統啟動時並不會初始化這一部分,需要修改文件mach-smdk.c

static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_ohci,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_rtc, //新增代碼
};

3. 創建設備節點,在文件系統/dev目錄下執行:

sudo mknod rtc c 10 135

4. 重新編譯內核,查看啟動信息

S3C24XX RTC, (c) 2004,2006 Simtec Electronics
s3c-rtc s3c2410-rtc: rtc disabled, re-enabling
s3c-rtc s3c2410-rtc: rtc core: registered s3c as rtc0

這里說明rtc驅動起來可以正常工作了
S3C2410 Watchdog Timer, (c) 2004 Simtec Electronics
s3c2410-wdt s3c2410-wdt: watchdog inactive, reset disabled, irq enabled
No device for DAI UDA134X
No device for DAI s3c24xx-i2s
ALSA device list:
No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
s3c-rtc s3c2410-rtc: hctosys: invalid date/time

以上信息說明當前 RTC 時間invalid , RTC 初始時間為 Wed Dec 31 23:59:59 1969 ;

從內核函數 int rtc_valid_tm(struct rtc_time *tm) ,可以看出,當 year 小於 1970 時,認為是時間 invalid ,函數返回 -EINVAL ;

drivers/rtc/rtc-lib.c

/*
* Does the rtc_time represent a valid date/time?
*/
int rtc_valid_tm(struct rtc_time *tm)
{
if (tm->tm_year < 70
|| ((unsigned)tm->tm_mon) >= 12
|| tm->tm_mday < 1
|| tm->tm_mday > rtc_month_days(tm->tm_mon, tm->tm_year + 1900)
|| ((unsigned)tm->tm_hour) >= 24
|| ((unsigned)tm->tm_min) >= 60
|| ((unsigned)tm->tm_sec) >= 60)
return -EINVAL;

return 0;
}
EXPORT_SYMBOL(rtc_valid_tm);

下面來驗證一下這個想法

# hwclock

Wed Dec 31 23:59:59 1969 0.000000 seconds

# date

Thu Jan 1 00:06:58 UTC 1970

系統時間是通過 date 來設置的, RTC 時間是通過 hwclock 來設置的。開機時系統時間首先通過 RTC 來獲得,RTC沒有設置時,系統時間也會使用Wed Dec 31 23:59:59 1969。

# hwclock --help

BusyBox v1.9.2 (2008-04-01 21:32:34 CST) multi-call binary

Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-f FILE]

Query and set a hardware clock (RTC)

Options:

-r Read hardware clock and print result

-s Set the system time from the hardware clock

-w Set the hardware clock to the system time

-u The hardware clock is kept in coordinated universal time

-l The hardware clock is kept in local time

-f FILE Use the specified clock (e.g. /dev/rtc2)

# hwclock -s

hwclock: settimeofday() failed: Invalid argument

# hwclock -w

s3c2410-rtc s3c2410-rtc: rtc only supports 100 years

hwclock: RTC_SET_TIME: Invalid argument

以上錯誤信息都是因為 year 設置不當引起的。沒有設置 RTC , RTC 也不會啟動計時。

下面首先設置正確的系統時間,然後將系統時間傳遞給 RTC 。

# date 040612282008.20

Sun Apr 6 12:28:20 UTC 2008

# hwclock -w

# hwclock

Sun Apr 6 12:29:01 2008 0.000000 seconds

# hwclock

Sun Apr 6 12:30:15 2008 0.000000 seconds

Ok , RTC 開始工作了!

為了使系統時間和 RTC 時間同步,可以在初始化文件中添加命令

Hwclock –s

使每次開機時讀取 RTC 時間,並同步給系統時間。

在 etc/init.d/rcS 中添加

/bin/hwclock -s

時間設置的相關命令(轉載)

1. 在虛擬終端中使用date 命令來查看和設置系統時間
查看系統時鍾的操作:
# date

設置系統時鍾的操作:
# date 091713272003.30

通用的設置格式:
# date 月日時分年. 秒

2. 使用hwclock 或clock 命令查看和設置硬體時鍾
查看硬體時鍾的操作:
# hwclock --show 或
# clock --show
2003年 09月 17日 星期三 13 時24 分11 秒 -0.482735 seconds

設置硬體時鍾的操作:
# hwclock --set --date="09/17/2003 13:26:00"

或者
# clock --set --date="09/17/2003 13:26:00"

通用的設置格式:hwclock/clock --set --date=「 月/ 日/ 年時:分:秒」 。

3. 同步系統時鍾和硬體時鍾

Linux 系統( 筆者使用的是Red Hat 8.0 ,其它系統沒有做過實驗) 默認重啟後,硬體時鍾和系統時鍾同步。如果不大方便重新啟動的話( 伺服器通常很少重啟) ,使用clock 或hwclock 命令來同步系統時鍾和硬體時鍾。

硬體時鍾與系統時鍾同步:
# hwclock --hctosys

或者
# clock --hctosys

上面命令中,--hctosys 表示Hardware Clock to SYStem clock 。

系統時鍾和硬體時鍾同步:
# hwclock --systohc

或者
# clock --systohc

使用圖形化系統設置工具設置時間

參考:http://blogold.chinaunix.net/u2/63560/showart_518707.html

『叄』 怎樣修改uboot源碼,更改uboot等待輸入時間10s

1. 去掉不必要的硬體初始化,例如網路,usb等。 2. 縮寫kernel image的大校 3. 提高ARM cpu cache 4. ECC 校驗去掉一些。 5,使用硬體解碼。

『肆』 關於linux 下 rtc的問題,求高手解答

系統時間一般是保存在時鍾寄存器中的,由於絕對時間值比較大,所以寄存器中都是放一個相對時間值,即系統時間(日期+時間)減去一個固定的值(多數是1900年,也有的用1970年)後的秒數。取系統時間時會再把這個值加回來,從而得到真正的系統時間。
uboot中取時間的函數是將時鍾寄存器中的值取出後,加上那個固定值(如1900年),直接返回,如果時間寄存器中放的是12年的秒數,在u-boot中就會顯示是1912年。
linux kernel計算日期中有點不同,在算出年號後(加上1900年),接著判斷,年號<=1969,再加上100,所以同樣時間寄存器值將會校正為2012了。
你的系統顯示不一致,可能原因是u-boot和kernel源代碼移植不完整,u-boot和kernel實時時鍾的存儲和計算策略不一致。