리눅스/디바이스 드라이버 2

리눅스/메모리 매핑(memory mapping)

물리주소 간단한 8비트 프로세서는 하드웨어로 연결된 메모리버스주소와 프로그램에서 접근하는 메모리주소가 같다. 그래서 주소값이 하드웨어에 의해 고정되고 프로세서는 그 안에서 동작한다. 가상주소와 MMU 하지만 다중프로세스를 지원하고, 각 프로세스의 메모리공간을 보호해야 하는 OS는 안정적인 동작을 보장하지 못한다. 이 점을 해결하기 위해 MMU와 가상 주소 개념을 도입했다. 프로세서가 메모리에 접근할때 mmu에 가상주소를 전달하고 mmu는 변환테이블을 참고해 실제 물리주소로 변환해 전달하는 것이다. MMU는 주소를 페이지 단위로 처리한다. 크기는 보통 4KByte이다. 그래서 256MBytes메모리를 관리할때 MMU테이블은 시스템 메모리의 256KByte정도를 사용한다. 프로세서가 처음 부팅되면 리눅스는 ..

리눅스/드라이버 register_chrdev() 함수

register_chrdev() 이 함수의 기능은 커널 내부에 등록된 문자장치를 관리하는 chrdev[] 배열구조체에서 하나의 배열을 할당을 받고, 그 배열 안의 필드에 각각의 문자장치의 이름과 파일 오퍼레이션을 연결하는 것이다. 이렇게 함으로써 해당하는 커널내부에 문자장치로 등록이 되며 이 장치를 사용하고자 하는 어플리케이션이 있을 때 이를 사용할 수 있도록 한다. 아래는 커널 내에서 정의된 chrdevs[]에 관련된 구조체와 관련된 내용이다. 문자 장치는 256개 배열의 형태로 등록이 될 수 있으며 이러한 배열의 각각은 문자장치의 이름을 나타내는 포인터와 이문자 장치를 사용할 수 있는 파일 오퍼레이션의 포인터를 포함한다. 보통 register_chrdev() 함수는 모듈이 적재될 때 실행되는init_..