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板の上で焼いて記録して、走ることができます!本当に手間がかかりません.次の通りです.
 
                                                                             
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フォルダの下にあります.