/dev/mem vs. /dev/kmem

Β· 289 words Β· 1 minute read

κ°œμš” πŸ”—

μ—…λ¬΄μ—μ„œ μ‚¬μš©ν•˜λŠ” 디버깅 νˆ΄μ€ νŠΉμ • λ ˆμ§€μŠ€ν„° 정보λ₯Ό 보기 μœ„ν•΄, λ©”λͺ¨λ¦¬ 상에 λ§€ν•‘λ˜μ–΄ μžˆλŠ” μ£Όμ†Œμ— μ ‘κ·Όν•˜μ—¬ ν•΄λ‹Ή λ ˆμ§€μŠ€ν„°μ˜ 값을 μ½μ–΄μ˜€λŠ” 방식을 μ΄μš©ν•œλ‹€. 이 λ•Œ, /dev/mem λ””λ°”μ΄μŠ€ λ…Έλ“œκ°€ λ°˜λ“œμ‹œ μžˆμ–΄μ•Ό ν•œλ‹€κ³  λ“€μ—ˆκΈ°μ— Kconfigμ—μ„œ κ΄€λ ¨ μ„€μ • ν”Œλž˜κ·Έλ₯Ό 찾던 쀑 kmem μ΄λΌλŠ” 것도 μžˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€. 문득 이 λ‘˜μ˜ 차이점과 곡식적(?)인 디버깅 툴이 μ–΄λ–€ 것이 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

/dev/mem vs. /dev/kmem πŸ”—

이 λ‘˜μ˜ 차이점은 μΆœμ²˜μ— λ”°λ₯΄λ©΄ μ•„λž˜μ™€ 같이 λ‚˜μ™€μžˆλ‹€.

/dev/mem is a device file that directly represents physical memory, so an open(/dev/mem)/seek(1000)/read(10) system call combination ends up reading 10 bytes from RAM address 1000.

/dev/kmem is a device file that directly represents kernel virtual memory, so an open(/dev/kmem)/seek(1000)/read(10) system call combination ends up reading 10 bytes from virtual address 1000, which is in turn mapped by your system’s memory management unit to some physical RAM address.

μ‰½κ²Œ μš”μ•½ν•˜λ©΄, /dev/mem : /dev/kmem = physical memory : virtual memory 의 관계인 것이닀.

좜처 πŸ”—