導航:首頁 > 源碼編譯 > uboot編譯啟動

uboot編譯啟動

發布時間:2023-01-31 09:41:43

Ⅰ uboot編譯

把-MQ的編譯選項去掉試試

Ⅱ 怎麼使用 UBOOT 來啟動 rtems

在beagleboneblack上通過SD卡啟動成功:

  1. 編譯rtems代碼,生成二進制文件app.exe

  2. 在ubuntu下安裝u-boot-tools:

    sudo apt-get installu-boot-tools

  3. 運行make_rtems_app.sh app.exe,生成rtems-app.img

  4. 在SD卡根目錄新建 uEnv.txt文件

  5. 重新啟動即可

make_rtems_app.sh 文件內容如下:

executable=$1
app=rtems-app.img

base=`basename$executable`
arm-rtems4.12-obj$executable-Obinary./$base.bin
gzip-9-f./$base.bin
mkimage-Aarm-Ortems-Tkernel-a0x80000000-e0x80000000-nRTEMS-d./$base.bin.gz./$app
rm./$base.bin.gz

uEnv.txt 文件內容如下:

bootcmd=fatloadmmc00x80800000rtems-app.img;bootm0x80800000
uenvcmd=boot

Ⅲ uboot是什麼

U-Boot,全稱 Universal Boot Loader,是遵循GPL條款的開放源碼項目。U-Boot的作用是系統引導。U-Boot從FADSROM、8xxROM、PPCBOOT逐步發展演化而來。其源碼目錄、編譯形式與linux內核很相似,事實上,不少U-Boot源碼就是根據相應的Linux內核源程序進行簡化而形成的,尤其是一些設備的驅動程序,這從U-Boot源碼的注釋中能體現這一點。

拓展資料:

選擇U-Boot的理由:

① 開放源碼;

② 支持多種嵌入式操作系統內核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;

③ 支持多個處理器系列,如PowerPC、ARM、x86、MIPS;

④ 較高的可靠性和穩定性;

⑤ 高度靈活的功能設置,適合U-Boot調試、操作系統不同引導要求、產品發布等;

⑥ 豐富的設備驅動源碼,如串口、乙太網、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;

⑦ 較為豐富的開發調試文檔與強大的網路技術支持。

Ⅳ ubuntu 編譯uboot需要哪些工具,哎,新手,詳細點哦,親

1.首先安裝基本編譯環境:sudo apt-get install build-essential
2:先把交叉編譯環境包放到你的共享目錄,(我這里的版本是:arm-linux-gcc-4.4.3.tar.gz)
3:進行解壓 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C (要解壓的路徑)
比如:tar zxvf arm-linux-gcc-4.4.3.tar.gz -C ~/ (root 用戶的工作目錄)

4:然後設置環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

5:要想系統啟動自動載入環境變數:
1:普通用戶:vim .bashrc 在最後添加你的環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

2:root用戶:vim .bashrc 在最後添加你的環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

Ⅳ 如何編譯am335x的uboot

AM335x上u-boot啟動的過程是先載入spl,spl初始化DDR之後載入u-boot。AM335x內部SRAM能載入大概100kB的spl,但是為避免調試時候亂跑,u-boot需要用-O0編譯,這樣spl的大小會超過內部SRAM的大小,所以需要修改代碼根目錄的config.mk,把spl和u-bo...

Ⅵ 如何在UBOOT里添加啟動畫面

方法其實很簡單,只需替換u-boot的tools/logos目錄中的denx.bmp,再重新編譯(可能需要先執行make clean,再make,新的圖片
才會起作用),圖片大小不要起過你的屏的大小,色彩深度不能大於256色,即8位色深的圖片。
不過,如果你不想替換denx.bmp,而要用自已的圖片文件,比如,我用的是rat-linux.bmp文件,也可以。把你的文件拷貝
到/tools/logos目錄中,再修改/tools目錄下的makefile文件,找到以下代碼段

ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetix.bmp
endif
將其中的LOGO_BMP= logos/denx.bmp改為 LOGO_BMP= logos/rat-linux.bmp即可。重新編譯,你的圖片就可以起作用了。

Ⅶ 怎樣弄uboot編譯交叉編譯工具,我的xp和ubuntu間有個共享文件夾,我把交叉工具放在那裡,怎樣把它安裝

1:先把交叉編譯環境包放到你的共享目錄,(我這里的版本是:arm-linux-gcc-4.4.3.tar.gz)
2:進行解壓 tar zxvf arm-linux-gcc-4.4.3.tar.gz -C (要解壓的路徑)
比如:tar zxvf arm-linux-gcc-4.4.3.tar.gz -C ~/ (root 用戶的工作目錄)

3:然後設置環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

4:要想系統啟動自動載入環境變數:
1:普通用戶:vim .profile 在最後添加你的環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

2:root用戶:vim .bashrc 在最後添加你的環境變數:export PATH=$PATH:~/opt/FriendlyARM/toolschain/4.4.3/bin

自此,交叉環境徹底搭建完畢。
注意:我的交叉編譯包,解壓出來的路徑就是:opt/FriendlyARM/toolschain/4.4.3/bin

你的版本,可能有些不同

Ⅷ qt210開發板,uboot啟動內核時卡在「boot with zImage」,不知道為什麼重新編譯內核和uboot還是不行

1,內核的ID和uboot中支持的ID一樣嗎
2,比特率設置是不是正確

Ⅸ 為什麼在ubuntu編譯下uboot時總是出錯

1.U-boot的使用:
ubuntu下基本只能用
kermit協議,進行串口通信了:
loadb
Ctrl+\,再按c,切換到C-kermit的命令行模式:
send
<文件路徑>,回車。
傳送完畢後,輸入c,回到U-boot串口界面。

若能和PC機ping成功,則可用tftp和nfs傳輸文件:
dhcp:使用
DHCP/TFTP 協議獲取文件
rarpboot :使用 RARP/TFTP 協議獲取文件
nfs:使用 NFS
協議獲取文件
tftpboot :使用 TFTP 協議獲取文件
bootp:使用 BOOTP/TFTP
協議獲取文件
以上命令的格式都為:指令 [目的 SDRAM 地址] [[主機 IP:]文件名]
注意:
要使用 dhcp、rarpboot 或 bootp 要路由器或 Host
支持的這些協議和服務。
如果沒有輸入[目的SDRAM 地址],系統就是用編譯時定義的CONFIG_SYS_LOAD_ADDR
在使用如果
tftpboot 和 nfs 命令沒有定義[主機 IP:],則使用 ENV 中的 serverip
其它命令必需定義[主機 IP:],否則使用提供動態 IP 服務的主機
IP。

Nand Flash
操作指令:
nand info
nand device [dev]
nand read addr off size
nand
write addr off size
nand write[.yaffs[1]] addr off size
nand erase [clean]
[off size]
nand bad
nand mp[.oob] off
nand scrub
nand markbad
off
nboot loadAddr dev offset

內存/寄存器操作指令:
nm [.b, .w, .l]
address
mm [.b, .w, .l] address
md [.b, .w, .l] address [# of
objects]
mw [.b, .w, .l] address value [count]
cp [.b, .w, .l] source
target count

Nor Flash 指令:
flinfo
(N)
md
protect
cp

USB 操作指令:
usb reset
usb
stop [f]
usb tree
usb info [dev]
usb storage
usb dev [dev]
usb
part [dev]
usb read addr blk# cnt
SD 卡(MMC)指令:
mmc init
mmc
device
FAT 文件系統指令:
fatinfo <interface>
<dev[:part]>
fatload <interface> <dev[:part]> <addr>
<filename> [bytes]
fatls <interface> <dev[:part]>
[directory]

系統引導指令:
boot 和 bootd 都是運行
ENV」bootcmd」中指定的指令
bootm [addr [arg ...]]

run 運行一個 ENV
定義的命令腳本
reset 重啟 CPU

使用 U-boot
將映像文件燒寫到板上的 Flash,一般步驟是:
(1)通過網路、串口、U盤、SD卡等方式將文件傳輸到SDRAM;
(2)使用 Nand
Flash 或 Nor Flash 相關的讀寫命令將 SDRAM 中的數據燒入 Flash。

內核的引導步驟如下:
(1)用
U-boot 的 mkimage 工具處理內核映像 zImage。
(2)通過網路、串口、U 盤、SD 卡等方式將處理過的內核映像傳輸到 SDRAM
的一定
位置(一般使用 0x30008000)
(3)然後使用」bootm"等內核引導命令來啟動內核。

2.U-boot在mini2440上的移植
在U-boot根目錄下:
vim Makefile
將 CROSS_COMPILE = arm-tekkaman-linux-gnueabi-
修改為CROSS_COMPILE = arm-linux-
make mini2440_config
make
注意:修改交叉編譯器一定要在make之前完成!
終於完成了U-boot
的移植。以前一直掐住瓶頸的問題,居然出在這里!
至此,總算完成了U-boot+內核+rootfs根文件系統等的移植,一個嵌入式系統搭建起來了。然而在這里,基本上只是拿了人家現成的代碼稍加修改而已,不值得沾沾自喜。接下來該在應用程序上進行開發了。

Ⅹ linux的uboot啟動映像,zImage和uImage的區別

linux的uboot啟動映像、zImage和uImage的區別



uboot啟動zImage(go)和uImage(bootm)分析

1.bootm載入linux鏡像是載入uIamge,uIamge是由mkimage製作而來,和zIamge的差異是uIamge是zIamge壓縮過的,bootm需要先對uIamge解壓,解壓地址為內核入口地址。當解壓完成時uIamge和zIamge幾乎是相同的,具體差異可以論述。uboot目前只能支持uImage啟動,不支持zImage啟動

2.bootm解壓過程
---------------------------------------------------------------------------
## Booting image at 08808000 ...
Image Name: Linux-2.6.14.7
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 989172 Bytes = 966 kB
Load Address: 08008000
Entry Point:08008000
Verifying Checksum ... OK
OK uboot bootm命令對uIamge的解壓操作
---------------------------------------------------------------------------
Starting kernel ...
傳遞內核參數將控制權交給archarmootcompressed]head.S
----------------------------------------------------------------------------
如mx1ADS班子內存的起始地址為0x0800_0000,通過tftp 下載到0x0800_8000 +offset ,offset大於0x80_0000,即tftp 0x0880_8000 然後bootm 0x0880_8000 即將0x0880_8000處的uIamge解壓,解壓地址即為mkimage 設置的kernel入口地址0x0800_8000。
zImage和uImage的區別一、vmlinuzvmlinuz 是可引導的、壓縮的內核。「vm」代表「Virtual Memory」。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制。Linux能夠使用硬碟空間作為虛擬內存,因此得名「vm」。
vmlinuz 的建立有兩種方式。一是編譯內核時通過「make zImage」創建,然後通過:「cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage/boot/vmlinuz」產生。zImage適用於 小內核的情況,它的存在是為了向後的兼容性。
二 是內核編譯時通過命令make bzImage創建,然後通過:「cp/usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz」產生。bzImage是壓縮的內核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起 誤解,bz表示「big zImage」。 bzImage中的b是「big」意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮文件,而且在這兩個文件的開頭部分內嵌有 gzip解壓縮代碼。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
二、 initrd-x.x.x.img
initrd是「initial ramdisk」的簡寫。initrd一般被用來臨時的引導硬體到實際內核vmlinuz能夠接管並繼續引導的狀態。
initrd 映象文件是使用mkinitrd創建的。mkinitrd實用程序能夠創建initrd映象文件。這個命令是RedHat專有的。其它Linux發行版或 許有相應的命令。這是個很方便的實用程序。具體情況請看幫助:man mkinitrd下面的命令創建initrd映象文件。

最後生成的內核鏡象有兩種zImage以及uImage。其中zImage下載到 目標板中後,可以直接用uboot的 命令go來 進行直接跳轉。這時候內核直接解壓啟動。但是無法掛載文件系統,因為go命令沒有將內核需要的相關的啟動參數傳遞給內核。傳遞啟動參數我們必須使用命令bootm來進行跳 轉。Bootm命 令跳轉只處理uImage的 鏡象。
uboot源代碼的tools/目錄下 有mkimage工 具,這個工具可以用來製作不壓縮或者壓縮的多種可啟動映象文件。
mkimage在製作映象文件的時候,是在原來的可執行映象文件的前面加上一個0x40位元組的頭, 記錄參數所指定的信息,這樣uboot才 能識別這個映象是針對哪個CPU體 系結構的,哪個OS的, 哪種類型,載入內存中的哪個位置,入口點在內存的那個位置以及映象名是什麼
用法如下:
./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set image name to 'name'
-d ==> use image data from 'datafile'
-x ==> set XIP (execute in place)
參數說明:

-A 指定CPU的體系結構:

取值表示的體 系結構
alpha Alpha
arm A RM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000

-O 指定操作系統類 型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos

-T 指定映象類型, 可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem

-C 指定映象壓縮方 式,可以取以下值:
none 不 壓縮
gzip 用gzip的壓縮方式
bzip2 用bzip2的壓縮方 式

-a 指 定映象在內存中的載入地址,映象下載到內存中時,要按照用mkimage製作映象時,這個參數所指定的地址值來下載

-e 指定映象運行的 入口點地址,這個地址就是-a參 數指定的值加上0x40(因 為前面有個mkimage添 加的0x40個 位元組的頭)

-n 指定映象名

-d 指定製作映象的源文件
我在編譯時用到的命令如下:
# make zImage//生成zImage鏡象
#/usr/local/arm/k9uboot/tools/mkimage -n 'Linux 2.4.27' -A arm -O linux -T
kernel -C none -a 0x20007fc0 -e 0x20008000 -d zImage uImage

內核鏡象已經准備好了,這個時候我們就要來准備文件系統了。由於時間緣故,本人暫時採用的是其他 人已經好的文件系統k9.img.gz。 這個時候我們要做的是,自己寫一個簡單hello.c的程序,編譯通過後加入到該文件系統中,然後下載到目標板中運行。
先編寫hello.c;
編譯:
#/usr/local/arm/2.95.3/bin/arm-linux-gcc –o start-hello hello.c
編譯後生成可執行文件start-hello
下面我們就必須把該執行文件加入到文件系統中去,步驟如下:
#gunzip k9.img.gz //解 壓縮
#mount –o loop k9.img /mnt/new_disk//掛載
#cp start-hello /mnt/new_disk //將 文件拷貝到文件系統中
#cd /mnt/new_disk
#umount /mnt/new_disk //卸 載
#gzip –c –v9 k9.img > k9.img.gz//壓縮生成最終的文件系統

下面我們就要下載內核以及准備好文件系統了,這邊先說明我 的內存分配情況如下:
Flash:
0x10000000 ――― 0x10020000 boot
0x10020000 ――― 0x10040000 uboot
0x10040000 ――― 0x10060000 uboot env
0x10060000 ――― 0x10200000 kernel
0x10200000 ――― 0x11000000 ramdisk

Sdram:
0x20007fc0 ――― 0x20a00000 kernel
0x20a00000 ―――ramdisk
Loadb 通過串口下載數據到ram中
cp.b拷貝ram中的數據到flash中。

將kernel以及文件系統ramdisk下載完 畢之後,我們還需要設置uboot的 環境變數,這樣uboot才 能夠在上電啟動的時候啟動內核等操作。環境變數設置如下:
Set cpfltoram cp.b 10200000 20a00000 18ffff//拷貝文件系統到ram中
Set boot bootm 20007fc0//啟動kernel
Set bootcmd run cpfltoker;run cpfltoram;run boot //uboot復位的執行指令

Set cpfltoker cp.b 10060000 20007fc0 f4fff //拷貝內核到ram中
Set bootargs root=/dev/ram rw initrd=0x20a00000,4M init=/linuxrc console=ttyS0,11520
0,mem=32m//uboot傳 遞給內核的啟動參數
設置完畢後,saveenv把 環境變數存儲起來。


學習心得:zImage 和uImage 都是生成的可執行內核鏡像文件
2者在u-boot中啟動的方式分別是 go addr 與 bootm addr 來實現啟動過程的
即對於zImage是通過 go 來進行引導 而uImage是通過bootm來進行引導的
zImage 和 uImage 2者的關系 是 uImage 是zImage通過mkimage (u--boot下面tools下的工具)來生成的
結果是後者比前者在頭部多了64個byte,這多餘的64 個byte是用來通知給u-boot用的;將相關信息告知u-boot;
這樣做的結果在u-boot引導內核時存在2個地址:loadaddress 和entry address 2者的差值剛好是0x40(64byte)的大小
這樣在使用bootm loadaddress 時u-boot會根據相應的loadaddress進行調整,有2中情況;
1)、當loadaddress與mkimage時傳送的一致時:
那麼在載入 ldr pc,entry address時,會選擇mkinage 時的entry地址;即pc=loadaddress + 4;然後由pc來控制流程跳轉倒ram中去執行;
2)、當loadaddress與mkimage時傳送的不一致時:
那麼,u-bbot會進行地址比較 後,將當前的loadaddress減去64byte後,將真正的內核映像(去掉64byte頭部的內核)拷貝倒預先制定的loadaddress,然後 直接從這個loadaddress來引導內核運行;
總結,那麼上面2中情況實際區別呢?其實就是最終代碼執行時,如果地址與mkinage時指定的 不符,那麼u-boot將進行去頭後,拷貝內核代碼,直接執行;而如果不處理,則會將 loadaddress+0x40來執行內核;
通過tftp服務來下載 zImage或者uImage;
loadb 在tftp不成功的情況下使用串口來下載內核 希望不要用這個方法
cp【.b.w.l】 完成 內存之間 內存向flash之間進行拷貝
最後可以設置 bootcmd 環境變數可以實現 u-boot自動引導內核啟動

至於文件系統的2中方式:ramdisk 以及nfs 推薦開發者使用nfs方便修改;
當使用ramdisk時,
#gunzip k9.img.gz //解壓縮
#mount –o loop k9.img /mnt/new_disk//掛 載
#umount /mnt/new_disk //卸載
#gzip –c –v9 k9.img > k9.img.gz//壓 縮生成最終的文件系統
這四條命令不要忘記,對於你來說多麼強大
不要你去再建立根文件系統。

閱讀全文

與uboot編譯啟動相關的資料

熱點內容
廣東編程貓學習班 瀏覽:704
上海數控編程培訓學校 瀏覽:311
怎麼下載我的解壓神器 瀏覽:632
lib文件無用代碼會編譯嗎 瀏覽:26
我的世界嗨皮咳嗽伺服器怎麼下 瀏覽:1000
mvn命令順序 瀏覽:978
車貸還完多少時間解壓 瀏覽:964
java頁面開發 瀏覽:816
學編程的小發明 瀏覽:25
為什麼說程序員喜歡格子 瀏覽:253
代碼編譯後叫什麼 瀏覽:969
電腦文件夾做了保護怎麼刪除 瀏覽:678
php資料庫連接全局 瀏覽:528
葫蘆島有程序員嗎 瀏覽:986
小胖機器人顯示無命令 瀏覽:775
一日一畫pdf 瀏覽:99
編程貓拔蘿卜文字評價模板 瀏覽:254
cmdjava命令 瀏覽:239
掃描版pdf轉文字版 瀏覽:536
單片機專用寄存器 瀏覽:502