Tiny 210 s 5 pv 210 ubrot移植(コンパイルプロセス)
13120 ワード
公式git cloneから降りたbrotに基づいて修正します.ただ、フレームを修正しました.コンパイルを通して、ubootのアーキテクチャを熟知して、ボードが使えるようにするには、メニューを表示する必要があります.多くのコードを追加する必要があります.NandFlashとNorFlashについては、まだ多くの周辺デバイスがあります.datasheetによって修正する必要があります.http://blog.csdn.net/liukun321/article/details/8610868.
私はそれのver 4.0のbbootの中のting 210-boot.binを友好的な腕のminitoolの上のandroid boott loaderのオプションを通じて(通って)、iny 210板の上で焼いて記録して、走ることができます!本当に手間がかかりません.次の通りです.
つのubootを共有してハンド・バックを移植します.http://download.csdn.net/detail/xzongyuan/7615757を参照してください、感じは、単にいくつかのコードを削除することはできませんが、他の人の説明によると、ドキュメントとコードを持って一歩ずつ来ることができます.しかし、自分で移植するには、裸のボードの開発について深く勉強しなければなりません.そうでなければ、どこでどのような変更が行われているのか判断するのは難しいです.そして、flashの裸ボードの開発を特に重視します.もともとはボードの開発を大体知っておけばいいと思いましたが、モジュールごとに深く勉強しないと、uboot移植は大変です.
下は自分で作ったソースコードのコンパイルです.移植前の準備と言えるでしょう.まずキーファイルを準備して、コードの詳細は後でゆっくり検討します.
1.Makefileにクロスコンパイルツールを追加する
ソース:
@代表的なのはtaget sdk 2410_です.configでは、(@:config=)はsdk 2410_です.config中の_configを空に置き換えます.手に入れる
mkconfig-A smdk 2440 aechoで自分でプリントアウトして見れば分かります.
友好的な腕を移植するなら、ここをdatasheetによって修正します.s 5 pc 210を参照して修正します.
方法2:boards.cfgを修正する
boards.cfgに設定を入れて、mkconfigでは、Makefileにパラメータが入力されていないと、boards.cfgで探すと判断します.次の第三条を参照してください.
3.次にmkconfigを見て、次のようなパラメータが定義されています.ルートディレクトリの下のboards.cfgの一行を読むことによって、対応するパラメータをスキャンし、それらに値を与えます.
mkconfig-A s 5 pv 210のs 5 pv 210
$0 $1 $2
この文はMakefileで変換されました.
boards.cfgの中で、私はこのような一行を増加しました.
Active アーム armv 7 s 5 pv 210 samsung ting 210 ting 210($1) $2 $3 $4 $5 $6 $7 この行は解釈行です
s 5 pc 1 xxを参考にしてください(s 5 pv 210カーネルはs 5 pc 110と同じです.パッケージだけが違っています.インターネットで見つけた情報は後述します.)Active アーム armv 7 s 5 pc 1 xx samsung sdkc 100 sdkc 100
awkの規則によると、$0は行全体を表し、$1は最初のフィールドを表します.彼らの割当関係は以下のパラメータ対応表のとおりです.
$1=>Active
$2=>arm——アーキテクチャarch
$3=>cpu/spl_cpu---armv 7 CPUタイプ
$4=>soc ----- s 5 pv 210
$5=>ベンダdor--- samsung
$6=>board --- ting 210
$7=>CONFIG_NAME ---- ting 210
$8=>tmp/option -- ブラック
mkconfigの前の部分はcfgファイルを読んでパラメータに値を付けます.後半の部分のコードはこれらのパラメータechoをconfig.hファイルに入力します.ソースコードは最初はconfig.hがなくて、コンパイルした後にやっと発生するのです.下のコードを見ることができます.ヘッダファイルにたくさん入力しました.
萼デfine CONFIG_SYS_xxxx
これらのパラメータは全部boards.cfgに配置されています.
board/samsung/上のsdkc 100をting 210にコピーします.これはボード名です.board.cfgと一致するように注意してください.でないと見つけられません.
資料を検索したらs 5 pc 210はCortextA 9のもので、S 5 pv 210はCortex A 8のものです.s 5 pc 110とs 5 pv 210は同じデザインで、異なるパッケージですので、sdkc 100のボードで構成します.
make ting 210_config
include/config.hでは次のような内容が発生します.s 5 pv 210をs 5 pc 1 xxに変更すると、エラーが出るかもしれませんが、先に効果を見てみます.
結び目:各チップの配置は非常に違っています.同じデザインのものを見つけなければなりません.適当に一つを持って移植してはいけません.例えばs 5 pc 210を持って移植してはいけません.文字は似ていますが.しかし、コードの差は非常に大きいです.stage 2の初期化のように、uoot_src/board/samsung/sdkc 100/lowlevel_init.Sのセグメントは、以下のように、非常に多くのアドレスとレジスタが動作します.チップが違ったら、再設計します.
コンパイルにエラーが発生しました
include/configs/tiny 210.h:24:57:fatal error:asm/arch/cpu.h:No such file or directory complation terminated.どうやらbrotディレクトリ構造が変化してエラーが発生したようです.おかしいです.smdkc 100をコンパイルしました.この問題はありません.
boards.cfgのsocのようです.s 5 pv 210に設定した理由をs 5 pc 1 xxに変更しました.下記の通りです.
Active アーム armv 7 s 5 pc 1 xx samsung ting 210 ting 210
再配置してください.でないと、socの設定は変更されていません.
make ting 210_config
メーク
合格しました当ててくれました.ストレスなくコンパイルされました.
arch/arm/include/sam/archは具体的なsocフォルダarch-USSOCにリンクします.ここではconfig.mkでSOCはs 5 pc 1 xxと定義されています.Makefileは判断しています.もし対応するarch-SOCが見つけられたら、ファイルで関連ディレクトリをリンクします.もし一致していないなら、arch/arm/arm/下でpuch/arc.を探します.
私はそれのver 4.0のbbootの中のting 210-boot.binを友好的な腕のminitoolの上のandroid boott loaderのオプションを通じて(通って)、iny 210板の上で焼いて記録して、走ることができます!本当に手間がかかりません.次の通りです.
Superboot-210
Ver: 1.22a(20140106)
CPU: S5PV210 1GHz
RAM: 512MB
NAND: 256MB(SLC) ID:ECDA1095
Touch Device: 1-wire
LCD Type: S70(Auto)
USB Mode: Waiting...
USB Mode: Connected
Installing bootloader...
Installing bootloader succeed
OKOKraise: Signal # 8 caught
########################################################
# Modified by GJGJ http://blog.csdn.net/liukun321 #
########################################################
U-Boot 2011.06 (Jan 31 2013 - 16:53:18) for FriendlyLEG-TINY210
CPU: S5PC110@1000MHz
Board: FriendlyLEG-TINY210
DRAM: 512 MiB
WARNING: Caches not enabled
PWM Moudle Initialized.
NAND: 256 MiB
MMC: SAMSUNG SD/MMC: 0, SAMSUNG SD/MMC: 1
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: Please set ethaddr!
dm9000Warning: failed to set MAC address
走ることができるなら、これからはゆっくり遊べます.very good!つのubootを共有してハンド・バックを移植します.http://download.csdn.net/detail/xzongyuan/7615757を参照してください、感じは、単にいくつかのコードを削除することはできませんが、他の人の説明によると、ドキュメントとコードを持って一歩ずつ来ることができます.しかし、自分で移植するには、裸のボードの開発について深く勉強しなければなりません.そうでなければ、どこでどのような変更が行われているのか判断するのは難しいです.そして、flashの裸ボードの開発を特に重視します.もともとはボードの開発を大体知っておけばいいと思いましたが、モジュールごとに深く勉強しないと、uboot移植は大変です.
下は自分で作ったソースコードのコンパイルです.移植前の準備と言えるでしょう.まずキーファイルを準備して、コードの詳細は後でゆっくり検討します.
1.Makefileにクロスコンパイルツールを追加する
CROSS_COMPILE = arm-linux-
#
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif
2.メークの前にメークが必要です.configは、Makefileでは、MKCONFIGがルートディレクトリのmkconfigに対応するコードで実装されているボードのパラメータを構成します.ソース:
%_config:: outputmakefile
@$(MKCONFIG) -A $(@:_config=)
config構成方法一:Makefileを修正する.s5pv210_config : outconfig
@$(MKCONFIG) $(@:_config=) arm armv7 tiny210 samsung s5pv210
$0 $1 $2 $3 $4ボード名 $5 ventdor $6 Soc @代表的なのはtaget sdk 2410_です.configでは、(@:config=)はsdk 2410_です.config中の_configを空に置き換えます.手に入れる
mkconfig-A smdk 2440 aechoで自分でプリントアウトして見れば分かります.
友好的な腕を移植するなら、ここをdatasheetによって修正します.s 5 pc 210を参照して修正します.
方法2:boards.cfgを修正する
boards.cfgに設定を入れて、mkconfigでは、Makefileにパラメータが入力されていないと、boards.cfgで探すと判断します.次の第三条を参照してください.
3.次にmkconfigを見て、次のようなパラメータが定義されています.ルートディレクトリの下のboards.cfgの一行を読むことによって、対応するパラメータをスキャンし、それらに値を与えます.
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
TARGETS=""
arch=""
cpu=""
board=""
vendor=""
soc=""
options=""
スキャンパラメータのコードを実現し、awkツールで$srtree/boards.cfgファイルを処理することができます.次に$1~$8のパラメータをライン変数に印刷します.if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
# Automatic mode
line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`
if [ -z "$line" ] ; then
echo "make: *** No rule to make target \`$2_config'. Stop." >&2
exit 1
fi
set ${line}
# add default board name if needed
[ $# = 3 ] && set ${line} ${1}
fi
注意、awkは$2_によるとconfigで対応する行を探していますが、失敗した行を見ることができます.これは$2ですmkconfig-A s 5 pv 210のs 5 pv 210
$0 $1 $2
この文はMakefileで変換されました.
boards.cfgの中で、私はこのような一行を増加しました.
Active アーム armv 7 s 5 pv 210 samsung ting 210 ting 210($1) $2 $3 $4 $5 $6 $7 この行は解釈行です
s 5 pc 1 xxを参考にしてください(s 5 pv 210カーネルはs 5 pc 110と同じです.パッケージだけが違っています.インターネットで見つけた情報は後述します.)Active アーム armv 7 s 5 pc 1 xx samsung sdkc 100 sdkc 100
awkの規則によると、$0は行全体を表し、$1は最初のフィールドを表します.彼らの割当関係は以下のパラメータ対応表のとおりです.
$1=>Active
$2=>arm——アーキテクチャarch
$3=>cpu/spl_cpu---armv 7 CPUタイプ
$4=>soc ----- s 5 pv 210
$5=>ベンダdor--- samsung
$6=>board --- ting 210
$7=>CONFIG_NAME ---- ting 210
$8=>tmp/option -- ブラック
mkconfigの前の部分はcfgファイルを読んでパラメータに値を付けます.後半の部分のコードはこれらのパラメータechoをconfig.hファイルに入力します.ソースコードは最初はconfig.hがなくて、コンパイルした後にやっと発生するのです.下のコードを見ることができます.ヘッダファイルにたくさん入力しました.
萼デfine CONFIG_SYS_xxxx
これらのパラメータは全部boards.cfgに配置されています.
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h
else
> config.h # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
for i in ${TARGETS} ; do
i="`echo ${i} | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'`"
echo "#define CONFIG_${i}" >>config.h ;
done
echo "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.h
echo "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.h
echo "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h
[ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h
[ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.h
[ "${board}" ] && echo "#define CONFIG_BOARDDIR board/$BOARDDIR" >> config.h
cat << EOF >> config.h
#include
#include
#include
4.配置が完了したら、対応するs 5 pv 210ディレクトリとファイルを作成する必要があります.board/samsung/上のsdkc 100をting 210にコピーします.これはボード名です.board.cfgと一致するように注意してください.でないと見つけられません.
norton@norton-laptop:~/learning/friendly/uboot/board/samsung$ mv smdkc100.c tiny210.c
norton@norton-laptop:~/learning/friendly/uboot/board/samsung$ ls
arndale common goni origen smdk2410 smdk5250 smdk5420 smdkc100 smdkv310 tiny210 trats trats2 universal_c210
その後、tiny 210フォルダのsdkc 100.1をting 21.01に変更し、makeflieに対応しています.oファイルも改名します.資料を検索したらs 5 pc 210はCortextA 9のもので、S 5 pv 210はCortex A 8のものです.s 5 pc 110とs 5 pv 210は同じデザインで、異なるパッケージですので、sdkc 100のボードで構成します.
,Cortex-A8, S5PC110(S5PC111) S5PV210
S5PC110(111) , RAM POP , ,
S5PV210 ,RAM PCB
, A9, S5PC210 S5PV310
S5PC210(111) , RAM POP ,
S5PV310 ,RAM PCB
5.include/configフォルダの下にsdkc 100.hというボードがあります.s 5 pc 1 xxを使って、s 5 pv 210の内部デザインと同じです.これを使って修正します.uboot/include/configs$ cp smdkc100.h tiny210.h
6.コンパイル、テストmake ting 210_config
norton@norton-laptop:~/learning/friendly/uboot$ make tiny210_config -j36
Configuring for tiny210 board...
は前の分析のように、このコマンドは主にmkconfigを実行しています.以下のような構成ファイルが発生します.大きな問題はないはずです.正常に動作します.include/config.hでは次のような内容が発生します.s 5 pv 210をs 5 pc 1 xxに変更すると、エラーが出るかもしれませんが、先に効果を見てみます.
/* Automatically generated - do not edit */
#define CONFIG_SYS_ARCH "arm"
#define CONFIG_SYS_CPU "armv7"
#define CONFIG_SYS_BOARD "tiny210"
#define CONFIG_SYS_VENDOR "samsung"
#define CONFIG_SYS_SOC "s5pv210"
#define CONFIG_BOARDDIR board/samsung/tiny210
#include
#include
#include
#include
#include
#include
~
と同じ経路でconfig.mkが発生しました.内容は以下の通りです.ARCH = arm
CPU = armv7
BOARD = tiny210
VENDOR = samsung
SOC = s5pv210
は、board.cfgの内容がこの経路に入力されていることがわかります.結び目:各チップの配置は非常に違っています.同じデザインのものを見つけなければなりません.適当に一つを持って移植してはいけません.例えばs 5 pc 210を持って移植してはいけません.文字は似ていますが.しかし、コードの差は非常に大きいです.stage 2の初期化のように、uoot_src/board/samsung/sdkc 100/lowlevel_init.Sのセグメントは、以下のように、非常に多くのアドレスとレジスタが動作します.チップが違ったら、再設計します.
.globl lowlevel_init
lowlevel_init:
mov r9, lr
/* r5 has always zero */
mov r5, #0
ldr r8, =S5PC100_GPIO_BASE
/* Disable Watchdog */
ldr r0, =S5PC100_WATCHDOG_BASE @0xEA200000
orr r0, r0, #0x0
str r5, [r0]
/* setting SRAM */
ldr r0, =S5PC100_SROMC_BASE
ldr r1, =0x9
str r1, [r0]
/* S5PC100 has 3 groups of interrupt sources */
ldr r0, =S5PC100_VIC0_BASE @0xE4000000
ldr r1, =S5PC100_VIC1_BASE @0xE4000000
ldr r2, =S5PC100_VIC2_BASE @0xE4000000
/* Disable all interrupts (VIC0, VIC1 and VIC2) */
mvn r3, #0x0
str r3, [r0, #0x14] @INTENCLEAR
str r3, [r1, #0x14] @INTENCLEAR
str r3, [r2, #0x14] @INTENCLEAR
/* Set all interrupts as IRQ */
str r5, [r0, #0xc] @INTSELECT
str r5, [r1, #0xc] @INTSELECT
str r5, [r2, #0xc] @INTSELECT
/* Pending Interrupt Clear */
str r5, [r0, #0xf00] @INTADDRESS
str r5, [r1, #0xf00] @INTADDRESS
str r5, [r2, #0xf00] @INTADDRESS
/* for UART */
bl uart_asm_init
/* for TZPC */
bl tzpc_asm_init
メークコンパイルにエラーが発生しました
include/configs/tiny 210.h:24:57:fatal error:asm/arch/cpu.h:No such file or directory complation terminated.どうやらbrotディレクトリ構造が変化してエラーが発生したようです.おかしいです.smdkc 100をコンパイルしました.この問題はありません.
boards.cfgのsocのようです.s 5 pv 210に設定した理由をs 5 pc 1 xxに変更しました.下記の通りです.
Active アーム armv 7 s 5 pc 1 xx samsung ting 210 ting 210
再配置してください.でないと、socの設定は変更されていません.
make ting 210_config
メーク
合格しました当ててくれました.ストレスなくコンパイルされました.
LD u-boot
arm-linux-ld: warning: creating a DT_TEXTREL in object.
OBJCOPY u-boot.srec
OBJCOPY u-boot.bin
cpu.hを検索しました.norton@norton-laptop:~/learning/friendly/uboot$ find -name cpu.h
./arch/m68k/cpu/mcf52x2/cpu.h
./arch/arm/cpu/arm720t/tegra-common/cpu.h
./arch/arm/include/asm/arch-imx/cpu.h
./arch/arm/include/asm/arch-orion5x/cpu.h
./arch/arm/include/asm/arch-s5pc1xx/cpu.h
./arch/arm/include/asm/arch-pantheon/cpu.h
./arch/arm/include/asm/arch-omap4/cpu.h
./arch/arm/include/asm/arch-armada100/cpu.h
./arch/arm/include/asm/arch-kirkwood/cpu.h
./arch/arm/include/asm/arch-sunxi/cpu.h
./arch/arm/include/asm/arch-am33xx/cpu.h
./arch/arm/include/asm/arch-omap5/cpu.h
./arch/arm/include/asm/arch-lpc32xx/cpu.h
./arch/arm/include/asm/arch-exynos/cpu.h
./arch/arm/include/asm/arch-omap3/cpu.h
./arch/blackfin/cpu/cpu.h
どのMakefileがasm/arch-s 5 pc 1 xx/cpu.hを含んでいますか?私は更にting 210.hを探して内容を見てみます. arch/arm/include/sam/archは具体的なsocフォルダarch-USSOCにリンクします.ここではconfig.mkでSOCはs 5 pc 1 xxと定義されています.Makefileは判断しています.もし対応するarch-SOCが見つけられたら、ファイルで関連ディレクトリをリンクします.もし一致していないなら、arch/arm/arm/下でpuch/arc.を探します.
norton@norton-laptop:~/learning/friendly/uboot/arch/arm/include/asm$ ll arch
lrwxrwxrwx 1 norton norton 12 2014-07-09 17:26 arch -> arch-s5pc1xx/
しかし、arch/arm/cpu/armv 7/s 5 pv 210は空のファイルであることが分かりました.以前にコンパイルした時、修正しなかったため、このフォルダは存在しません.関連のファイルは同じパスのs 5 pc 1 xxフォルダの下にあります.