該系列教程會(huì)根據(jù)uboot的編譯過(guò)程進(jìn)程分析,如何編譯,那么將會(huì)如何分析這些流程
此處我還沒(méi)有增加6410的支持,先看6400 的過(guò)程,因?yàn)檫€沒(méi)有到增加的地方,分析完整個(gè)流程之后,會(huì)寫如何移植uboot到s3c6410的。知道了工作的流程,再去移植會(huì)事半功倍的。
拿到uboot首先會(huì)修改編譯的目標(biāo):
make smdk6400_config
對(duì)執(zhí)行如下的目標(biāo)
#######################################################
## ARM1176 Systems
#######################################################
smdk6400_noUSB_config
smdk6400_config : unconfig
@mkdir -p $(obj)include $(obj)board/samsung/smdk6400
@mkdir -p $(obj)nand_spl/board/samsung/smdk6400
@echo '#define CONFIG_NAND_U_BOOT' > $(obj)include/config.h
@if [ -z '$(findstring smdk6400_noUSB_config,$@)' ]; then
echo 'RAM_TEXT = 0x57e00000' >> $(obj)board/samsung/smdk6400/config.tmp;
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;
else
echo 'RAM_TEXT = 0xc7e00000' >> $(obj)board/samsung/smdk6400/config.tmp;
$(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx;
fi
@echo 'CONFIG_NAND_U_BOOT = y' >> $(obj)include/config.mk
這里主要看的是如下2句
echo 'RAM_TEXT = 0x57e00000' >> $(obj)board/samsung/smdk6400/config.tmp;
$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;
首先會(huì)將RAM_TEXT = 0x57e00000 寫入到$(obj)board/samsung/smdk6400/config.tmp 這個(gè)文件內(nèi)
$(obj) 是目標(biāo)的編譯生成的路勁或者是當(dāng)前UBOOT的目錄,這就要看你有沒(méi)有指定編譯目錄了
重點(diǎn)分析$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;
會(huì)調(diào)用$(MKCONFIG) 而 MKCONFIG := $(SRCTREE)/mkconfig
也就是說(shuō)最終會(huì)變成如下形式
mkconfig smdk6400 arm arm1176 smdk6400 samsung s3c64xx
下面就得進(jìn)入mkconfig的代碼內(nèi)進(jìn)行分析。。記錄上面的參數(shù),請(qǐng)大家打開對(duì)應(yīng)的文件,一步步的看著然后分析
#!/bin/sh -e
# Script to create header files and links to configure
# U-Boot for a specific board.
#
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
#
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk
#
這里有一句說(shuō)明了參數(shù)的意思Parameters: Target Architecture CPU Board [VENDOR] [SOC]
對(duì)應(yīng)我們傳遞進(jìn)來(lái)的參數(shù)看到為:
Parameters:
1:Target = smdk6400
2:Architecture = arm
3:CPU = arm1176
4:Board = smdk6400
5:[VENDOR] = samsung
6:[SOC] = s3c64xx
APPEND=no # Default: Create new config file
BOARD_NAME='' # Name to print in make output
TARGETS=''
while [ $# -gt 0 ] ; do
case '$1' in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME='${1%%_config}' ; shift ;;
-t) shift ; TARGETS='`echo $1 | sed 's:_: :g'` ${TARGETS}' ; shift ;;
*) break ;;
esac
done
這里顯示沒(méi)有沒(méi)有特殊的標(biāo)志,所以就不需要了
[ '${BOARD_NAME}' ] || BOARD_NAME='$1'
[ $# -lt 4 ] && exit 1
[ $# -gt 6 ] && exit 1
if [ '${ARCH}' -a '${ARCH}' != '$2' ]; then
echo 'Failed: $ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}' 1>&2
exit 1
fi
echo 'Configuring for ${BOARD_NAME} board...'
/*這句就是我們看到的配置信息了*/
下面開始創(chuàng)建針對(duì)目標(biāo)平臺(tái)的連接目錄了。uboot是這么編譯的,將選中的平臺(tái)相關(guān)的文件夾,通過(guò)軟連接的方式,到一個(gè)指定的目錄
那么編譯的時(shí)候,就只要去這個(gè)統(tǒng)一的指定目錄下找,就能針對(duì)不同的平臺(tái)編譯了。具體看下下面的建立過(guò)程
#
# Create link to architecture specific headers
#
/* 這里表示目標(biāo)目錄跟源碼目錄不一致,建立相應(yīng)的目錄,由于我沒(méi)有指定目標(biāo)目錄,所以執(zhí)行else部分 */
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
/* 刪除asm目錄 */
rm -f asm
/*
* 建立asm指向?qū)?yīng)的目錄,根據(jù)我上面標(biāo)的,$2就是 2:Architecture = arm
* 所以這里就是 ln -s asm-arm asm
*/
ln -s asm-$2 asm
fi
/*
* 這里開始建立arch目錄,有了上面的asm目錄建立,這里就簡(jiǎn)單多了
* 刪除 rm -f asm-arm/arch
*/
rm -f asm-$2/arch
if [ -z '$6' -o '$6' = 'NULL' ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
/*
* ln -s arch-s3c64xx asm-arm/arch
*/
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
fi
/* 如果是arm平臺(tái),需要多建立一個(gè)proc目錄 */
if [ '$2' = 'arm' ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi
#
# Create include file for Make
#
/*
* 這里為make編譯的時(shí)候創(chuàng)建一些環(huán)境變量,寫入到config.mk文件
*/
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
# Assign board directory to BOARDIR variable
if [ -z '$5' -o '$5' = 'NULL' ] ; then
BOARDDIR=$4
else
BOARDDIR=$5/$4
fi
#
# Create board specific header file
#
/*
* 開始創(chuàng)建特殊的頭文件,被好多文件加載的
* APPEND = no,于是創(chuàng)建了新的config.h
*/
if [ '$APPEND' = 'yes' ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
/* 寫入如下信息到該新建的頭文件內(nèi) */
echo '/* Automatically generated - do not edit */' >>config.h
for i in ${TARGETS} ; do
echo '#define CONFIG_MK_${i} 1' >>config.h ;
done
cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include
/* 這里需要注意的是,$1 對(duì)應(yīng)的是smdk6400 正好指定了 include/config/smdk6400.h 配置頭文件,也就是為什么移植需要該這個(gè)頭文件,否則找不到的原因 */
#include
#include
上一篇:u-boot2010.03 移植篇(三)-----進(jìn)一步修改start.S,smdk6410.h,支持nand啟動(dòng)及配置DM9000網(wǎng)卡
下一篇:uboot移植到6410開發(fā)板的過(guò)程及環(huán)境變量的修改
推薦閱讀最新更新時(shí)間:2025-04-23 17:58





設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無(wú)刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無(wú)線智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- EVAL-AD7719-EB,使用 AD7719、24 位、雙 Sigma Delta 模數(shù)轉(zhuǎn)換器的評(píng)估板
- EVAL-ADuCM360QSPZ,用于 ADuCM361 低功耗全集成 24 位數(shù)據(jù)采集系統(tǒng)的 QuickStart Plus 套件
- LT6201 的典型應(yīng)用 - 雙路 165MHz、軌到軌輸入和輸出、0.95nV/vHz 低噪聲運(yùn)算放大器系列
- TFA9895 具有揚(yáng)聲器升壓保護(hù)和多頻段動(dòng)態(tài)范圍壓縮器的升壓 D 類音頻放大器的典型立體聲應(yīng)用
- 使用 Analog Devices 的 LT1182CS 的參考設(shè)計(jì)
- OP184ESZ-REEL 運(yùn)算放大器噪聲電路模型的典型應(yīng)用,用于確定總電路等效輸入噪聲電壓
- EVAL-AD5143DBZ,用于 AD5143 四通道、256 位、非易失性存儲(chǔ)器、數(shù)字電位計(jì)的評(píng)估板
- 【物聯(lián)網(wǎng)】基于海思hi3861的鴻蒙物聯(lián)網(wǎng)智能開關(guān)
- 【訓(xùn)練營(yíng)】物聯(lián)網(wǎng)時(shí)鐘
- LED驅(qū)動(dòng)器探索板
- 關(guān)于動(dòng)力電池月度數(shù)據(jù)的一些分析
- 天音控股聯(lián)合收購(gòu)某手機(jī)品牌 業(yè)界人士:與好幾家在談
- 氣體檢測(cè)儀究竟是什么?
- 高性能電機(jī)和伺服驅(qū)動(dòng)器控制優(yōu)化Σ-Δ調(diào)制電流測(cè)量方案
- 瑞薩電子面向無(wú)刷直流電機(jī)應(yīng)用的全新可編程智能柵極驅(qū)器
- s3c2440a啟動(dòng)過(guò)程詳解
- Akamai報(bào)告顯示 APJ 區(qū)域金融服務(wù)業(yè) Web 應(yīng)用程序和 API 攻擊增加了近 250%
- 分享一個(gè)50瓦M(jìn)OSFET放大器電路
- Synopsys長(zhǎng)期 AI 投資正在取得回報(bào)
- 吉利電池安全標(biāo)準(zhǔn)升級(jí),“神盾金磚電池”有什么技術(shù)亮點(diǎn)?
- 中國(guó)汽車工程學(xué)會(huì)出臺(tái)全固態(tài)電池新標(biāo)準(zhǔn)
- Allegro如何用技術(shù)定義汽車電子新范式
- 恩智浦半導(dǎo)體推出汽車級(jí)開發(fā)平臺(tái)OrangeBox 2.0 旨在促進(jìn)安全的汽車通信
- 三大上市公司加碼/跨界固態(tài)電池關(guān)鍵材料!
- 一大波全固態(tài)電池新產(chǎn)品來(lái)了!
- 欣旺達(dá)/瑞浦/恩捷/力華/杜爾······12大企業(yè)電池行業(yè)新品來(lái)襲
- 新唐科技發(fā)布第四代『GerdaTM』系列,車用HMI顯示IC產(chǎn)品開始量產(chǎn)
- 寧德時(shí)代的電+Momenta的腦,“智電雙極”重構(gòu)全球汽車格局
- 一文讀懂:固態(tài)電池產(chǎn)業(yè)鏈通覽
- Follow me第二季第3期來(lái)啦!與得捷一起解鎖高性能開發(fā)板【EK-RA6M5】超能力!
- 等你報(bào)名做客黑科技直播間:基于 TI DLP®技術(shù)的工業(yè)創(chuàng)新應(yīng)用介紹
- 有獎(jiǎng)直播|ADI電機(jī)控制解決方案
- ST電機(jī)評(píng)測(cè)有獎(jiǎng)大作戰(zhàn):領(lǐng)取任務(wù)卡,一起啃電機(jī)驅(qū)動(dòng)難題!
- 喜大普奔,起底USB Tybe-C 五大干貨!
- 【EEWORLD第二十九屆】2011年08月社區(qū)明星人物揭曉!
- 是德科技電子書,下載有禮進(jìn)行時(shí)!
- 您的電路保護(hù)有足夠的空間嗎?Littelfuse的881系列保險(xiǎn)絲迎接這一挑戰(zhàn)
- 羅永浩在“嚇尿”發(fā)布會(huì)之后,自己整理了十五條問(wèn)答
- HTC U12+官網(wǎng)正式發(fā)布 沒(méi)想到拍照能贏過(guò)華為P20
- 搜狗錄音翻譯筆評(píng)測(cè):錄音筆+互聯(lián)網(wǎng)的新玩法
- 隨著小米8發(fā)布,MIUI10系統(tǒng)也要來(lái)了!
- 余承東說(shuō)“很嚇人的技術(shù)” 6月推出速度秒殺一切手機(jī)
- 我國(guó)首個(gè)煤礦巷道壓縮空氣儲(chǔ)能電站項(xiàng)目落地
- 每顆處理器賠35美元!AMD陳年老官司終于和解了
- 總投300億元,正威國(guó)際5G新材料產(chǎn)業(yè)園落戶如皋
- 2019大學(xué)生智能汽車競(jìng)賽結(jié)束 恩智浦傾力智能時(shí)代人才培養(yǎng)
- 中國(guó)AI算力Top10“榜單”變化大,北京登榜首
- 新手可要好好看看,里面可是很繞人的哦……
- MCU電源電路及元件選型考慮
- usbps_v1_02_a的ULPI_VIEWPORT的讀寫問(wèn)題
- 串口調(diào)試遇到的問(wèn)題
- TI高性能充放電方案在電池測(cè)試設(shè)備(Battery Test System)中的應(yīng)用
- 一些關(guān)于WINCE的問(wèn)題
- 本人菜鳥,請(qǐng)各位高手指出我程序中的錯(cuò)誤,謝謝!
- 變壓器內(nèi)發(fā)出聲響的判斷及處理方法分析
- 基于TMS320DM368的高清視頻采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 福利:簡(jiǎn)單注冊(cè)獲取多篇關(guān)于信號(hào)完整性的電子書和直播學(xué)習(xí)視頻