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

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

新聞中心

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

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

一、準備工作

在進行移植之前,需要先準備好以下幾個方面的工作:

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

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

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

二、移植流程

1.配置Uboot

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

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

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

(2)配置目標平臺:根據(jù)目標平臺的處理器型號設置對應的CPU類型、內(nèi)核啟動地址、內(nèi)存大小等。

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

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

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

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

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

3.編寫設備樹

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

編寫設備樹需要針對目標設備的硬件情況進行描述,包括CPU、內(nèi)存、Flash等。在設備樹中還可以定義設備驅(qū)動、中斷控制器等。

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

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

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

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

完成燒錄后,可以通過串口調(diào)試工具對設備進行調(diào)試和測試。如果出現(xiàn)問題,可以查看調(diào)試信息來進行排查和解決。

三、注意事項

在進行Uboot的移植時,需要注意以下幾個方面:

1.設備硬件資料:在進行Uboot的配置和設備樹的編寫時需要準確地了解目標設備的硬件資料。如果硬件資料不準確或者錯誤,可能會出現(xiàn)啟動失敗等問題。

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

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

4.設備樹:設備樹需要準確地描述系統(tǒng)硬件信息,可以參考官方文檔和其他相關資料進行編寫。

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

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

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

為什么需要移植uboot,還有uboot的作用僅僅是引導嗎

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

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

打個簡單比方,你用的是WINBOND的FLASH,我用的是Spanion的FLASH,我拿你的代碼過來,F(xiàn)LASH是不能正常工作的

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

#make at91rm9200dk_config

#make oldcnofig //使用dk板默認配置

如果想定制,可以繼續(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啟動壓縮內(nèi)核uImage,默認運行地址為0x,

還有一個RAM啟動盤-名字為ramdisk-rmk7,在普通的PC機上叫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啟動盤文件

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

ramdisk-rmk7的默認運行地址為0x,

只要有上邊的兩個文件,Linux內(nèi)核就能夠正常的工作了。

uBoot中進行如下設置

Uboot > tftpuImage##########裝載內(nèi)核到內(nèi)存處

Uboot > tftpramdisk-rmk ##########裝載RAM啟動盤到處

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

Uboot > bootm

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

將這兩個文件固化到Flash中,然后通過Flash進行加載啟動:

1)將RAM啟動盤固化到c為起始地址的Flash中

U-Boot > tftpPATH/ramdisk-rmk7

U-Boot > cp.bcramdisk_size

2)將uImage內(nèi)核鏡像固陸衫化到緊跟RAM盤存儲空間之后

U-Boot > tftpPATH/uImage

U-Boot > cp.bc+ramdisk_size image_size

3)存儲之后,就要配置uBoot啟動加載參數(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)核運行虛擬地址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識別,所以linux-2.4.19-rmk7

內(nèi)核自解壓的功能等于不能使用,默認值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ù)將檢驗存放到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)

如果頭部各個域值和crc合法,那么do_bootm將調(diào)用如下gunzip解壓函數(shù)對

0x+sizeof(image_header_t)地址處的壓縮內(nèi)核進行解壓:

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ù)長度len = ntohl(hdr->ih_size );

解壓完成后將會存儲解壓后數(shù)據(jù)的實際大小

壓縮的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)核運行所需的5個參數(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)啟動所需要5個參數(shù)的傳遞,至此uBoot的工作已經(jīng)結(jié)束

Linux啟動后U-Boot就基本沒有用了。U-Boot將一些信息傳給Linux,纖薯然后引導Linux。

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

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

個人認為是版本兼容性問題

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

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


網(wǎng)站欄目:深度解析:LinuxUboot的移植流程簡介(linuxuboot的移植過程)
標題路徑:http://m.5511xx.com/article/cdgdeec.html