精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

U-Boot源碼分析和常用命令

CHANBAEK ? 來(lái)源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2023-04-24 10:59 ? 次閱讀

1.U-Boot簡(jiǎn)介

Linux系統(tǒng)要啟動(dòng)就必須需要一個(gè)bootloader程序,也就是說(shuō)芯片上電后先運(yùn)行一段bootloader程序,這段bootloader程序會(huì)先初始化DDR等外設(shè),然后將Linux內(nèi)核從flash(NAND/NOR FLASH/SD/MMC等)拷貝到DDR中,最后啟動(dòng)Linux內(nèi)核

bootloader和Linux內(nèi)核的關(guān)系跟PC上的BIOS和Windows的關(guān)系一樣,bootloader就相當(dāng)于BIOS。 目前有很多現(xiàn)成的bootloader軟件可用,比如U-Boot、vivi、RedBoot等,其中以U-Boot使用最為廣泛

uboot(Universal Boot Loader),是一個(gè)遵循GPL協(xié)議的開(kāi)源軟件,是一個(gè)裸機(jī)代碼,可以看作是一個(gè)裸機(jī)綜合例程。

uboot官網(wǎng)代碼

uboot官網(wǎng)上下載的是最原始的uboot源碼。 uboot官網(wǎng)下載地址如下:

https://www.denx.de/wiki/U-Boot/

圖片

半導(dǎo)體廠商uboot代碼

移植uboot時(shí)一般不會(huì)直接用 uboot 官方的源碼的,官方的源碼是給半導(dǎo)體廠商準(zhǔn)備的,半導(dǎo)體廠商會(huì)根據(jù)自家的芯片,維護(hù)自己芯片對(duì)應(yīng)的uboot。 NXP維護(hù)的的uboot地址:

https://github.com/Freescale/u-boot-fslc

圖片

開(kāi)發(fā)板廠商uboot代碼

開(kāi)發(fā)板廠商做的開(kāi)發(fā)板需要修改芯片廠商官方的uboot,使其支持開(kāi)發(fā)板廠商生產(chǎn)的評(píng)估板。 本文使用的正點(diǎn)原子i. MX6ULL開(kāi)發(fā)板的uboot下載地址:

http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html

2.U-Boot源碼分析

這里使用開(kāi)發(fā)板廠商提供的uboot源碼( uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2)來(lái)對(duì)uboot工程目錄進(jìn)行分析:以EMMC版的核心板為例,以下是uboot的目錄,左側(cè)為未編譯的源碼,右側(cè)為編譯后的源碼(編譯方法見(jiàn)本文下一小節(jié))

圖片

需要關(guān)注或了解的文件夾或文件如下:

arch文件夾:存放與架構(gòu)有關(guān)的文件,這里只關(guān)注arch/arm文件夾即可

  • mach開(kāi)頭的文件夾跟具體的設(shè)備有關(guān)
  • cpu文件夾里是和cpu架構(gòu)有關(guān)的

board文件夾:和具體的板子有關(guān)的,打開(kāi)freescale文件夾,freescale芯片的板子都在此文件夾下

  • mx6ul開(kāi)頭的,表示使用IMX6UL芯片的板子
  • mx6ull開(kāi)頭的,表示使用IMX6ULL芯片的板子
  • mx6ullevk是NCP官方的IMX6ULL開(kāi)發(fā)板

configs文件夾:存放uboot配置文件,一般半導(dǎo)體或開(kāi)發(fā)板廠商會(huì)制作好一個(gè)配置文件,供用戶在此基礎(chǔ)上進(jìn)行修改,配置文件統(tǒng)一命名為“xxx_defconfig”,xxx表示開(kāi)發(fā)板名字

使用"make xxx_defconfig"命令,即可配置uboot

.u-boot.xxx_cmd文件:是一系列編譯生成的命令文件

#該變量的作用:拷貝一份u-boot-nodtb.bin文件,并重命名為u-boot.bin
cmd_u-boot.bin := cp u-boot-nodtb.bin u-boot.bin
#用到了arm-linux-gnueabihf-objcopy來(lái)將ELF格式的u-boot文件轉(zhuǎn)換為二進(jìn)制的u-boot-nodtb.bin
cmd_u-boot-nodtb.bin := arm-linux-gnueabihf-objcopy --gap-fill=0xff 
-j .text......-O binary u-boot u-boot-nodtb.bin
#用到了arm-linux-gnueabihf-ld.bfd鏈接工具,將各個(gè)built-in.o文件鏈接在一起形成u-boot文件
cmd_u-boot := arm-linux-gnueabihf-ld.bfd ......-Map u-boot.map
#用到了工具tools/mkimage,IVT/DCD等數(shù)據(jù)保存在了文件mximage.cfg.cfgtmp中
#tools/mkimage工具就是讀取IVT/DCD等數(shù)據(jù)并添加到u-boot.bin頭部,并生成u-boot.imx
cmd_u-boot.imx := ./tools/mkimage -n board/freescale/mx6ull_alientek_emmc/imximage.cfg.cfgtmp 
-T imximage -e 0x87800000 -d u-boot.bin u-boot.imx

Makefile文件:頂層Makefile文件,Makefile是支持嵌套的,也就是頂層Makefile可以調(diào)用子目錄中的Makefile文件

u-boot.xxx文件:一系列文件,其含義如下

  • u-boot:編譯出來(lái)的ELF格式的uboot鏡像文件
  • u-boot.bin:編譯出來(lái)的二進(jìn)制格式的uboot可執(zhí)行鏡像文件
  • u-boot.cfg:uboot的另外一種配置文件
  • u-boot.imx:u-boot.bin添加頭部信息后的文件
  • u-boot.lds:鏈接腳本
  • u-boot.map:uboot映射文件,可查看某個(gè)函數(shù)被鏈接到哪個(gè)地址上了
  • u-boot.srec:S-Record格式的鏡像文件
  • u-boot.sym:uboot符合文件
  • u-boot-nodtb.bin:和u-boot.bin一樣,u-boot.bin是u-boot-nodtb.bin的復(fù)制文件

.config文件:uboot配置文件,使用命令"make xxx_defconfig"配置uboot后就會(huì)自動(dòng)生成

README:描述了uboot的詳細(xì)信息,包括uboot該如何編譯、uboot中各文件夾的含義、相應(yīng)的命令等

3.U-Boot初次編譯

本文以正點(diǎn)原子i. MX6ULL阿爾法開(kāi)發(fā)板實(shí)驗(yàn)開(kāi)發(fā)板,核心板為512MB(DDR3) + 8GB(EMMC),進(jìn)行學(xué)習(xí)實(shí)踐

在Ubuntu中安裝ncurses庫(kù),以防止編譯報(bào)錯(cuò)

sudo apt-get install libncurses5-dev

創(chuàng)建相應(yīng)目錄,將開(kāi)發(fā)板廠商提供的uboot源碼拷貝至此目錄中

mkdir /home/andyxi/linux/uboot
cd /home/andyxi/linux/uboot
cp uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2 .

解壓uboot源碼

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

使用以下命令編譯uboot

#ARCH=arm表示設(shè)置目標(biāo)為arm架構(gòu),相當(dāng)于make distclean,清除工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#配置uboot,配置文件為mx6ull_14x14_ddr512_emmc_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
#V=1用于設(shè)置編譯過(guò)程中的信息輸出級(jí)別,相當(dāng)于make -j12,即使用12核來(lái)編譯uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
#每次編譯uboot都需要輸入一長(zhǎng)串命令
#為了簡(jiǎn)單起見(jiàn),建立一個(gè)shell腳本文件,將這些命令寫到shell腳本里
#執(zhí)行shell腳本即可完成編譯工作
#新建mx6ull_alientek_emmc.sh腳本文件
##########################################################################
#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
##########################################################################
#通過(guò)命令“./mx6ull_alientek_emmc.sh”編譯uboot

4.U-Boot燒寫與啟動(dòng)

uboot編譯好后就可以燒寫到開(kāi)發(fā)板上使用了,這里使正點(diǎn)原子提供的燒寫工具imxdownload

將imxdownload燒寫工具拷貝到文件夾中,并給與可執(zhí)行權(quán)限

chmod 777 imxdownload

使用imxdownload軟件將bin文件下載到SD卡中

./imxdownload u-boot.bin /dev/sdb

燒寫成功后,插入SD卡,使用USB線將USB_TTL和電腦相連,打開(kāi)串口工具后復(fù)位開(kāi)發(fā)板。 在“Hit any key to stop autoboot”倒計(jì)時(shí)結(jié)束之前,按下鍵盤上的回車鍵,就會(huì)進(jìn)入uboot命令行模式; 否則uboot就會(huì)使用默認(rèn)參數(shù)來(lái)啟動(dòng)Linux內(nèi)核了

圖片

5.U-Boot常用命令

進(jìn)入uboot命令行模式后輸入help或 ? ,回車后即可查看當(dāng)前uboot所支持的命令; 使用 help cmd 或 ? cmd 命令還可以查看命令的具體用法

信息查詢命令

bdinfo			#用于查看板子信息
printenv		#用于輸出環(huán)境變量信息
version			#用于查看uboot版本號(hào)

環(huán)境變量操作命令

=> setenv bootdelay 5  		#將環(huán)境變量bootdelay改為5
=> saveenv			#保存修改后,uboot倒計(jì)時(shí)變?yōu)?秒
Saving Environment to MMC...	#保存過(guò)程提示...
Writing to MMC(0)...done	#保存到MMC(0)中,即SD卡中
################################################################
#有時(shí)修改的環(huán)境變量值可能會(huì)有空格,此時(shí)需要用單引號(hào)括起來(lái)
=> setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
=> saveenv			#保存修改
#上面命令相當(dāng)于設(shè)置了"console=...","root=...","rootwait","rw"四組值
################################################################
=> setenv author andyxi		#新建環(huán)境變量author,其值為andyxi
=> saveenv			#保存修改
=> setenv author 		#給環(huán)境變量author賦空值,即刪除該環(huán)境變量
=> saveenv			#保存修改

內(nèi)存操作命令

md	#用于顯示內(nèi)存值
nm	#用于修改指定地址的內(nèi)存值
mm	#用于修改指定地址的內(nèi)存值,與nm命令的區(qū)別是,mm修改內(nèi)存值時(shí)地址會(huì)自增
mw	#用于使用一個(gè)指定的數(shù)據(jù)填充一段內(nèi)存
cp	#拷貝命令,用于將DRAM中的數(shù)據(jù)從一段內(nèi)存拷貝到另一段內(nèi)存中
cmp	#比較命令,用于比較兩段內(nèi)存的數(shù)據(jù)是否相等

網(wǎng)絡(luò)操作命令

=> setenv ipaddr 192.168.10.50  	#開(kāi)發(fā)板IP地址
=> setenv ethaddr b8:ae:1d:01:00:00	#開(kāi)發(fā)板MAC地址
=> setenv gatewayip 192.168.10.1	#網(wǎng)關(guān)地址
=> setenv netmask 255.255.255.0		#子網(wǎng)掩碼
=> setenv serverip 192.168.10.100	#服務(wù)器IP地址(即Ubuntu主機(jī)地址)
=> saveenv	
#######################################################################
ping		#開(kāi)發(fā)板的網(wǎng)絡(luò)是否能使用
dhcp 		#用于從路由器獲取IP地址,前提是開(kāi)發(fā)板與路由器連接
nfs 		#網(wǎng)絡(luò)文件系統(tǒng),可以在計(jì)算機(jī)之間通過(guò)網(wǎng)絡(luò)來(lái)分享資源	
tftp		#通過(guò)使用TFTP協(xié)議網(wǎng)絡(luò)下載東西到DRAM中

EMMC和SD卡操作命令

mmc info  		#輸出MMC設(shè)備信息
mmc read		#讀取MMC中的數(shù)據(jù)
mmc write		#向MMC中寫入數(shù)據(jù)
mmc rescan		#掃描MMC設(shè)備
mmc part		#列出MMC設(shè)備的分區(qū)
mmc dev			#切換MMC設(shè)備
mmc list		#列出當(dāng)前有效的所有MMC設(shè)備
......

FAT格式文件系統(tǒng)操作命令

fatinfo		#用于查詢指定MMC設(shè)備分區(qū)的文件系統(tǒng)信息
fatls		#用于查詢FAT格式設(shè)備的目錄和文件信息
fstype		#用于查看MMC設(shè)備某個(gè)分區(qū)的文件系統(tǒng)格式
fatload		#用于將指定的文件讀取到DRAM中
fatwrite	#用于將DRAM中的數(shù)據(jù)寫入到MMC設(shè)備中

NAND操作命令

nand info	#用于打印NAND Flash信息
nand device	#用于切換NAND Flash
nand erase	#用于擦除NAND Flash
nand write	#用于向指定地址寫入指定的數(shù)據(jù)
nand read	#用于從NAND Flash中指定地址讀取指定大小的數(shù)據(jù)到DRAM中

BOOT操作命令

bootz		#用于啟動(dòng)zImage鏡像文件
bootm		#用于啟動(dòng)uImage鏡像文件
boot		#用于啟動(dòng)Linux系統(tǒng)的,該命令會(huì)讀取環(huán)境變量bootcmd來(lái)啟動(dòng)Linux
bootcmd		#環(huán)境變量保存著引導(dǎo)命令(啟動(dòng)的命令集合)
#####################################################################
#例如使用tftp命令從網(wǎng)絡(luò)啟動(dòng)Linux
tftp 80800000 zImage					#下載zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb	#下載設(shè)備樹(shù)
bootz 80800000 - 83000000				#啟動(dòng)Linux
#以上實(shí)例可以通過(guò)設(shè)置bootcmd,保存后直接使用boot命令來(lái)實(shí)現(xiàn)
setenv bootcmd 'tftp 80800000 zImage;
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;
bootz 80800000 - 83000000'
saveenv
boot

其他常用命令

reset 	#復(fù)位重啟
go	#用于跳到指定的地址處執(zhí)行應(yīng)用
run	#用于運(yùn)行環(huán)境變量中定義的命令
	#例如通過(guò)“run bootcmd”來(lái)運(yùn)行bootcmd中的啟動(dòng)命令
mtest	#簡(jiǎn)單的內(nèi)存讀寫測(cè)試命令,可以測(cè)試開(kāi)發(fā)板上的DDR
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1364

    瀏覽量

    40230
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11232

    瀏覽量

    208940
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    633

    瀏覽量

    29146
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    38202
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    678

    瀏覽量

    21987
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    windowsxp常用命令

    windowsxp常用命令   winver---------檢查windows版本 wmimgmt.msc----打開(kāi)windows管理體系結(jié)構(gòu)(wmi) wupdmgr-------
    發(fā)表于 01-10 09:05 ?1273次閱讀

    Ubuntu常用命令大全

    Ubuntu常用命令大全,包括常用管理目錄,系統(tǒng)命令,硬盤相關(guān),內(nèi)存相關(guān),查看進(jìn)程等命令
    發(fā)表于 01-06 11:16 ?0次下載

    vim常用命令

    vim常用命令
    發(fā)表于 01-08 15:59 ?3次下載

    redis常用命令總結(jié)

    本文是對(duì)redis常用命令總結(jié)。
    發(fā)表于 02-09 11:25 ?1594次閱讀

    Linux環(huán)境下U-boot常用命令講解的詳細(xì)資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux環(huán)境下U-boot常用命令講解的資料說(shuō)明。
    發(fā)表于 06-21 08:00 ?1次下載
    Linux環(huán)境下<b class='flag-5'>U-boot</b><b class='flag-5'>常用命令</b>講解的詳細(xì)資料說(shuō)明

    linux常用命令手冊(cè)

    linux常用命令手冊(cè)免費(fèi)下載。
    發(fā)表于 06-01 14:59 ?68次下載

    Memcache系統(tǒng)常用命令講解

    Memcache系統(tǒng)常用命令講解(無(wú)線電源技術(shù)商業(yè)計(jì)劃書(shū))-該文檔為Memcache系統(tǒng)常用命令講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,,,,,,,,,,,,,,
    發(fā)表于 09-28 11:27 ?5次下載
    Memcache系統(tǒng)<b class='flag-5'>常用命令</b>講解

    u-boot常用命令合集

    u-boot常用命令合集
    發(fā)表于 02-11 09:50 ?2次下載

    linux常用命令大全

    linux常用命令大全,一些常用命令都可以找到
    發(fā)表于 03-03 09:20 ?0次下載

    DOS系統(tǒng)常用命令

    介紹了DOS系統(tǒng)的常用命令
    發(fā)表于 03-21 14:59 ?0次下載

    創(chuàng)建自定義的u-boot命令

    為什么會(huì)有這篇文章,因?yàn)樾∩?b class='flag-5'>u-boot源碼的設(shè)計(jì)所吸引了(源碼對(duì)命令的處理過(guò)程)。自定義u-boot
    的頭像 發(fā)表于 08-08 14:46 ?1076次閱讀

    Linux常用命令

    Linux常用命令
    的頭像 發(fā)表于 01-12 11:19 ?1119次閱讀

    Linux U-Boot開(kāi)發(fā)指南

    介紹 U-Boot 的編譯打包、基本配置、常用命令的使用、基本調(diào)試方法等, 為 U-BOOT 的移植及應(yīng)用開(kāi)發(fā)提供了基礎(chǔ)。
    的頭像 發(fā)表于 03-06 10:28 ?1267次閱讀
    Linux <b class='flag-5'>U-Boot</b>開(kāi)發(fā)指南

    Linux常用命令手冊(cè)分享

    linux常用命令合集
    發(fā)表于 04-26 11:46 ?1次下載

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?125次閱讀
    詳解kubectl<b class='flag-5'>常用命令</b>