다음과 같은 명령을 이용하여 디바이스 드라이버를 커널에 삽입한다.

 $ insmod driver.o

 여기서 driver.o는 테스트로 작성된 디바이스 드라이버 파일명이다.

 위와 같이 콘솔에서 insmod driver.o 를 실행 시키면 다음과 같은 시스템 콜이 수행되어 드라이버를 커널에 삽입한다.

 1. sys_create_module()을 사용하여 디바이스 드라이버를 적재하기 위한 메모리를 할당한다.
 2. sys_get_kernel_syms()를 이용하여 driver.o 안에 있는 심볼을 커널에 등록한다.
 3. 마지막으로 sys_init_module() 을 사용하여 driver.o를 메모리에 적재한다. 이 과정에서 driver.o 안에 있는 init_module()이 실행되고 그 안에 있는 커널 함수인 register_chrdev() 가 수행되어 디바이스 드라이버 이름과 메이저 번호와 file_operations 구조체를 커널 변수인 chrdevs에 등록한다.

 위와 같이 디바이스 드라이버를 커널에 삽입했으면 다음 해야 하는 일은 드라이버에 대응하는 특수 장치 파일(노드)을 만드는 일이다.

 다음은 콘솔에서 특수 장치 파일을 만드는 명령이다.

 $ mknod /dev/device c 주번호 부번호

  위의 명령에 의해 커널에서 수행 되는 일은 다음과 같다. mknod 명령은 커널의 sys_mknod()를 호출하고 이 함수는 다음과 같은 일을 수행한다.


 1. 먼저 /(root) 에서 시작해서 dev 디렉토리까지의 경로를 찾아 새로운 dentry를 하나 만들고 루트에 연결한다.
 2. inode 하나를 만들고 dentry의 d_inode에 연결한다.
 3. inode의 i_mode 와 i_rdev에 S_IFCHR 과 (주번호 << 8 | 부번호)을 기록한다.
 4. inode의 i_fop에 def_chr_fops의 주소값을 기록하여 이를 통해 open 메소드에 chrdev_open()이 연결되도록 한다.

 위와 같이 커널에 디바이스 드라이버를 삽입하고 이것에 대응하는 특수장치 파일을 만들어야 어플리케이션의 디바이스 드라이버 사용이 가능하다.

Tags: ,

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.