기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
임베디드 리눅스는 메모리 번지로 직접 접근할 수 있도록 설계되어있나요?
uboot에서 bdinfo로 메모리 번지 확인해 보면
arch_number = 0x000001FD
env_t = 0x00000000
boot_params = 0x10000100
DRAM bank = 0x00000000
-> start = 0x10000000
-> size = 0x02000000
이렇게 나오구요...
커널소스의 정보에는 이렇게 나오는데요..
MACHINE_START(OMAP_GENERIC, "Generic OMAP1510/1610/1710")
MAINTAINER("Tony Lindgren <[email protected]>")
BOOT_MEM(0x10000000, 0xfff00000, 0xfef00000)
BOOT_PARAMS(0x10000100)
MAPIO(omap_generic_map_io)
INITIRQ(omap_generic_init_irq)
INIT_MACHINE(omap_generic_init)
INITTIME(omap_init_time)
MACHINE_END
static 으로 선언된 변수의 메모리 번지를 확인하면
0x0001048C
0x000104AC등과 같은 번지가 나오네요..
물론 이부분을 접근하면 기록한 값이 나오는데요...
가상 번지 같이 느껴져서..
다른부분이 접근되지 않아서 질문 올립니다...
조언 부탁드립니다!!
아.. 리눅스 부팅 상태에서 제가 만든 응용프로그램을 돌려서 DRAM을 읽어보고 싶은 거예요...
arch_number = 0x000001FD
env_t = 0x00000000
boot_params = 0x10000100
DRAM bank = 0x00000000
-> start = 0x10000000
-> size = 0x02000000
이게 의미하는 바가 혼동이되네요..
그리고 이두요.. ㅠ.ㅠ
Image Name: linux-2.6.9-20070713-1058
Image Type: ARM Linux Kernel Image (gzip compressed)
Data Size: 901092 Bytes = 880 kB
Load Address: 10c08000
Entry Point: 10c08000
arch_number = 0x000001FD -> architecture number라고 PROCESSOR 마다 고유의 번호를 가지고 있는데, 이것을 말하는 겁니다.
env_t = 0x00000000 -> 환경 변수 값
boot_params = 0x10000100 -> 부트 파라메터 값(부트로더 쪽을 봐야 겠죠?)
DRAM bank = 0x00000000 -> DRAM start address
-> start = 0x10000000 -> 실제 사용하는 메모리 start address(pysical address)
-> size = 0x02000000 -> 메모리 사이즈(32MB)
Image Name: linux-2.6.9-20070713-1058 -> kernel image name
Image Type: ARM Linux Kernel Image (gzip compressed) -> image type(gzip compressed)
Data Size: 901092 Bytes = 880 kB -> kernel image size
Load Address: 10c08000 -> kernel loading address(pysical address)
Entry Point: 10c08000 -> kernel start address(pysical, kernel load후 PC가 위치하는 주소)
kernel이 부팅한 후는 MMU가 enable 되어 있는 상태이므로 물리 주소의 값을 보려면
매핑 해서 봐야 한답니다.
1. MMU를 enable하기 전과 한 후에 보는 방법이 틀립니다.
2. MMU가 turn-on 되었을 경우는 가상번지로 매핑해서 찍어보는 방법이 있습니다.
ex> ioremap_nocache()등을 이용