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

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

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

3天內不再提示

關于uboot的功能分析透徹方案

電子設計 ? 2018-07-31 09:37 ? 次閱讀

如果我們想快速的移植uboot,那么我們就要先將我們用到的uboot的功能分析透徹,uboot最終目的就是**引導內核**,但是在實際開發中為了方便開發調試,我們將uboot加入了很多功能,比如tftp下載,nfs啟動,串口打印等功能;那么我們先按著執行的順序來分析代碼。

uboot并沒有對2440進行支持,所以我們分析階段先分析smdk2410的相關代碼,分析完成以后我們在根據s3c2440的技術手冊在2410的基礎上進行移植。

Makefile分析

首先我們根據編譯過程進行分析,編譯需要執行命令:

make smdk2410_config

我們查看根目錄下Makefile文件,搜索smdk2410_config得到如下代碼:

smdk2410_config : unconfig

@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0在Makefile中;

@表示不打印后面的命令。

$(MKCONFIG)我們通過搜索MKCONFIG得到其定義如下:

MKCONFIG := $(SRCTREE)/mkconfig

SRCTREE定義如下:
SRCTREE := $(CURDIR)
CURDIR在Makefile中為內嵌變量,自動設置為當前的目錄。所以$(MKCONFIG)就等于當前目錄下的mkconfig文件;$(@:_config=)表示將目標文件的_config變為空,也就是取消目標文件的_config。

所以命令解析如下

smdk2410_config : unconfig
@mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0
所以當我們執行make smdk2410_config的時候實際是執行的是:
./mkconfig smdk2410 arm arm920t smdk2410 NULL s3c24x0
$1 $2 $3 $4 $5 $6

分析根目錄下mkconfig
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done

$#表示了傳遞進來的參數的個數;

-gt表示大于(>)的含義;

首先如果傳遞的參數個數大于0,則執行,然后在判斷$1是不是--、-a、-n、*等符號,如果是則執行相應的分支,否則繼續向下執行。

[ "${BOARD_NAME}" ] || BOARD_NAME="$1"

如果沒有定義BOARD_NAME,則讓BOARD_NAME=$1在這里就是BOARD_NAME=$1=smdk2410

[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1

-lt是小于(<)的含義;

也就是判斷傳遞進來的個數是否是小于4個或者是大于6個,如果小于4個或者大于6個則退出。

echo "Configuring for ${BOARD_NAME} board..."

打印信息Configuring for smdk2410 board...

if [ "$SRCTREE" != "$OBJTREE" ] ; then
mkdir -p ${OBJTREE}/include
mkdir -p ${OBJTREE}/include2
cd ${OBJTREE}/include2
rm -f asm
ln -s ${SRCTREE}/include/asm-$2 asm
LNPREFIX="../../include2/asm/"
cd ../include
rm -rf asm-$2
rm -f asm
mkdir asm-$2
ln -s asm-$2 asm
else
cd ./include
rm -f asm
ln -s asm-$2 asm
fi

上面代碼if [ "$SRCTREE" != "$OBJTREE" ] ; 是判斷SRCTREE 是否等于OBJTREE?

如果不等,則執行if 分支,如果相等等執行else分支,在頂層makefile 下查找可知SRCTREE 和OBJTREE 定義如下:

OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
所以:

OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))

含義:如果定義BUILD_DIR 則OBJTREE=BUILD_DIR 否則OBJTREE=CURDIR搜索mkconfig 可知:BUILD_DIR 沒有定義,即OBJTREE=CURDIR所以:SRCTREE := $(CURDIR)即SRCTREE=CURDIR,BJTREE=CURDIR 并且SRCTREE=CURDIR 所以SRCTREE=OBJTREE所以執行else 分支;

else 分支作用如下:

執行上面面三句,就相當于建立一個鏈接文件asm,它指向$2(即arm)。

這樣做的原因?

當我們在源碼中包含#include的時候不需要改動,如果是i386 呢?Avr32
呢?所以建立這個鏈接是為了不需要我們總是修改代碼,則直接寫#include即可。

rm -f asm-$2/arch

刪除asm-arm/arch文件。

if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi

如果$6 為空或者為NULL 則執行ln -s ${LNPREFIX}arch-$3 asm-$2/arch而$6=s3c6410 所以if 分支忽略即執行else 分支ln -s ${LNPREFIX}arch-$6 asm-$2/arch

分析ln -s ${LNPREFIX}arch-$6 asm-$2/arch執行上面語句相當于在asm-arm($2)目錄下面建立一個鏈接文件arch而鏈接文件arch 的指向是arch-s3c6410($6)。

if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
通過對$2的判斷發現執行此分支。

echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk

[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk

“>”表示新建文件并將內容添加進文件。

“>>”表示只在文件中添加內容。

所以上述的代碼含義就是新建config.mk文件并且將下面內容添加進config.mk文件:

ARCH = arm
CPU = arm920t
BOARD = smdk2410
VENDOR = NULL
SOC = s3c24x0

if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
判斷APPEND定義是否等于yes開頭定義APPEND等于no,所以執行else分支,新建config.h文件

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include " >>config.h

在config.h里面追加內容:

/* Automatically generated - do not edit */
#include

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • S3C2440
    +關注

    關注

    4

    文章

    132

    瀏覽量

    38743
  • Configured
    +關注

    關注

    0

    文章

    3

    瀏覽量

    7986
  • Uboot
    +關注

    關注

    4

    文章

    124

    瀏覽量

    28053
收藏 人收藏

    評論

    相關推薦

    間隔棒及輸電線路狀態實時監測裝置:功能分析、技術優勢科普

    間隔棒及輸電線路狀態實時監測裝置:功能分析、技術優勢科普 間隔棒及輸電線路狀態實時監測裝置是專為輸電線路設計的智能化監測設備,旨在提高輸電線路的穩定性和安全性。以下是深圳鼎信智慧科技對該裝
    的頭像 發表于 09-04 16:31 ?140次閱讀

    道路積水在線監測預警系統的功能分析

    ,監測道路積水情況,解決道路積水問題。 ? 道路積水在線監測預警系統依托物聯網、傳感器技術和大數據分析等先進科技手段,實現了對道路積水情況的實時監測和預警。通過在關鍵路段和易積水區域部署各種監測設備可以采集積水
    的頭像 發表于 09-04 09:59 ?151次閱讀

    地面沉降安全預警系統的功能分析

    、衛星定位,準確監測 地面沉降往往是一個緩慢而隱蔽的過程,傳統監測手段難以捕捉其細微變化。而地面沉降安全預警系統借助衛星定位技術,能夠實現對監測區域的高精度、全天候監測。通過對衛星數據的持續收集與分析,系統能
    的頭像 發表于 08-26 14:57 ?100次閱讀

    飛凌嵌入式ElfBoard ELF 1板卡-uboot階段查看命令的使用

    | 上電后,在uboot倒計時結束前按下空格,輸入9進入uboot命令行:進入uboot命令行之后,可以通過輸入“?”或者help可以查看uboot全部命令。如圖(圖未截全): 每一個
    發表于 07-13 09:37

    如何用FFT功能分析示波器的方波校準信號

    示波器儀器儀表
    安泰儀器維修
    發布于 :2024年05月06日 14:56:44

    dtu遙信功能分析

    DTU遙信功能可以通過采集和處理來自現場設備的狀態信號,將這些信號轉換成可在通信媒體上發送的數據格式,然后將其上傳至主站或子站。
    的頭像 發表于 02-25 17:14 ?2273次閱讀

    請問MA35D1的buildroot中uboot如何修改,以及uboot的開機畫面如何顯示?

    新塘MA35D1的官方軟件buildroot,修改uboot,按照官方文檔修改uboot配置項,make uboot-menuconfig。修改完成后,執行make rebuild,然后在make
    發表于 01-15 08:02

    紅外發射電路的功能分析

    紅外發射電路是紅外通信系統中的重要組成部分,其主要功能是產生和發射紅外信號。本文將詳細分析紅外發射電路的功能,包括其工作原理、主要組成部分、性能指標以及應用場景。 一、紅外發射電路的工作原理 紅外
    的頭像 發表于 12-13 11:02 ?1557次閱讀

    關于鋰電池管理系統的硬件電路方案

    本文介紹一套關于鋰電池管理系統的硬件電路方案。其本身是一套已經實際應用的成熟的方案功能包括單電池放電模組,電池組放電模組。硬件電路方案包含
    的頭像 發表于 12-11 10:57 ?1404次閱讀
    <b class='flag-5'>關于</b>鋰電池管理系統的硬件電路<b class='flag-5'>方案</b>

    uboot的啟動BL1和BL2兩個階段介紹

    語言來實現。 1、BL1階段 uboot的BL1階段代碼通常放在start.s文件中,用匯編語言實現,其主要代碼功能
    的頭像 發表于 12-04 17:53 ?2162次閱讀

    Uboot命令實現大致流程圖

    0x40。 (這里你應該知道了為什么要使用bootm命令,以及為什么要是有uImage格式) 在前面我們曾經分析Uboot的啟動流
    的頭像 發表于 12-04 17:09 ?322次閱讀
    <b class='flag-5'>Uboot</b>命令實現大致流程圖

    UBoot如何跳轉Kernel

    首先我們知道kernel的鏡像最開始是壓縮的zImage格式的存在,然后Uboot有工具mkimage把其轉換為uImage。 什么?不知道?好,那我先給你整兩幅圖瞅瞅,你就知道了! 億圖這個水印
    的頭像 發表于 12-04 17:02 ?377次閱讀
    <b class='flag-5'>UBoot</b>如何跳轉Kernel

    關于無功補償問題的探討及其解決方案

    電子發燒友網站提供《關于無功補償問題的探討及其解決方案.doc》資料免費下載
    發表于 11-01 11:15 ?0次下載
    <b class='flag-5'>關于</b>無功補償問題的探討及其解決<b class='flag-5'>方案</b>

    uboot的基本概念和啟動流程分析

    當我們厭倦了裸機程序,而想要采用操作系統的時候,uboot就是不得不引入的一段程序。所以,uboot就是一段引導程序,在加載系統內核之前,完成硬件初始化,內存映射,為后續內核的引導提供一個良好的環境。uboot是bootload
    的頭像 發表于 10-24 17:19 ?2115次閱讀
    <b class='flag-5'>uboot</b>的基本概念和啟動流程<b class='flag-5'>分析</b>

    Rockchip Linux SDK uboot logo開發指南

    arm嵌入式vs-rk3399 板卡uboot logo 開發指南概述:本文檔主要介紹 rockchip linux sdk uboot logo 顯示的相關功能、配置以及開發過程中的注意事項。適用于 rockhip linux
    發表于 10-09 08:12