u-bootの移植

6482 ワード

U-boot移植
(一)初試験
  • は公式サイトで最新のuboot(u-boot-2012.04.01)圧縮パッケージをダウンロードし、サーバーにドラッグします.1.1 SecureCRTで初めてコンパイルを試みた1.2エラー
        :        。
    
    1.3現在のクロスコンパイルツールチェーンバージョン
  • を表示する
  • 新しいコンパイルツールチェーン(arm-linux-gcc-4.3.2)をインストールします.2.1ルートディレクトリに解凍2.2環境変数の変更(ルートディレクトリ/usr/local/arm/4.3.2/binに進む)
         (   ):sudo vi /etc/environment
    
  • 再びu-bootをコンパイルし、前のu-boot-2012.04.01フォルダ3.1に入る前にコンパイルした:make distclean 3.2構成:make smdk 2410_config 3.3コンパイル:make 3.4コンパイル成功–u-boot.binファイル
  • を生成
  • u-boot.binを生成するファイルをeopでNOR Flashにダウンロードして起動しますが、シリアルポートには何も表示されません.(これは正常です.まだ修正されていませんから)
  • (二)ソース分析起動プロセス
  • siエンジニアリングを作成します.コードを追加する場合:boardフォルダに追加するだけのSamaungのsmdk 2410、archフォルダの下のArm->cpu->arm 920 t->s 3 c 24 x 0、include->Asm->arch-s 3 c 24 x 0が注目され、他のフォルダはすべて追加できます.
  • 第一段階コード分析(ファイル:start.S(archarmcpuarm 920 t)、lowlevel_init.S(boardsamsungsmdk 2410))2.1 CPUの動作モードを管理モード(svc):/*set the cpu to SVC 32 mode*/2.2ドアドッグを閉じる:/*turnoff the watchdog*/2.3/*mask all IRQs by setting all bits in the INTMR-default*/2.4 FCLK、HCLK、PCLKの割合(CLKDIVEレジスタ設定):/*FCLK:HCLK:PCLK=1:2:4*/2.5メモリコントローラ設定:cpu_init_crit
    a. /* flush v4 I/D caches */
    
    b.   MMU、CACHE:/* disable MMU stuff and caches */
    
    c.    lowlevel_init:bl  lowlevel_init
    
           BootLoader         RAM  (lowlevel_init.S)--     
    
         :       ,  S3C2440,     SDRAM  。
    
        lowlevel_init  ,    ,       、      NOR FLASH ,      ,            。
    
     137-139 :      ,             ,                   。
    
     137 :SMRDATA   13             (    ), 0x33F8xxxx,     。
    
     138 :          , “_TEXT_BASE”, board\smdk2410\config.mk   "TEXT_BASE = 0x33F80000"
    
     139 : 0x33F8xxxx 0x33F80000  ,  13      NOR Flash      。
    
    2.6スタックを設定し、C関数board_を呼び出すinit _ f:/* Set stackpointer in internal RAM to call board_init_f*/
    a.       init_sequence      :( )board_early_init_f :       、  GPIO
    
    b. board _ init _ f          :relocate_code(addr_sp, id, addr);
    
    addr: NOR Flash          ;
    
    addr_sp:    ;
    
    id:       
    
        1. addr
    
            addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;  
    
            /* CONFIG_SYS_SDRAM_BASE=0x30000000, gd->ram_size=64MB,   addr=0x34000000 */
    
    
            addr -= (4096 * 4);  /* addr = 33FFC000 */
    
            addr &= ~(0x10000 - 1); /* addr = 33FF0000 */
    
            addr -= gd->mon_len; /* gd->mon_len = _bss_end_ofs;--uboot     :AE4E0(      ),  addr= 33F41B20 */
    
            addr &= ~(4096 - 1);  /* addr=33F41000 */
    
        2. addr_sp
    
            addr_sp = addr - TOTAL_MALLOC_LEN;
    
            addr_sp -= sizeof (bd_t);
    
            addr_sp -= sizeof (gd_t);
    
            addr_sp -= 12;
    
        3. id
    
            id = (gd_t *) addr_sp; /*        gd_t */    
    
    2.7再配置コード分析再配置コード(start.Sファイル):relocate_code(addr_sp,id,addr)-C言語呼び出しアセンブリ(addr_spがr 0に格納され、idがr 1に格納され、addrがr 2に格納される)分析再配置コード2.8 clear_bss 2.9呼び出しC関数board_init_r:第2段階のコード
  • (三)修正コード
    u-bootの修正コードを移植する
    (I)修正コード—新規ボードを作成する_クロック_SDRAM _ UART
    (II)修正コード-NAND起動をサポート
    (III)修正コード-Nor Flash(読み書き)をサポート
    (IV)修正コード:Nand Flash(読み書き)をサポートする
    (V)修正コード:DM 9000 NICをサポートする
    (四)デフォルトパラメータの切り取りと修正
  • 使いやすさuboot(プロファイルsmdk 2440.hの変更)-再コンパイルされたubootサイズ
  • デフォルト・パラメータの変更2.1デフォルト・パラメータの変更-起動後、シリアル・プロンプト情報からファイルを見つけます-設定プロファイルのパラメータ2.2カーネルのパーティション
    set ipaddr 192.168.0.4
    
    set ethaddr 00:0c:29:07:33:a6
    
    set serverip 192.168.0.2
    
    tftp 30000000 uImage_4.3            
    
    bootm 30000000
    
    を参照-設定パラメータ-カーネルが起動したら、パーティション2.3を表示して環境変数のパーティションを格納するパラメータを設定します-savコマンドのヘルプ情報(saveenv)を選択し、必要なファイルを見つけます.ディレクトリに従って、フォルダの下にあるMakefileを表示し、ubootにコンパイルするために必要なマクロを見つけ、プロファイルで定義します.Env_nand.cファイルのsaveenv関数で、定義するマクロを見つけます.プロファイルでは、2.2カーネルのパーティションを参照して、マクロ
  • を設定します.
  • プロファイルをアップロードし、ubootを再コンパイルした後、シリアルポートに環境変数を設定した後、tftpで新しいubootをsdramに書き込み、コマンドでNOR Flashにコピーします.再起動後、変数を印刷します.削除する前の警告-ubootはここに移植してもほぼ完全です.
  • パーティションを設定します(便利な機能のみ)4.1 mtdpartsコマンドを追加するために必要なマクロを使用します.ubootに組み込む必要があるファイルはcmd_mtdparts.cです.依存するマクロをディレクトリの下のMakefileで見つけ、構成ファイルで定義します.4.2このマクロをubootソースコードの下でコマンド検索を実行します.grep「mtdparts」*-nR、リファレンスファイルを探し出してパーティションを設定する-リファレンスファイル-プロファイルの定義4.3先生の試験によると、Board.cファイルに1行のコード4.4を加えて修正した2つのファイルをアップロードする必要があります.再コンパイルに失敗し、この問題を解決します.4.4修正した2つのファイルをアップロードします.再コンパイルに成功した後、sdramに直接ダウンロードできます.(環境変数を設定する必要はありません)、NOR Flashにコピーして開発ボードを再起動し、mtdpartsコマンドを実行します.図のように4.5試験を印刷します.sdramにダウンロードしたコピーをNand Flashにコピーします.uImage_4.3をsdramにダウンロードします.消去します.nand erase 60000,000,000,000.nand書き込み(元:nand write 30000,000,000,000,000,000,000)
  • 最後に、私たちは前のbootcmdを修正して、再コンパイルします.このとき、ubootを焼く必要はありません.直接シリアルポートにbootcmdを設定して、保存して、再起動します.印刷して表示します.このとき、私たちは再びresetを起動します.ubootが起動すると、最後から5秒後にカーネル
  • が直接起動します.
    (五)yaffsイメージのサポート及びパッチの作成
  • 試験1–焼き書きJFFSファイルシステム1.1 tftp焼き書きファイル(埋め込み–第2期資料光ディスクbinファイルシステム)fs_mini_mdev.jffs 2
    tftp 30000000 fs_mini_mdev.jffs2
    
    1.2 Nand中ファイルシステムパーティション
    nand erase.part rootfs
    nand write.jffs2 30000000 260000 5b89a8
     :  260000             ,5b89a8  fs_mini_mdev.jffs2     (tftp       )
    
    1.3 bootargs
    set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2
    
    1.4 boot設定後、カーネルを起動し、jffs 2ファイルシステム
  • をアクティブにマウントする
  • 試験2–書き込みyaffsファイルシステム1.1開発ボードを再起動し、tftp書き込みファイル(埋め込み–第2期資料光ディスクbinファイルシステム)fs_mini_mdev.yaffs 2
    tftp 30000000 fs_mini_mdev.yaffs2
    
    Nandのファイルシステムパーティション
    nand erase.part rootfs
    nand write.yaffs 30000000 260000 889bc0
     :  260000             ,889bc0  fs_mini_mdev.yaffs2     (tftp       )
    
    にコピーして前のコマンドを実行すると、次の図のようなエラーメッセージが表示されます.プロファイルに対応するマクロを構成し、新しいubootのコンパイルと書き込みを再開した後、ファイルシステムを再書き込みします.ルートファイルを見つけます.マクロ1.3 bootargsを変更する必要はありません.デフォルトを選択すると1.4 bootになります.動コア、シリアルポートは下図のエラー指示
  • のように現れた.
  • 試験2の問題を解決する3.1ソースファイルfs_mini_mdev.yaffs 2(UEで開く)を比較し、Nandに書き込まれたファイル(nand dumpコマンド)を焼くと、Nandの最初のページのoobがソースファイルと一致せず、残りのページが
      :       Nand:     2M(  oob)
    
    -ソースファイル(最初のページoob)-nand(最初のページoob)-ソースファイル(2番目のページデータ)-nand(2番目のページデータ)と一致しないことが分かった.3.2関連書類の修正-nand不良ブロックがある場合3.3再コンパイル、焼き書きuboot
    tftp 30000000 u-boot.bin;protect off all;erase 0 3ffff;cp.b 30000000 0 40000
    
    3.4繰り返し試験2焼き書きyaffs書類システムの手順
  • ここまで来て、私达はすでに完全に2012版のubootを移植しました!!!
  • パッチファイルの作成(diffコマンドを使用)-作成手順-パッチファイル
  • を表示
  • パッチ(前のソースコード解凍後のフォルダに入る)patch-p 1<..>
     :../                 , /work/system
    
    最後に、コンパイルを構成し、新しいuboot.binファイルを生成し、tftpでNOR Flashに書き込み、yaffsファイルシステムをNANDパーティションに焼成し、boot後にマウントに成功した(前のステップで修正した効果と同じ).
  • 2017.11.25