임베디드시스템 - device control! device driver 과 mmap

임베디드시스템에서 디바이스를 컨트롤하는 방식은 두가지가 있다.

1. device driver

2. mmap


오늘은 이 두녀석을 집중적으로 보도록 한다.


1. device driver

device driver은 user가 application 에서 device file을 이용하여 hardware을 제어할 수 있게 해준다. 이녀석 덕분에 user는 쉽게 파일 I/O 명령으로 device를 제어할 수 있다.

device file: device driver와 application 사이의 interface 역할을 하는 녀석으로 system call을 사용해 user의 명령을 driver에게 전달해준다.

/dev 폴더 내에 존재하며, mknod [file name] [type] [major] [minor] 방식으로 호출한다. (type : c, b(character , block단위) , major : device driver 의 고유 번호)

mknod를 하면 자동으로 device file이 /dev에 생성되며, 이는 driver와 연결되어, 사용자가 device file을 open, read, write, ioctl등을 수행하면 device file은 system call을 통해 device driver를  open, read, write, ioctl을 수행하게 된다.

device driver역시 동적으로 커널내에 수행시킬 수 있는데 명령어는 이러하다.

insmod [modules] (insmod ledioport.ko )  --> .ko로 끝남

즉, 우리가 드라이버를 만들어서 수행시키려면 mknod와 insmod를 둘다 해줘야한다. ㅎㅎ


2. mmap (memory mapped I/O)

mmap()은 system call로 driver을 거치지 않고, hardware와 바로 연결한다. 즉, device memory에 바로 user의 memory를 연결할 수 있기 떄문에 driver과 비교할때 memory copy를 줄일 수 있다는 장점이 있다.

하지만 driver에서 기본적으로 제공하는 녀석도 일일히 짜줘야함을 생각하면 좀 불편할듯하다.


그림을 보든 application에서 kernel의 hardware을 mmap system call을 통해 바로 맵핑시킨다. 이로인해 user은 자유롭게 hardware의 memory를 control할 수 있게 된다.


드라이버 예시코드
 mmap 예시코드


mmap 예시코드를 보자.

우선 application에서 mmap을 사용하려면 /dev/mem을 open해줘야 한다.

ledbaseaddr = (unsinged long *)mmap(NULL, 4096, PROT_READ|PROT_WRITE,MAP_SHARED,fd,LEDADDRESS);

Q : 여기서 헷갈린 부분은, 하드웨어 고유번호같은게 변수로 안들어간다는 것이다.. 그러면  LEDADDRESS는 하드웨어메모리 내 address인가? 아니면 이로 바로 맵핑되는 커널속의 메모리인가. 커널속의 메모리일 수 밖에 없다. 그렇다면 커널 속의 일정 부분의 메모리가 하드웨어 메모리로 자동 맵핑 되어 있고, mmap은 해당 커널로 맵핑해준다고 봐야겠지???

A: 스터디 결과, 커널 속 메모리랑 유저 메모리가 따로 존재한다는 생각 자체가 잘못됐음. 그게 아니라, user는 memory 를 size 가 무한한 memory로 생각하고 접근하는데, 이것이 virtual memory이다. (실제 존재하지 않는 가상 메모리) 이를 실제 physical memory랑 맵핑시켜주는 mapping table 이 존재한다.
즉, mmap이라는 함수, 이녀석은 하드웨어를 제어하는 구간의 physical memory로 맵핑되는 virtual memory를 정하고, 이녀석의 base address를 리턴해준다고 보면된다.






댓글

  1. 저도 마지막 의문점에 대한 해답을 찾아 이리저리 다녔는데 그렇다면 결론은 physical memory 영역 어딘가에 device를 조정할 수 있는 어떠한 영역이 있다고 볼 수 있는 건가요??

    답글삭제
  2. 작성자가 댓글을 삭제했습니다.

    답글삭제

댓글 쓰기

가장 많이 본 글