嵌入式開發之Linux系統移植3-uboot的燒寫及使用

      網友投稿 1277 2022-05-29

      1.何為uboot

      1.1.linux系統的啟動過程

      用一個動畫來說明開發板如何引導Linux啟動的,以三星Exynos4412開發板為例:

      首先是三星公司在SOC內部有一部分固件BL0,通電自啟,啟動后會讀取撥碼開關,用來判斷啟動來源,SD卡還是EMMC?

      然后通過目標位置讀取我們準備好的一段bootloader程序,并啟動bootloader。

      再往后,BL0工作結束,任務交接給bootloader。bootloader來往內存中搬運,Linux運行需要的核心內容,Linux內核、dtb、rootfs.

      內存搬運完成后,啟動Linux來工作,自己停止工作。

      Linux內部被啟動后,然后加載運行環境和rootfs等

      1.1.1. Bootloader

      在操作系統運行之前運行的一小段代碼,用于將軟硬件環境初始化到

      一個合適的狀態,為操作系統的加載和運行做準備(其本身不是操作系統)

      1.2.Bootloader基本功能

      -> 初始化軟硬件環境 -> 引導加載linux內核 -> 給linux內核傳參 -> 執行用戶命令

      注:bootloader是啟動引導程序的統稱,嵌入式linux常用的bootloader是uboot

      1.3.常見的Bootloader

      2.uboot啟動盤的制作

      2.1.資料準備

      u-boot 鏡像(鏡像的制作,后續發出)

      Ubuntu操作系統環境,可以上虛擬機

      嵌入式開發之Linux系統移植3-uboot的燒寫及使用

      ImageWriter 工具,寫入SD

      2.2。SD卡存儲結構

      SD卡的存儲以扇區為單位,每個扇區的大小為512Byte, 其中零扇區存儲分區表(即分區信息),后續的扇區可自行分區和格式化;

      若選擇SD卡啟動,處理器上電后從第一個扇區開始將其中的內容搬移到內存,所以我們把uboot放到從第一個扇區開始之后的空間, 之后的空間根據個人需求可進行分區和格式化

      2.3.操作步驟

      燒寫工具默認從0扇區開始燒寫,這里我們自己在uboot之前放一個512字節的空鏡像,因為BL0是從1扇區開始讀取,三星告訴我們的。

      1、u-boot鏡像”中的u-boot-fs4412.bin拷貝到ubuntu的家目錄下

      2、在終端輸入如下命令,制作一個512字節的空鏡像

      $sudoddif=/dev/zeroof=zero.bincount=1

      3、執行如下命令,將uboot追加到zero.bin之后生成win-u-boot-fs4412.bin

      $catzero.binu-boot-fs4412.bin>win-u-boot-fs4412.bin

      4、再執行如下命令,制作一個1M的空鏡像(用于擦除SD卡中原有的數據)

      $sudoddif=/dev/zeroof=clear.bincount=2048

      5、把生成的win-u-boot-fs4412.bin和clear.bin拷貝到windows下

      6、將SD卡插入到電腦上(卡槽/USB讀卡器均可),使其在windows下識別

      7、ImageWriter”下的“Win32DiskImager”,把2個鏡像文件分兩次寫入SD,之所以要clear.bin這個空文件,是防止SD卡有內容造成鏡像不正確

      8、通過一下幾個圖來寫

      9、SD卡插入開發板的卡槽,調整撥碼開關為SD卡啟動,查看uboot是否能正常啟動

      注:uboot正常啟動后LED2燈會點亮且終端上也會打印uboot相關的信息

      3.uboot的使用

      3.1.uboot模式

      自啟動模式

      uboot啟動后若沒有用戶介入,倒計時結束后會自動執行自啟動

      環境變量(bootcmd)中設置的命令(一般作加載和啟動內核)

      交互模式

      倒計時結束之前按下任意按鍵uboot會進入交互模式,交互模式下

      用戶可輸入uboot命令

      3.2.uboot幫助命令

      help

      查看uboot支持的所有命令

      help 命令

      查看當前命令的使用方法

      3.3.uboot環境變量命令

      printenv

      打印uboot中所有的環境變量

      setenv

      設置指定的環境變量(保存在RAM中)

      setenv 環境變量 環境變量的值

      ssaveenv

      保存所有環境變量到EMMC中

      3.4.uboot常用環境變量

      ipaddr

      uboot的IP地址

      serverip

      服務器的IP地址(即ubuntu的IP)

      bootdelay

      進入自啟動模式之前倒計時的秒數

      3.5.uboot網絡傳輸命令

      loadb

      通過Kermit協議下載文件到指定的內存地址

      loadb 地址

      tftp

      通過tftp協議下載文件到指定的內存地址

      tftp 地址 文件名

      注:使用tftp之前要配置好網絡及tftp服務器

      3.5.uboot存儲器訪問命令

      mmc read

      將EMMC中指定扇區中的內容讀取到內存中指定的地址

      mmc read

      addr: 內存地址

      blk#: EMMC中的扇區編號

      cnt: 讀取的扇區的個數

      mmc write

      將內存中指定地址中的內容寫入到EMMC中指定的扇區

      mmc write

      3.6.uboot自啟動環境變量

      bootcmd

      自啟動的環境變量

      該環境變量可以設置成一到多個uboot命令的集合(若有多個使用;分割)

      自啟動模式下uboot就會按照bootcmd中命令的順序逐條執行

      eg:

      setenv bootcmd tftp 40008000 interface.bin;go 40008000

      saveenv

      下一結,實戰

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:微機原理-07-中斷系統
      下一篇:2022 美國大學生數學建模競賽時間安排表(參考)
      相關文章
      mm1313亚洲精品无码又大又粗| 亚洲av无码专区在线电影天堂| 国产成人 亚洲欧洲| 亚洲视频在线视频| 亚洲AV人无码激艳猛片| 亚洲男人的天堂www| 中文字幕在线亚洲精品| 亚洲另类少妇17p| 亚洲无码日韩精品第一页| 亚洲国产成人久久笫一页| 亚洲精品成a人在线观看| 亚洲第一页综合图片自拍| 亚洲第一福利网站在线观看| 亚洲国产婷婷香蕉久久久久久| 亚洲精品岛国片在线观看| 亚洲精品乱码久久久久久不卡| 亚洲精品和日本精品| 久久久久国产成人精品亚洲午夜 | 亚洲国产精品成人综合色在线婷婷 | 亚洲区视频在线观看| 亚洲精品亚洲人成在线播放| 亚洲精品国产日韩| 亚洲av永久无码| 亚洲?V乱码久久精品蜜桃| 亚洲综合久久夜AV | 亚洲欧洲成人精品香蕉网| 国产亚洲A∨片在线观看| 亚洲成a人片在线观看日本| 99ri精品国产亚洲| 亚洲日韩国产精品无码av| 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲一区欧洲一区| 色综合久久精品亚洲国产| 亚洲精品无码你懂的网站| 亚洲熟妇中文字幕五十中出| 久久久久亚洲AV片无码| 亚洲精品亚洲人成在线麻豆| 亚洲卡一卡二卡乱码新区| 亚洲av永久中文无码精品| 亚洲精品视频在线观看你懂的| 亚洲人成中文字幕在线观看|