SDRAM 32M -> 128M 성공기

휴~ 드디어 제대로 돌아가는 군요.

다른 일에 밀려 조금 늦게 글을 올립니다.

지난번 질문 때 올렸던 내용 + 주신 답변 + 수정된 사항을 정리하니

아래와 같이 되는 군요.


-------------------------------------------------------------

1. 커널 수정
~~~~~~~

a. arch/arm/kernel/setup.c

#define MEM_SIZE (128*1024*1024) 로 변경.

b. arch/arm/mach-sa1100/ezboard.c

SET_BANK( 0, 0xc0000000, 64*1024*1024 ); //DSHYUN 2002-12-18
SET_BANK( 1, 0xc4000000, 64*1024*1024 ); //DSHYUN 2002-12-18
mi->nr_banks = 2; //DSHYUN 2002-12-18

지난번 주신 답변에서는 두번째 라인을 0xC8000000로 알려주셨는데요,

시스템이 다운되더군요. 0xC4000000-0xC8000000 영역을 잘못 접근

하려다가 다운되는 것 같아서 이부분을 0xC4000000으로 바꿔주었더니

( 한 뱅크 당 64M bytes 씩 접근하는 셈이죠. ) 부팅도 되고 /proc/meminfo

에서도 128M bytes정보가 나오더군요 ( 아~ 흐믓. )


2. 부트로더 수정
~~~~~~~~~~

a. ezboot.v22/include/mem_map.h

#define RAM1_SIZE (128*1024*1024)

#define DEFAULT_RAM_BOOT_START 0xC4800000
#define DEFAULT_RAM_WORK_START 0xC4900000
( 이건 지난 번에 질문시 보여드린 바뀐 메모리 맵에 의한 것임 )

b. ezboot.v22/main/main.c

printf( "[RAM ADDRESS INFO : 0xC0000000 - %08X]
" ,0xc00000000 + (128*1024*1024) );
( 이건 안고쳐도 되지만,. 근데 고쳤더니 0xC0000000 - 0x08000000으로 나옵니다. 안고쳤을 때도
0xC0000000 - 0x02000000으로 나오고... 자잘한 버그...? )


*. 지난번에 고칠려다가 안고친 부분
~~~~~~~~~~~~~~~~~~~~~~

a. ezboot.v22/include/ez_m01.h

#define EZ_M01_RAM_BOOT 0xC4800000
//부트 영역의 시작 위치 DSHYUN 2002-12-17

#define EZ_M01_RAM_BOOT_END 0xC4820000
// 부트 영역의 끝 DSHYUN 2002-12-17

위와같이 수정하면 4M이상의 램디스크 다운로드 후 시스템이 멈춰버립니다.(1)

그래서 수정하지 않으면 다운로드는 되는데, 부팅이 진행되다가 중간에 멈춤니다.(2)

(작은 커널 이미지는 부팅이 됩니다.)

(1)번은 원인을 모르겠고, (2)번은 메모리 맵이 겹쳐서 그런것이 아닌가 라는 생각이 듭니다.


Q1. ez_m01.h의 EZ_M01_RAM_BOOT과 mem_map.h의 DEFAULT_RAM_BOOT_START의

차이는 무엇입니까?

Q2. EZ_M01_RAM_BOOT의 값을 고치지 않고 0xC0F00000로 놓아서 부트로더가 Ramdisk의

위치(in 바뀐 메모리 맵) 에서 동작하다가 4M이상의 압축 램디스크를 다운받을 때 자신이

동작하고 있는 메모리에 덮어써서 그러는 것으로 추정 중입니다. 그렇다고 수정된 메모리

맵의 Bootloader위치로 EZ_M01_RAM_BOOT 값을 바꾸면 부팅중에 멈춰버리니,. 어떻게

하면 이러한 상황에서 4M이상의 램디스크 이미지를 다운받고, 부팅시키죠?


[32M Memory Map]

+---0xC200 0000---+
|
| Working RAM ( 16M )
|
+---0xC100 0000---+
|
| Bootloader ( 1M )
|
+---0xC0F0 0000---+
|
| RAM disk Image ( 7M )
|
+---0xC080 0000---+
|
| Kernel ( 7.68M )
|
+---0xC000 8000---+
|
| Kernel Param ( 32k )
|
+---0xC000 0100---+

V

[128M Memory Map]

+---0xC800 0000---+ [바뀜]
|
| Working RAM ( 56M )*
|
+---0xC490 0000---+ [바뀜]
|
| Bootloader ( 1M )
|
+---0xC480 0000---+ [바뀜]
|
| RAM disk Image ( 63M )*
|
+---0xC080 0000---+
|
| Kernel ( 7.68M )
|
+---0xC000 8000---+
|
| Kernel Param ( 32k )
|
+---0xC000 0100---+