新聞中心
如何使用linux uboot打印系統(tǒng)時(shí)間?

創(chuàng)新互聯(lián)建站專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、聶榮網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站制作、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為聶榮等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在Linux系統(tǒng)中,Uboot是一個(gè)很重要的組件,它是個(gè)可移植的bootloader,主要用來引導(dǎo)操作系統(tǒng)的啟動(dòng)。在Uboot中,有很多自定義的指令可以幫助我們實(shí)現(xiàn)我們想要的功能。今天,我們來探討一下如何使用Uboot打印系統(tǒng)時(shí)間。
步驟一:配置串口
在我們開始之前,我們需要先在Uboot中配置串口,這樣我們才能通過串口打印輸出信息。具體步驟如下:
1. 我們需要在Uboot中找到串口配置文件。在Uboot的配置文件中,一般在“include/configs/”下面,可以找到與我們使用的板子相對(duì)應(yīng)的配置文件。
2. 打開配置文件,在文件中搜索“SERIAL_ PORT”,我們可以看到這是關(guān)于串口的配置。一般來說,我們需要配置對(duì)應(yīng)的串口設(shè)備號(hào)、波特率等參數(shù)。
3. 根據(jù)自己的需要進(jìn)行調(diào)整,在完成配置之后保存配置文件,重新編譯Uboot。
步驟二:在Uboot中打印系統(tǒng)時(shí)間
接下來,我們將使用Uboot提供的一些指令,來打印系統(tǒng)時(shí)間。具體步驟如下:
1. 在Uboot中進(jìn)入命令行界面??梢酝ㄟ^串口連接之后按下“Ctrl+C”進(jìn)入U(xiǎn)boot的命令行模式。
2. 然后,在命令行中輸入“printenv”,這將打印Uboot的環(huán)境變量。我們可以看到其中包含一些系統(tǒng)設(shè)置,比如bootargs(Linux內(nèi)核啟動(dòng)參數(shù))等。
3. 接下來,我們要使用Uboot提供的“date”命令來獲取系統(tǒng)當(dāng)前的時(shí)間。直接在命令行中輸入“date”,系統(tǒng)就會(huì)返回當(dāng)前的時(shí)間。
4. 如果你想獲取更詳細(xì)的時(shí)間信息,可以通過命令“date -u”來獲取UTC時(shí)間。這需要我們的板子已經(jīng)連接到了網(wǎng)絡(luò)。
5. 如果你希望在啟動(dòng)時(shí)自動(dòng)打印系統(tǒng)時(shí)間,可以在Uboot的啟動(dòng)腳本中添加打印時(shí)間的命令,比如“echo ‘current time:’ ; date”。
通過這些步驟,我們就可以很容易的在Uboot中打印系統(tǒng)時(shí)間。同時(shí),我們也可以在Uboot中利用其它自定義的指令,實(shí)現(xiàn)我們想要的功能。在操作Uboot時(shí),一定要小心謹(jǐn)慎,以免錯(cuò)誤操作導(dǎo)致系統(tǒng)崩潰。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220linux系統(tǒng)如何傳遞信息給uboot
建立一個(gè)裸分區(qū)保存所有你陵扮嘩想要的信息,尺行使得boot/kernel都有讀寫能力,我就缺乎是這么干的。
Linux啟動(dòng)后U-Boot就基本沒有用了。U-Boot將一些信息傳給Linux,纖薯然后引導(dǎo)Linux。
不知道你的U-Boot能不能進(jìn)入命毀擾者令行界面?你可以修改Linux的MTD分區(qū),將新的Linux和文件系統(tǒng)燒寫在其他的MTD分李哪區(qū),然后在U-Boot中引導(dǎo)新的linux和文件系統(tǒng)。
#make at91rm9200dk_config
#make oldcnofig //使用dk板默認(rèn)配置
如果想定制,可以繼續(xù)執(zhí)行
#make menuconfig
#make Image
#/usr/local/arm/2.95.3/bin/arm-linux-objcopy -O binary -S vmlinux linux.bin
#gzip -v9 linux.bin
#mkimage -A arm -O linux -C gzip -a 0xe 0xd linux.bin.gz uImage
這樣我們得到了Linux啟動(dòng)壓縮內(nèi)核uImage,默認(rèn)運(yùn)行地址為0x,
還有一個(gè)RAM啟動(dòng)盤-名字為ramdisk-rmk7,在普通的PC機(jī)上叫initrd-2.4.20-8.img,在
/boot/grub/menu.lst文件中,我們可以看到它的使用方法穗閉:
***********************
root (hd0,6)
kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/ ##########內(nèi)核文件
initrd /boot/initrd-2.4.20-8.img##########RAM啟動(dòng)盤文件
***********************
ramdisk-rmk7的默認(rèn)運(yùn)行地址為0x,
只要有上邊的兩個(gè)文件,Linux內(nèi)核就能夠正常的工作了。
uBoot中進(jìn)行如下設(shè)置
Uboot > tftpuImage##########裝載內(nèi)核到內(nèi)存處
Uboot > tftpramdisk-rmk ##########裝載RAM啟動(dòng)盤到處
Uboot > setenv bootargs root=/dev/ram rw initrd=0x,ramdisk_size=15360 console=ttyS0,mem=32M
Uboot > bootm
如上是通過tftp直接將內(nèi)核文件uImage和RAM啟動(dòng)盤加載到內(nèi)存中,然后運(yùn)行,下面講講如何
將這兩個(gè)文件固化到Flash中,然后通過Flash進(jìn)行加載啟動(dòng):
1)將RAM啟動(dòng)盤固化到c為起始地址的Flash中
U-Boot > tftpPATH/ramdisk-rmk7
U-Boot > cp.bcramdisk_size
2)將uImage內(nèi)核鏡像固陸衫化到緊跟RAM盤存儲(chǔ)空間之后
U-Boot > tftpPATH/uImage
U-Boot > cp.bc+ramdisk_size image_size
3)存儲(chǔ)之后,就要配置uBoot啟動(dòng)加載參數(shù)了
U-Boot > setenv ramdisk cp.b c00 ramdisk_size
U-Boot > setenv image cp.b c+ramdisk_sizeimage_size setenv boot bootm
U-Boot > setenv bootcmd run ramdisk\早族腔; run image\; run boot
U-Boot > saveenv
U-Boot > run bootcmd
*************************************************
arch/arm/Makefile
//內(nèi)核運(yùn)行虛擬地址TEXTADDR = 0xC
*************************************************
arch/arm/boot/Makefile
//內(nèi)核加載地址ZRELADDR = 0x
*************************************************
arch/arm/boot/compressed/Makefile
//自解壓程序地址ZTEXTADDR = 0x
(linux-2.4.19-rmk7內(nèi)核的自解壓函數(shù)gunzip位于
/lib/inflate.c中,為gzip-1.0.3版本,現(xiàn)在在PC上使用gzip
函數(shù)壓縮出來的文件不能被gzip-1.0.3版本的gunzip識(shí)別,所以linux-2.4.19-rmk7
內(nèi)核自解壓的功能等于不能使用,默認(rèn)值ZTEXTADDR= 0x
表示不使用。(只能通過uBoot的gunzip解壓加載)
)
***********************************************
//uImage存放地址= 0x
***********************************************
mkimage -A arm -O linux -C gzip -a 0xe 0xd linux.bin.gz uImage
-A:CPU類型
-O:操作系統(tǒng)
-C:采用的壓縮方式
-a:內(nèi)核加載地址
-e:內(nèi)核入口地址
***********************************************
uBoot的do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char *argv);
函數(shù)將檢驗(yàn)存放到0x地址處的經(jīng)過mkimage格式化的uImage數(shù)據(jù)的頭部
typedef struct image_header {
uint32_t ih_magic; /* Image Header Magic Number */
uint32_t ih_hcrc; /* Image Header CRC Checksum */
uint32_t ih_time; /* Image Creation Timestamp */
uint32_t ih_size; /* Image Data Size */
uint32_t ih_load; /* Data Load Address */
uint32_t ih_ep; /* Entry Point Address */
uint32_t ih_dcrc; /* Image Data CRC Checksum */
uint8_t ih_os; /* Operating System */
uint8_t ih_arch; /* CPU architecture */
uint8_t ih_type; /* Image Type */
uint8_t ih_comp; /* Compression Type */
uint8_t ih_name; /* Image Name */
}image_header_t;
(ih_ep值為0x,ih_load值為0x)
如果頭部各個(gè)域值和crc合法,那么do_bootm將調(diào)用如下gunzip解壓函數(shù)對(duì)
0x+sizeof(image_header_t)地址處的壓縮內(nèi)核進(jìn)行解壓:
gunzip((void*)ntohl(hdr->ih_load),0x400000,data,(int*)&len);
1.hdr->ih_load 為輸出數(shù)據(jù)地址0x
2.0x為gunzip解壓輸出數(shù)據(jù)上限值-4M
3.data為輸入數(shù)據(jù)地址data=0x+sizeof(image_header_t);
4.Len為輸入數(shù)據(jù)長(zhǎng)度len = ntohl(hdr->ih_size );
解壓完成后將會(huì)存儲(chǔ)解壓后數(shù)據(jù)的實(shí)際大小
壓縮的Linux內(nèi)核文件uImage,經(jīng)由gunzip解壓函數(shù)后,通過
do_bootm_linux (cmdtp, flag, argc, argv,addr, len_ptr, verify);
函數(shù)向Linux內(nèi)核傳遞內(nèi)核運(yùn)行所需的5個(gè)參數(shù)
kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))hdr->ih_ep ;
1.hdr->ih_ep 為0x
/*
* Linux Kernel Parameters:
* r3: ptr to board info data
* r4: initrd_start or 0 if no initrd
* r5: initrd_end – unused if r4 is 0
* r6: Start of command line string
* r7: End of command line string
*/
(*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
linux SD卡啟動(dòng)uboot不正常
通過dd命令制作鏡像, 是看不到寫入的鏡攔沖派像文件的。
能夠看到的,是鏡像文件里簡(jiǎn)賀面包判攜含的內(nèi)容。
linux uboot打印系統(tǒng)時(shí)間的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux uboot打印系統(tǒng)時(shí)間,Linux Uboot 打印系統(tǒng)時(shí)間的方法,linux系統(tǒng)如何傳遞信息給uboot,linux SD卡啟動(dòng)uboot不正常的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
本文題目:LinuxUboot打印系統(tǒng)時(shí)間的方法(linuxuboot打印系統(tǒng)時(shí)間)
文章位置:http://fisionsoft.com.cn/article/dpeispe.html


咨詢
建站咨詢
