色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

1.U-Boot簡介

Linux系統要啟動就必須需要一個bootloader程序,也就是說芯片上電后先運行一段bootloader程序,這段bootloader程序會先初始化DDR等外設,然后將Linux內核從flash(NAND/NOR FLASH/SD/MMC等)拷貝到DDR中,最后啟動Linux內核

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

uboot(Universal Boot Loader),是一個遵循GPL協議的開源軟件,是一個裸機代碼,可以看作是一個裸機綜合例程。

uboot官網代碼

uboot官網上下載的是最原始的uboot源碼。 uboot官網下載地址如下:

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

圖片

半導體廠商uboot代碼

移植uboot時一般不會直接用 uboot 官方的源碼的,官方的源碼是給半導體廠商準備的,半導體廠商會根據自家的芯片,維護自己芯片對應的uboot。 NXP維護的的uboot地址:

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

圖片

開發板廠商uboot代碼

開發板廠商做的開發板需要修改芯片廠商官方的uboot,使其支持開發板廠商生產的評估板。 本文使用的正點原子i. MX6ULL開發板的uboot下載地址:

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

2.U-Boot源碼分析

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

圖片

需要關注或了解的文件夾或文件如下:

arch文件夾:存放與架構有關的文件,這里只關注arch/arm文件夾即可

  • mach開頭的文件夾跟具體的設備有關
  • cpu文件夾里是和cpu架構有關的

board文件夾:和具體的板子有關的,打開freescale文件夾,freescale芯片的板子都在此文件夾下

  • mx6ul開頭的,表示使用IMX6UL芯片的板子
  • mx6ull開頭的,表示使用IMX6ULL芯片的板子
  • mx6ullevk是NCP官方的IMX6ULL開發板

configs文件夾:存放uboot配置文件,一般半導體或開發板廠商會制作好一個配置文件,供用戶在此基礎上進行修改,配置文件統一命名為“xxx_defconfig”,xxx表示開發板名字

使用"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來將ELF格式的u-boot文件轉換為二進制的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鏈接工具,將各個built-in.o文件鏈接在一起形成u-boot文件
cmd_u-boot := arm-linux-gnueabihf-ld.bfd ......-Map u-boot.map
#用到了工具tools/mkimage,IVT/DCD等數據保存在了文件mximage.cfg.cfgtmp中
#tools/mkimage工具就是讀取IVT/DCD等數據并添加到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可以調用子目錄中的Makefile文件

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

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

.config文件:uboot配置文件,使用命令"make xxx_defconfig"配置uboot后就會自動生成

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

3.U-Boot初次編譯

本文以正點原子i. MX6ULL阿爾法開發板實驗開發板,核心板為512MB(DDR3) + 8GB(EMMC),進行學習實踐

在Ubuntu中安裝ncurses庫,以防止編譯報錯

sudo apt-get install libncurses5-dev

創建相應目錄,將開發板廠商提供的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表示設置目標為arm架構,相當于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用于設置編譯過程中的信息輸出級別,相當于make -j12,即使用12核來編譯uboot
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12 
#每次編譯uboot都需要輸入一長串命令
#為了簡單起見,建立一個shell腳本文件,將這些命令寫到shell腳本里
#執行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 
##########################################################################
#通過命令“./mx6ull_alientek_emmc.sh”編譯uboot

4.U-Boot燒寫與啟動

uboot編譯好后就可以燒寫到開發板上使用了,這里使正點原子提供的燒寫工具imxdownload

將imxdownload燒寫工具拷貝到文件夾中,并給與可執行權限

chmod 777 imxdownload

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

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

燒寫成功后,插入SD卡,使用USB線將USB_TTL和電腦相連,打開串口工具后復位開發板。 在“Hit any key to stop autoboot”倒計時結束之前,按下鍵盤上的回車鍵,就會進入uboot命令行模式; 否則uboot就會使用默認參數來啟動Linux內核了

圖片

5.U-Boot常用命令

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

信息查詢命令

bdinfo			#用于查看板子信息
printenv		#用于輸出環境變量信息
version			#用于查看uboot版本號

環境變量操作命令

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

內存操作命令

md	#用于顯示內存值
nm	#用于修改指定地址的內存值
mm	#用于修改指定地址的內存值,與nm命令的區別是,mm修改內存值時地址會自增
mw	#用于使用一個指定的數據填充一段內存
cp	#拷貝命令,用于將DRAM中的數據從一段內存拷貝到另一段內存中
cmp	#比較命令,用于比較兩段內存的數據是否相等

網絡操作命令

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

EMMC和SD卡操作命令

mmc info  		#輸出MMC設備信息
mmc read		#讀取MMC中的數據
mmc write		#向MMC中寫入數據
mmc rescan		#掃描MMC設備
mmc part		#列出MMC設備的分區
mmc dev			#切換MMC設備
mmc list		#列出當前有效的所有MMC設備
......

FAT格式文件系統操作命令

fatinfo		#用于查詢指定MMC設備分區的文件系統信息
fatls		#用于查詢FAT格式設備的目錄和文件信息
fstype		#用于查看MMC設備某個分區的文件系統格式
fatload		#用于將指定的文件讀取到DRAM中
fatwrite	#用于將DRAM中的數據寫入到MMC設備中

NAND操作命令

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

BOOT操作命令

bootz		#用于啟動zImage鏡像文件
bootm		#用于啟動uImage鏡像文件
boot		#用于啟動Linux系統的,該命令會讀取環境變量bootcmd來啟動Linux
bootcmd		#環境變量保存著引導命令(啟動的命令集合)
#####################################################################
#例如使用tftp命令從網絡啟動Linux
tftp 80800000 zImage					#下載zImage
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb	#下載設備樹
bootz 80800000 - 83000000				#啟動Linux
#以上實例可以通過設置bootcmd,保存后直接使用boot命令來實現
setenv bootcmd 'tftp 80800000 zImage;
tftp 83000000 imx6ull-14x14-emmc-7-1024x600-c.dtb;
bootz 80800000 - 83000000'
saveenv
boot

其他常用命令

reset 	#復位重啟
go	#用于跳到指定的地址處執行應用
run	#用于運行環境變量中定義的命令
	#例如通過“run bootcmd”來運行bootcmd中的啟動命令
mtest	#簡單的內存讀寫測試命令,可以測試開發板上的DDR
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1372

    瀏覽量

    40282
  • Linux
    +關注

    關注

    87

    文章

    11296

    瀏覽量

    209361
  • 源碼
    +關注

    關注

    8

    文章

    639

    瀏覽量

    29185
  • u-boot
    +關注

    關注

    0

    文章

    121

    瀏覽量

    38222
  • 命令
    +關注

    關注

    5

    文章

    683

    瀏覽量

    22017
收藏 人收藏

    評論

    相關推薦

    windowsxp常用命令

    windowsxp常用命令   winver---------檢查windows版本 wmimgmt.msc----打開windows管理體系結構(wmi) wupdmgr-------
    發表于 01-10 09:05 ?1281次閱讀

    Ubuntu常用命令大全

    Ubuntu常用命令大全,包括常用管理目錄,系統命令,硬盤相關,內存相關,查看進程等命令
    發表于 01-06 11:16 ?0次下載

    vim常用命令

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

    redis常用命令總結

    本文是對redis常用命令總結。
    發表于 02-09 11:25 ?1605次閱讀

    Linux環境下U-boot常用命令講解的詳細資料說明

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

    linux常用命令手冊

    linux常用命令手冊免費下載。
    發表于 06-01 14:59 ?68次下載

    Memcache系統常用命令講解

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

    u-boot常用命令合集

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

    linux常用命令大全

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

    DOS系統常用命令

    介紹了DOS系統的常用命令
    發表于 03-21 14:59 ?0次下載

    創建自定義的u-boot命令

    為什么會有這篇文章,因為小生被u-boot源碼的設計所吸引了(源碼命令的處理過程)。自定義u-boot
    的頭像 發表于 08-08 14:46 ?1101次閱讀

    Linux常用命令

    Linux常用命令
    的頭像 發表于 01-12 11:19 ?1146次閱讀

    Linux U-Boot開發指南

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

    Linux常用命令手冊分享

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

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發表于 11-05 15:39 ?199次閱讀
    詳解kubectl<b class='flag-5'>常用命令</b>
    主站蜘蛛池模板: 粉嫩AV国产一区二区福利姬| 亚州天堂在线视频av| 久久精品一区二区免费看| 国产精品久久免费视频| 吃奶啃奶玩乳漫画| 99无人区码一码二码三| 99精品国产AV一区二区麻豆| 在线观看视频一区| 在教室伦流澡到高潮H女攻视频 | 国产精品日本欧美一区二区| 仓井空torrent| 啊片色播电影| brazzers情欲狂欢| RUNAWAY韩国动漫免费网| WWW久久只有这里有精品| 成人毛片100部免费看| 穿着丝袜被男生强行啪啪| 春药按摩人妻中文字幕| 妇少水多18P蜜泬17P亚洲乱| 丰满大屁俄罗斯肥女| 国产精品久久久精品日日| 国产特级毛片AAAAAAA高清| 国产真实强被迫伦姧女在线观看| 国产在线亚洲精品观| 精品久久久无码21P发布| 精品人伦一区二区三区潘金莲| 久久不射电影网| 浪货嗯啊趴下NP粗口黄暴| 免费精品美女久久久久久久久久| 男女做爽爽爽视频免费软件| 欧美高清vivoesond在线播放| 青年医生插曲| 我强进了老师身体在线观看 | 日本xxx在线观看免费播放| 日韩精品免费在线观看| 视频成人app永久在线观看 | 麻豆国产原创中文AV网站| 欧美肥婆性生活| 十分钟免费观看高清视频大全| 亚洲欧美免费无码专区| 2019香蕉在线观看直播视频|