도와주세요!!
글 수 15,339
2003.01.09 19:41:17 (*.86.15.163)
6714
64M 로 확장하고 테스트 프로그램을 짜서 Write/Read Test를 해봤습니다.
20M 까지는 테스트가 정상적으로 종료되었고
21M 부터는 메모리는 잡히지만 Paging 에러가 나면서 종료됩니다.
좀더 자세히 설명 드리자면...
----------------------------------------------------------
1. 커널 소스 수정
----------------------------------------------------------
"./linux/arch/arm/mach-sa1100/ezboard.c" 의 내용 수정
// SET_BANK( 0, 0xc0000000, 32*1024*1024 );
SET_BANK( 0, 0xc0000000, 64*1024*1024 );
mi->nr_banks = 1;
"./linux/arch/arm/kernel/setup.c"의 내용 수정
#ifndef MEM_SIZE
#define MEM_SIZE (64*1024*1024)
#endif
----------------------------------------------------------
2. kernel 컴파일 및 kernel image download 후 메모리 용량 확인
----------------------------------------------------------
[root@ezboard /root]$ free
total used free shared buffers
Mem: 58960 9788 49172 0 152
Swap: 0 0 0
Total: 58960 9788 49172
[root@ezboard /root]$
// 여기서, 커널 소스를 바꾸기 전에는 대략 49172K 에서
// 32M 용량을 뺀 용량을 표시했습니다. 대략 16M 정도가
// 되었던 것으로 기억됩니다.
// 이것으로 볼 때 64M에 대한 메모리 설정은 된 듯 싶군요.
----------------------------------------------------------
3. 테스트 프로그램 작성 및 메모리 테스트
----------------------------------------------------------
// 테스트 프로그램을 아래와 같이 만들어서 테스트 했습니다.
#include
#define TEST_MEM_SIZE 21*1024*1024
int main(int argc, char **argv){
unsigned long i;
char *buffer, data, tmp;
data = tmp = 0;
buffer=malloc(TEST_MEM_SIZE);
if(buffer == NULL){
printf("Memory Allocation failed.
");
exit(1);
}
printf("Memory Allocation Success.
");
printf("Memory Testing...
");
for(i=0;i
buffer[i] = data;
tmp = buffer[i];
if(data != tmp){
printf("Not equal %d, %d
", data, tmp);
if(buffer != NULL){
free(buffer);
}
exit(1);
}
data++;
if(!(i%1024)){
printf("
%10ldbytes", i);
}
}
printf("
Memory Test Done
");
free(buffer);
return 0;
}
----------------------------------------------------------
이정도면 설명이 충분할 것 같군요.
그리고 메모리 페이징 에러날때 출력되는 메세지를 같이 첨부합니다.
좀 길다는 느낌이 들어서요...
참고로 SDRAM은 16M짜리 두개를 대신 32M 두개가 붙어있습니다.
답변 부탁 드리겠습니다.
20M 까지는 테스트가 정상적으로 종료되었고
21M 부터는 메모리는 잡히지만 Paging 에러가 나면서 종료됩니다.
좀더 자세히 설명 드리자면...
----------------------------------------------------------
1. 커널 소스 수정
----------------------------------------------------------
"./linux/arch/arm/mach-sa1100/ezboard.c" 의 내용 수정
// SET_BANK( 0, 0xc0000000, 32*1024*1024 );
SET_BANK( 0, 0xc0000000, 64*1024*1024 );
mi->nr_banks = 1;
"./linux/arch/arm/kernel/setup.c"의 내용 수정
#ifndef MEM_SIZE
#define MEM_SIZE (64*1024*1024)
#endif
----------------------------------------------------------
2. kernel 컴파일 및 kernel image download 후 메모리 용량 확인
----------------------------------------------------------
[root@ezboard /root]$ free
total used free shared buffers
Mem: 58960 9788 49172 0 152
Swap: 0 0 0
Total: 58960 9788 49172
[root@ezboard /root]$
// 여기서, 커널 소스를 바꾸기 전에는 대략 49172K 에서
// 32M 용량을 뺀 용량을 표시했습니다. 대략 16M 정도가
// 되었던 것으로 기억됩니다.
// 이것으로 볼 때 64M에 대한 메모리 설정은 된 듯 싶군요.
----------------------------------------------------------
3. 테스트 프로그램 작성 및 메모리 테스트
----------------------------------------------------------
// 테스트 프로그램을 아래와 같이 만들어서 테스트 했습니다.
#include
#define TEST_MEM_SIZE 21*1024*1024
int main(int argc, char **argv){
unsigned long i;
char *buffer, data, tmp;
data = tmp = 0;
buffer=malloc(TEST_MEM_SIZE);
if(buffer == NULL){
printf("Memory Allocation failed.
");
exit(1);
}
printf("Memory Allocation Success.
");
printf("Memory Testing...
");
for(i=0;i
tmp = buffer[i];
if(data != tmp){
printf("Not equal %d, %d
", data, tmp);
if(buffer != NULL){
free(buffer);
}
exit(1);
}
data++;
if(!(i%1024)){
printf("
%10ldbytes", i);
}
}
printf("
Memory Test Done
");
free(buffer);
return 0;
}
----------------------------------------------------------
이정도면 설명이 충분할 것 같군요.
그리고 메모리 페이징 에러날때 출력되는 메세지를 같이 첨부합니다.
좀 길다는 느낌이 들어서요...
참고로 SDRAM은 16M짜리 두개를 대신 32M 두개가 붙어있습니다.
답변 부탁 드리겠습니다.