日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
深度解析:LinuxUboot的移植流程簡(jiǎn)介(linuxuboot的移植過(guò)程)

在嵌入式領(lǐng)域中,Uboot(Universal Bootloader)是一個(gè)非常重要的啟動(dòng)加載程序。它主要運(yùn)行在ROM或FLASH上,用來(lái)加載操作系統(tǒng)內(nèi)核和系統(tǒng)所需的驅(qū)動(dòng)程序等。Uboot的移植對(duì)于嵌入式設(shè)備的開(kāi)發(fā)和調(diào)試有著至關(guān)重要的作用。本文將詳細(xì)介紹Linux Uboot移植的流程和注意事項(xiàng)。

一、準(zhǔn)備工作

在進(jìn)行移植之前,需要先準(zhǔn)備好以下幾個(gè)方面的工作:

1.交叉編譯器:Uboot是通過(guò)交叉編譯器來(lái)生成目標(biāo)平臺(tái)上的可執(zhí)行文件的。因此,需要先下載適用于目標(biāo)平臺(tái)的交叉編譯器,并配置好環(huán)境變量。

2.目標(biāo)設(shè)備的硬件資料:包括處理器型號(hào)、內(nèi)存大小、flash信息等。這些資料對(duì)于Uboot的配置以及設(shè)備樹(shù)(Device Tree)的編寫(xiě)都有著很大的作用。

3.Uboot源代碼:可以通過(guò)官網(wǎng)下載最新的Uboot源代碼。

二、移植流程

1.配置Uboot

Uboot的配置主要有兩種方法:一種是通過(guò)make menuconfig界面進(jìn)行交互式配置,另一種是通過(guò)手動(dòng)編輯配置文件進(jìn)行配置。如果已經(jīng)準(zhǔn)備好了目標(biāo)設(shè)備的硬件資料,可以直接進(jìn)行交互式配置。

在Uboot的主目錄下,執(zhí)行make menuconfig命令可以進(jìn)入配置界面。在該界面中可以進(jìn)行如下幾個(gè)配置:

(1)配置編譯器:需要根據(jù)交叉編譯器的路徑設(shè)置編譯器的交叉編譯前綴。

(2)配置目標(biāo)平臺(tái):根據(jù)目標(biāo)平臺(tái)的處理器型號(hào)設(shè)置對(duì)應(yīng)的CPU類(lèi)型、內(nèi)核啟動(dòng)地址、內(nèi)存大小等。

(3)配置Flash:根據(jù)目標(biāo)設(shè)備的Flash情況,設(shè)置分區(qū)信息、Flash大小等。

(4)配置串口信息:設(shè)置用于串口輸出的波特率、校驗(yàn)位等。

(5)配置網(wǎng)絡(luò)支持:如果需要在Uboot中啟用網(wǎng)絡(luò)支持,則需要按照實(shí)際情況設(shè)置網(wǎng)絡(luò)協(xié)議類(lèi)型和網(wǎng)絡(luò)接口等。

2.生成Uboot可執(zhí)行文件

完成上述配置后,執(zhí)行make命令即可生成Uboot的可執(zhí)行文件(u-boot.bin)。生成的文件可以通過(guò)串口燒錄到目標(biāo)設(shè)備的Flash中。

3.編寫(xiě)設(shè)備樹(shù)

設(shè)備樹(shù)(Device Tree)是一種用來(lái)描述系統(tǒng)硬件信息的數(shù)據(jù)結(jié)構(gòu)。它是一個(gè)以.dts(Device Tree Source)為后綴名的文本文件。在Uboot中,設(shè)備樹(shù)可以用來(lái)描述系統(tǒng)的硬件信息,以幫助內(nèi)核在啟動(dòng)時(shí)正確識(shí)別硬件設(shè)備。

編寫(xiě)設(shè)備樹(shù)需要針對(duì)目標(biāo)設(shè)備的硬件情況進(jìn)行描述,包括CPU、內(nèi)存、Flash等。在設(shè)備樹(shù)中還可以定義設(shè)備驅(qū)動(dòng)、中斷控制器等。

設(shè)備樹(shù)的編寫(xiě)可以使用DTC(Device Tree Compiler)工具進(jìn)行編譯。編譯后會(huì)生成以.dtb(Device Tree Binary)為后綴名的二進(jìn)制文件。

4.燒錄設(shè)備樹(shù)和內(nèi)核

完成設(shè)備樹(shù)的編寫(xiě)后,需要將設(shè)備樹(shù)和內(nèi)核一起燒錄到目標(biāo)設(shè)備中。具體方法可以根據(jù)設(shè)備的Flash信息進(jìn)行選擇,可以將設(shè)備樹(shù)、內(nèi)核和Uboot的可執(zhí)行文件一起燒錄到FLASH中,也可以通過(guò)tftp等方式進(jìn)行燒錄。

5.調(diào)試和測(cè)試

完成燒錄后,可以通過(guò)串口調(diào)試工具對(duì)設(shè)備進(jìn)行調(diào)試和測(cè)試。如果出現(xiàn)問(wèn)題,可以查看調(diào)試信息來(lái)進(jìn)行排查和解決。

三、注意事項(xiàng)

在進(jìn)行Uboot的移植時(shí),需要注意以下幾個(gè)方面:

1.設(shè)備硬件資料:在進(jìn)行Uboot的配置和設(shè)備樹(shù)的編寫(xiě)時(shí)需要準(zhǔn)確地了解目標(biāo)設(shè)備的硬件資料。如果硬件資料不準(zhǔn)確或者錯(cuò)誤,可能會(huì)出現(xiàn)啟動(dòng)失敗等問(wèn)題。

2.交叉編譯器:需要選擇適合目標(biāo)平臺(tái)的交叉編譯器,并設(shè)置好環(huán)境變量。

3.Uboot的配置:需要按照實(shí)際情況進(jìn)行配置,尤其是分區(qū)信息和Flash大小等。

4.設(shè)備樹(shù):設(shè)備樹(shù)需要準(zhǔn)確地描述系統(tǒng)硬件信息,可以參考官方文檔和其他相關(guān)資料進(jìn)行編寫(xiě)。

5.調(diào)試和測(cè)試:移植完成后需要進(jìn)行充分的調(diào)試和測(cè)試,以確保系統(tǒng)的穩(wěn)定性和可靠性。

在進(jìn)行Linux Uboot移植的過(guò)程中,需要仔細(xì)進(jìn)行各項(xiàng)配置和準(zhǔn)備工作,以確保系統(tǒng)的正確性和可靠性。只有充分理解和掌握Uboot的移植流程和注意事項(xiàng),才能為嵌入式設(shè)備的開(kāi)發(fā)和調(diào)試提供保障。

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

為什么需要移植uboot,還有uboot的作用僅僅是引導(dǎo)嗎

uboot可以再很多種cpu架構(gòu)上運(yùn)行,同時(shí)也支持很多開(kāi)發(fā)板,但是每種cpu架構(gòu)之間有差別,或者開(kāi)發(fā)板的資源不同,假如在某款開(kāi)發(fā)板上能正常引導(dǎo)啟動(dòng)操作系統(tǒng)的話(huà),并不意味著在其他款就能引導(dǎo)啟動(dòng),建立一款統(tǒng)一的bootloader幾乎是不可能的,但是經(jīng)過(guò)大師們的努力,能夠?qū)崿F(xiàn)通過(guò)簡(jiǎn)單的配置改動(dòng),就可以實(shí)現(xiàn)引導(dǎo)啟動(dòng)很多操作系統(tǒng)(也就是bootloader移植)(uboot是bootloader中的一種,因?yàn)槠湓创a是公開(kāi)的,廣受歡迎)

uboot不僅引導(dǎo)linux,還初始化開(kāi)發(fā)板上的其他組件,如flash,serial,led,vfd等板上的設(shè)備,這個(gè)也是UBOOT中改的比較多的,有什么組件初始化什么,所以有移植一說(shuō),即改成適合自己的開(kāi)發(fā)板~~~。

打個(gè)簡(jiǎn)單比方,你用的是WINBOND的FLASH,我用的是Spanion的FLASH,我拿你的代碼過(guò)來(lái),F(xiàn)LASH是不能正常工作的

linux系統(tǒng)如何傳遞信息給uboot

#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)盤(pán)-名字為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)盤(pán)文件

***********************

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)盤(pán)到處

Uboot > setenv bootargs root=/dev/ram rw initrd=0x,ramdisk_size=15360 console=ttyS0,mem=32M

Uboot > bootm

如上是通過(guò)tftp直接將內(nèi)核文件uImage和RAM啟動(dòng)盤(pán)加載到內(nèi)存中,然后運(yùn)行,下面講講如何

將這兩個(gè)文件固化到Flash中,然后通過(guò)Flash進(jìn)行加載啟動(dòng):

1)將RAM啟動(dòng)盤(pán)固化到c為起始地址的Flash中

U-Boot > tftpPATH/ramdisk-rmk7

U-Boot > cp.bcramdisk_size

2)將uImage內(nèi)核鏡像固陸衫化到緊跟RAM盤(pán)存儲(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ù)壓縮出來(lái)的文件不能被gzip-1.0.3版本的gunzip識(shí)別,所以linux-2.4.19-rmk7

內(nèi)核自解壓的功能等于不能使用,默認(rèn)值ZTEXTADDR= 0x

表示不使用。(只能通過(guò)uBoot的gunzip解壓加載)

***********************************************

//uImage存放地址= 0x

***********************************************

mkimage -A arm -O linux -C gzip -a 0xe 0xd linux.bin.gz uImage

-A:CPU類(lèi)型

-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)過(guò)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ù)后,通過(guò)

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系統(tǒng)啟動(dòng)所需要5個(gè)參數(shù)的傳遞,至此uBoot的工作已經(jīng)結(jié)束

Linux啟動(dòng)后U-Boot就基本沒(méi)有用了。U-Boot將一些信息傳給Linux,纖薯然后引導(dǎo)Linux。

不知道你的U-Boot能不能進(jìn)入命毀擾者令行界面?你可以修改Linux的MTD分區(qū),將新的Linux和文件系統(tǒng)燒寫(xiě)在其他的MTD分李哪區(qū),然后在U-Boot中引導(dǎo)新的linux和文件系統(tǒng)。

uboot移植問(wèn)題: ERROR: common/libcommon.a(crc.o) uses VFP instructions, whereas u-boot does not

個(gè)人認(rèn)為是版本兼容性問(wèn)題

linux uboot的移植過(guò)程的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux uboot的移植過(guò)程,深度解析:Linux Uboot的移植流程簡(jiǎn)介,為什么需要移植uboot,還有uboot的作用僅僅是引導(dǎo)嗎,linux系統(tǒng)如何傳遞信息給uboot,uboot移植問(wèn)題: ERROR: common/libcommon.a(crc.o) uses VFP instructions, whereas u-boot does not的信息別忘了在本站進(jìn)行查找喔。

香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專(zhuān)業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪(fǎng)!


當(dāng)前名稱(chēng):深度解析:LinuxUboot的移植流程簡(jiǎn)介(linuxuboot的移植過(guò)程)
本文URL:http://m.5511xx.com/article/cdgdeec.html