[Armadillo:06070] hermit mmu.cの変更についての質問
Poll lee
email@hidden
2010年 11月 3日 (水) 19:20:49 JST
初めて投稿いたします。
Armadillo-500をベースに、SDRAMを64Mbyteから128Mbyteに換装したボードで
圧縮したカーネルイメージをCF上の/bootディレクトリに置き、ブートローダーhermitで
このカーネルイメージをSDAMに解凍/展開して、Linuxをブートするようにしています。
SDARMを64Mbyteから128Mbyteに変更したこともあり、CF上の圧縮カーネルイメージを
SDRAMにコピーする際、ide_file_copy()#ide_core.cに渡すロード開始アドレスを
0xA080_0000から0xA400_0000に変更いたしました。
(0xA080_0000からの領域は別目的で使用するために予約しております)
この状態で、gunzip_object()#gunzip.cで所定のアドレス(0xA000_8000)に解凍しようと
すると処理が停止してしまいます。
調査するとこれ以前のステップのbooston(BOOST_LINUX_MODE)のステップをコメントアウトすると
動作するすることが分かりました。
そこで、booston()#mmu.cのページ変換テーブル struct page_table pt_list[]の設定値を
変更したりコメントアウトしたりしてみましたが動作いたしません。
例えば、SDRAMの箇所を
{0xA0000000, 0xA0000000, 0x04000000, 0xc1e},
から
{0xA5000000, 0xA5000000, 0x03000000, 0xc1e},
へと変更したりしてみました。
インラインアセンブラのコードも含めどのように変更すればよいのか
ご教授ください。よろしくお願い致します。
以下、該当箇所のソースコードです。
void
boost_on(int mode)
{
int i;
struct page_table pt_list[] = {
/* Physical, Virtual, Size, Option */
/*-------------------------------------------*/
/* Internal Register */
{0x10000000, 0x10000000, 0x00100000, 0xc12},
{0x80000000, 0x80000000, 0x00100000, 0xc12},
/* SDRAM */
{0xA0000000, 0xA0000000, 0x04000000, 0xc1e},
/* Flash */
{0xC0000000, 0xC0000000, 0x00200000, 0xc12},
};
memzero((void *)MMU_TRANSLATION_TABLE_BASE,
MMU_TRANSLATION_TABLE_SIZE);
for (i=0; i<ARRAY_SIZE(pt_list); i++)
mmu_create_page_table(&pt_list[i]);
__asm__ volatile
(
"mov r0, #0;"
"mcr p15, 0, r0, c7, c7;"
"mcr p15, 0, r0, c7, c10, 4;"
"mcr p15, 0, r0, c8, c7;"
"mcr p15, 0, %0, c2, c0;"
"mov r0, #0x03;"
"mcr p15, 0, r0, c3, c0;"
"mrc p15, 0, r0, c1, c0;"
"orr r0, r0, #0x1000;"
"orr r0, r0, #0x05;"
"mcr p15, 0, r0, c1, c0;"
:
: "r" (MMU_TRANSLATION_TABLE_BASE)
: "r0"
);
}
--
_______________________________________________
Get a free @hellokitty.com, @mymelody.com, or @kuririnmail.com email account
today at www.sanriotown.com, and enjoy 500MB of storage!
Check out our official blog @ http://blog.hellokitty.com
armadillo メーリングリストの案内