Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> そして、LinuxカーネルuBootには、いくつかのアドレスを必要とするパラメータ

そして、LinuxカーネルuBootには、いくつかのアドレスを必要とするパラメータ

  



の複数のアドレスに関与uBoot Linuxカーネルのパラメータ
感謝と理解しました************************************************* < BR>

アーチ/腕/Makefileの

//仮想アドレスを実行するためのカーネルTEXTADDR = 0xC0008000

******************* ******************************

アーチ/腕/ブーツ/Makefileの

//カーネルのロードアドレスZRELADDR = 0x20008000

*************************************自己解凍ZTEXTADDR = 0x00000000の

(Linuxを************

アーチ/アーム/ブート/圧縮/Makefileの

//アドレス自己解凍gunzipはあり

/lib/inflate.cの-2.4.19-rmk7コア機能gzipで1.0.3をするために、バージョンがPC上にgzip

圧縮機能を使用していますファイルにgunzip gzipで1.0.3バージョンを識別することができない、のlinux-2.4.19-rmk7

、デフォルト値ZTEXTADDR = 0x00000000の

が表現されていない自己解凍のカーネル関数が利用できないに等しくされます使用しています。(のみuBootのgunzipを解凍によってロードすることができます)


************************* ************ **********

//uImageストアアドレス= 0x21000000

********************* **************************

mkimage -Aアーム-O Linuxの-C GZIP -a 0x20008000 -e 0x20008000 -d linux.bin.gzをuImage

-A:CPUタイプ

-O OS
ログイン

-C:
を用いる圧縮方法

-a:カーネルロードアドレス

-e:カーネル・エントリ・アドレス

*********************** ************************

do_bootmのuBoot(cmd_tbl_t * cmdtp、INTフラグ、int型ARGC、CHAR * ARGV []); /*画像ヘッダのマジック;
は、

アドレス0x21000000
uImageフォーマットされたデータmkimage

構造体image_headerのtypedef {

のuint32_t ih_magicにおけるヘッドを通して機能試験に格納されています番号* /

のuint32_t ih_hcrc; /*画像ヘッダCRCチェックサム* /

ih_timeのuint32_t; /*画像の作成タイムスタンプ* /

ih_sizeのuint32_t; /*画像の容量* /

のuint32_t ih_load; /*データのロードアドレス* /

のuint32_t ih_ep; /*エントリ・ポイント・アドレス* /

のuint32_t ih_dcrc; /*画像データのCRCチェックサム* /

uint8_t ih_os; /*オペレーティングシステム* /

uint8_t ih_arch; /* CPUアーキテクチャ* /

uint8_t ih_type; /*イメージタイプ* /

uint8_t ih_comp; /*圧縮タイプ* /

uint8_t ih_name [IH_NMLEN]; /*イメージ名* /

} image_header_t;

(ih_ep値0x20008000、ih_load値0x20008000)

各ヘッド場合

gunzipは((void *型)ntohl(HDR:でgunzipを解凍機能

+圧縮されたカーネルアドレスを次のようにCRCしきい値と合法的に、そしてdo_bootmが呼び出されます(image_header_t)はsizeof 0x21000000を解凍 - > ih_load)、0x400000、データ、(int *)& len);

1。 hdr-> ih_load出力データアドレス0x20008000の

出力データを解凍gunzipを2.0x400000上限-4M

3。データは入力データアドレスdata = 0x21000000 + sizeof(image_header_t);

4です。 LEN入力データ長LEN = ntohl(hdr-> ih_size);

減圧の完了は、減圧後gunzipを介し

Linuxカーネル圧縮ファイルuImageを、データの実際のサイズを格納する後、それ関数の後、
によって

do_bootm_linux(cmdtp、フラグ、ARGC、ARGV、ADDR、len_ptr、ベリファイ); 5つのパラメータ
<へのLinuxカーネルの動作カーネルの

伝達関数を必要P>カーネル=(ボイド(*)(* bd_t、ULONG、ULONG、ULONG、ULONG))hdr-> ih_ep;
は、

1。 hdr-> ih_epある0x20008000

/*

* Linuxカーネルパラメータ:

* R3:情報データ

* R4に搭乗するPTR:initrd_startまたは0がない場合にinitrd

* R5:initrd_end - R4は0
がある場合は、未使用の

* R6:コマンドライン文字列のスタート

* R7:コマンドライン文字列の終わり< BR>

* /

(*カーネル)(KBD、initrd_start、initrd_end、cmd_start、CMD_END);

これは、Linuxに5つのパラメータを開始するために必要なデリバリーシステムを完了し、これuBootの作業は終わり、Linuxは正式にアドレス0x20008000で実行されます。

Copyright © Windowsの知識 All Rights Reserved