메모리맵.
아래 이미지는 s3c6410의 메모리 맵입니다.
DRAM의 Start Address가 0x50000000부터인 것을 눈여겨 보세요.




주소변환식
아래 코드는 virtual memory address를 phycal memory address로 변환하는 코드입니다.

$(U_BOOT_HOME)/board/samsung/smdk6410/smdk6410.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifdef CONFIG_ENABLE_MMU
ulong virt_to_phy_smdk6410(ulong addr)
{
#ifdef	HAVE_MEM_256M
	if ((0xc0000000 <= addr) && (addr < 0xd0000000))
#else
	if ((0xc0000000 <= addr) && (addr < 0xc8000000))
#endif
		return (addr - 0xc0000000 + 0x50000000);
	else
		printf("do not support this address : %08lx\n", addr);
 
	return addr;
}
#endif



이 함수의 핵심은 virtual address - 0xC0000000 + 0x50000000 입니다.
다시말해서 virtual address - 0x70000000 입니다.

왠지 MMU를 사용하면 메모리의 앞부분에 0x70000000 크기의 주소가 더 사용된 다는 것을 추측할 수 있습니다. 



+ Recent posts