준비물
- app_my_module.c
- my_module.c
- Makefile
코드 파일과 Makefile 파일을 작성 하시고 밑 내용대로 명령어를 실행 하시면 됩니다. make을 하여 my_module.ko 준비한다.
####root@linux-VirtualBox:#cat /proc/devices
화면 표시:
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
7 vcs
10 misc
13 input
21 sg
29 fb
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device **189번과 226 사이에 200번이 없음**
226 drm
250 hidraw
251 bsg
252 watchdog
253 rtc
254 tpm
화면에 /proc/devices 안에 리스트에서 inode값이 200이 비었는 것을 확인 한다. ####root@linux-VirtualBox:#mknod my_module c 200 0 노드를 생성 한다. ####root@linux-VirtualBox:#ls my_module
화면 표시:
my_module
Tip:
my_module 등록 시킬 노드의 이름
c 디바이스의 종류
200 메이저 넘버
0 마이너 넘버(부)넘버
####root@linux-VirtualBox:#man mknod 명령어로 확인 할 수 있다.
####root@linux-VirtualBox:#insmod mydev_dev.ko 드라이버를 삽입 한다. ####root@linux-VirtualBox:#cat /proc/devices 정상 적으로 드라이버가 등록이 되었는지 확인
화면 표시:
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
7 vcs
10 misc
13 input
21 sg
29 fb
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
200 my_module <=== 등록됨
226 drm
250 hidraw
251 bsg
252 watchdog
253 rtc
254 tpm
####root@linux-VirtualBox:#dmesg dmesg로 디바이스 모듈이 초기화 되었는지 확인
화면 표시:
[ 39.216216] audit: type=1400 audit(1434439820.368:75): apparmor="STATUS" operation="profile_replace"
name="/usr/sbin/cupsd" pid =2091 comm="apparmor_parser"
[ 39.216401] audit: type=1400 audit(1434439820.368:76): apparmor="STATUS" operation="profile_replace"
name="/usr/sbin/cupsd" pid =2091 comm="apparmor_parser"
[ 1827.535625] my_module init
####root@linux-VirtualBox:#gcc app_my_module.c app_my_module.c를 컴파일하여 a.out를 생성 한다. ####root@linux-VirtualBox:#./a.out 어플리케이션인 a.out를 실행 시킨다. ####root@linux-VirtualBox:#dmesg dmesg로 어플리케이션이 실행 확인
화면 표시:
[ 39.216216] audit: type=1400 audit(1434439820.368:75): apparmor="STATUS" operation="profile_replace"
name="/usr/sbin/cupsd" pid =2091 comm="apparmor_parser"
[ 39.216401] audit: type=1400 audit(1434439820.368:76): apparmor="STATUS" operation="profile_replace"
name="/usr/sbin/cupsd" pid =2091 comm="apparmor_parser"
[ 1827.535625] my_module init
[ 2917.340530] my_open
[ 2917.340541] my_close
정상적으로 실행이 되었으면 my_open, myclose가 뜬다. 이제 모듈을 해제해 보자. ####root@linux-VirtualBox:#rmmod my_module ####root@linux-VirtualBox:#dmesg dmesg로 해제가 되었는지 확인
화면 표시:
[ 1827.535625] my_module init
[ 2917.340530] my_open
[ 2917.340541] my_close
[ 3268.243758] my_module exit
my_module exit 라고 표시가 되면 해제가 완료. 이제 다시 proc/devices에서 inode값이 없어 졌는지 확인해 보자. ####root@linux-VirtualBox:#cat /proc/devices
화면 표시:
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
5 /dev/console
5 /dev/ptmx
5 ttyprintk
7 vcs
10 misc
13 input
21 sg
29 fb
108 ppp
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
226 drm
250 hidraw
251 bsg
252 watchdog
253 rtc
254 tpm
화면에 /proc/devices 안에 리스트에서 inode값이 200이 비었는 것을 확인 한다. 비어 졌으면 정상적으로 해제가 되었다. 아래는 어플리케이션 파일임.