從0移植uboot(三) _編譯最小可用uboot

来源:http://www.cnblogs.com/xiaojiang1025/archive/2017/02/24/6436752.html
-Advertisement-
Play Games

前兩篇介紹了uboot 2013.01的配置原理以及大體的運行流程,本文將討論如何對uboot源碼進行配置,將一個可用的uboot燒錄到SD卡中。 定製自己的core board 市面上能買到的開發板的核心板基本都是基於官方參考板製作的,所以雖然標準操作是"定製"自己的core board,但鑒於我 ...


前兩篇介紹了uboot-2013.01的配置原理以及大體的運行流程,本文將討論如何對uboot源碼進行配置,將一個可用的uboot燒錄到SD卡中。

定製自己的core board

市面上能買到的開發板的核心板基本都是基於官方參考板製作的,所以雖然標準操作是"定製"自己的core board,但鑒於我的板子的核心板是基於三星的參考板做的,所以我們做的主要工作就是按照(一)中的原理,編寫(山寨)我們"自己的"核心板配置。我們需要的目錄是"board/samsung/origen/",這部分的主要功能就是將其中的文件"改名字"。首先來認識一下原版以示尊重

board/samsung/origen/

$ls board/samsung/origen/
lowlevel_init.S  Makefile  mem_setup.S  mmc_boot.c  origen.c  origen_setup.h  tools

接下來就開始我們的山寨工作

//山寨參考板目錄
$cp -arf ./board/samsung/origen ./board/samsung/xboot

//山寨關鍵文件
$mv ./board/samsung/xboot/origen.c ./board/samsung/xboot/xboot.c

uboot的編譯系統和內核的類似,所以Makefile也得改(./board/samsung/xboot/Makefile)
from

 30 ifndef CONFIG_SPL_BUILD
 31 COBJS   += origen.o
 32 endif

to

 30 ifndef CONFIG_SPL_BUILD
 31 COBJS   += xboot.o
 32 endif

include/configs/origen.h

用於配置整個板子的頭文件也不能放過

$cp include/configs/origen.h include/configs/xboot.h

from

104 #define CONFIG_SYS_PROMPT               "ORIGEN # "
133 #define CONFIG_IDENT_STRING             " for ORIGEN"

to

104 #define CONFIG_SYS_PROMPT               "xboot # "
133 #define CONFIG_IDENT_STRING             " for xboot"

boards.cfg

最後,別忘了我在上文提到的boards.cfg文件,如果這裡面不動手腳,我們的板子是不會被Makefile找到的,So,

 284 origen                       arm         armv7       origen              samsung        exynos
 285 xboot                        arm         armv7       xboot               samsung        exynos  

和之前一樣,至此,我們就可以先編譯一下過過手癮(順便檢查一下配置^-^),

  1 #!/bin/bash            
  2 CPU_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
  3 export ARCH=arm
  4 export CROSS_COMPILE=/opt/arm-cross-compile/arm-2014.05/bin/arm-none-linux-gnueabi-
  5 newName="xboot"
  6 make distclean
  7 make ${newName}_config
  8 make  -j${CPU_NUM}

上面是編譯的小腳本,下麵是編譯的輸出。

編譯and燒錄

按照(一)中介紹的,此時已經可以"make xboot_config;make -8"並得到uboot.bin,但此時這個uboot.bin是不能直接燒錄的。但無論如何,請暫且記住它的大小:176568byte。接下來,我們需要對uboot.bin進行一系列處理使它能夠在exynos4412上運行,這其中要用到下麵的幾個命令或三星提供的工具軟體,這些操作的目的就是根據三星的晶元的啟動要求對uboot.bin 進行一些處理,包括在特定長度的位置加上和校驗信息以及插入一些文件段。

$split -b 14336 uboot.bin bl2
$chksum
$add_padding
$rm bl2a*
$cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin >xboot.bin

註意到那個E4412_N.bl1.SCP2G.bin了嗎,這個文件就是前文說的三星SoC啟動過程的BL1階段。我們可以使用腳本一次性完成上面的工作。

make -j${CPU_NUM}
 
cp tools/mkimage /usr/bin/
cp u-boot.bin ${ROOTDIR}/sdfuse_q

cd ${ROOTDIR}/sdfuse_q
split -b 14336 u-boot.bin bl2   #split u-boot to bl2a... why14336???==>參考三星bl2對uboot的校驗方式,它會讀取14336處的CS校驗碼
make     #編譯chksum
${ROOTDIR}/sdfuse_q/chksum      #源碼顯示程式生成的校驗碼並沒有回寫到uboot,即uboot還是沒有校驗,不知道為什麼還成功了,但是這個>
${ROOTDIR}/sdfuse_q/add_padding
rm bl2a*
cp u-boot.bin ${ROOTDIR}/CodeSign4SecureBoot/

cd ${ROOTDIR}/CodeSign4SecureBoot
cat E4412_N.bl1.SCP2G.bin bl2.bin all00_padding.bin u-boot.bin tzsw_SMDK4412_SCP_2GB.bin > u-boot-${newName}.bin
rm ./u-boot.bin
cp -a ./u-boot-${newName}.bin $TFTPDIR
cp ./u-boot-${newName}.bin ../mk_sdboot/
 
cd ${ROOTDIR}/mk_sdboot
sudo ./sd_fusing_exynos4x12.sh /dev/sdb u-boot-${newName}.bin 

至此,我們就得到了一個能使用的鏡像xboot.bin,這個xboot.bin的大小:527104byte!然後我們就可以使用另外的一些工具燒錄到SD卡,註意如果你的開發主機對直接讀取SD卡的支持不是很好的話,可以使用讀卡器,不論是虛擬機還是Linux主機,對USB設備的支持還是讓人滿意的,燒錄很簡單,我們只需要執行下下麵的"./sd_fusing_exynos4x12.sh /dev/your_SD_device u-boot-xboot.bin"即可,這個腳本是三星公司提供的,就是將鏡像燒錄到SD卡中,下麵是我用的,貼出來供參考。

#!/bin/sh
#
# Copyright (C) 2010 Samsung Electronics Co., Ltd.
#              http://www.samsung.com/
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
# sd_fusing_exynos4x12.sh
####################################
reader_type1="/dev/sd"
reader_type2="/dev/mmcblk0"

if [ -z $2 ]
then
    echo "usage: ./sd_fusing.sh <SD Reader's device file> <filename>"
    exit 0
fi

param1=`echo "$1" | awk '{print substr($1,1,7)}'`

if [ "$param1" = "$reader_type1" ]
then
    partition=$1"1"
elif [ "$1" = "$reader_type2" ]
then
    partition=$1"p1"
else
    echo "Unsupported SD reader"
    exit 0
fi

if [ -b $1 ]       
then
    echo "$1 reader is identified."
else
    echo "$1 is NOT identified."
    exit 0
fi

####################################
echo "----------------------------------"
echo $partition
echo "----------------------------------"

# format
umount $partition 2> /dev/null

echo "$2 fusing..."
dd iflag=dsync oflag=dsync if=./$2 of=$1 seek=1 && \
        echo "$2 image has been fused successfully."

####################################
#<Message Display>
echo "Eject SD ca

將啟動模式調整到從SD卡啟動,uboot就可以跑起來了。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Windows Server2016正式發佈已經有一段時間了。無可厚非,原生Docker的支持是這個版本一個非常大的亮點。 Windows Container 的安裝在網上有很多教程,我這裡不過多的描述,可以參考: https://docs.microsoft.com/zh-cn/virtualiz ...
  • 編譯環境:RVMDK CPU :STM32F103VC 錯誤:.\obj\movSERVO.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST. 原因:項目中同時包含以下啟動 ...
  • 讀取excel文件:libxls-1.4.0.zip下載地址:http://sourceforge.net/projects/libxls/安裝方法: ./configure make make install sudo cp -r -v /usr/local/libxls/include/libx ...
  • 裝系統 Deepin是一個國產的linux發行版,因為其極高的顏值和不需要折騰的操作吸引了我。正好厭倦了windows 10,又趕上大四的畢業設計,就拿來玩玩了。 首先,Deepin系統的安裝是非常傻瓜式的,參照官網上的 "教程" 幾步就可裝好。我採用的是體驗安裝,重啟之後即可選擇進入Deepin系 ...
  • 之前要在linux下麵安裝nginx,弄了半天,終於搞定了,下麵給大家詳細一下安裝流程及安裝報錯解決方案: 安裝共分為5步搞定: 1.進入src目錄(下載存放目錄) cd /usr/local/src/ 2.wget下載:http://nginx.org/en/download.html(nginx ...
  • Windows 10 中包含了一個 WSL(Windows Subsystem for Linux)子系統,我們可以在其中運行未經修改過的原生 Linux ELF 可執行文件。利用它我們可以做很多事情,對開發人員和普通用戶都是如此。當然對開發人員的吸引力更大一些,因為這意味著在一些情況,不再需要使用... ...
  • 本文首發於:http://www.fengzheng.pub/archives/238.html 背景說明 伺服器為阿裡雲 ECS,操作系統為 CentOS 6.5。 部署配置說明 第一步,安裝nginx 之所以要先安裝 nginx,是因為下麵配置功能變數名稱解析的時候可以直接在瀏覽器看到效果,當然了,先配 ...
  • 序言 提到LVS,就從章文嵩博士開始吧,反正也不知道如何下筆來寫這一篇。章大博士,讀博時候創建這個lvs軟體項目,但是他提倡開源精神,在用戶的建議和反饋中,這個花了他兩周時間開發的開源軟體不斷得到改建和豐富。到1999年,該款軟體已在負載均衡領域中比較出名,章文嵩仍舊堅持開源,將源代碼分享給所有人。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...