읽기 쓰기가 가능한 Character Device 모듈 구현
#define DEV_MAJOR 254 #define DEV_MINOR 6 ssize_t device_write(struct file *filp, const char *buffer, size_t length, loff_t *offset) { int count = 0; if(is_buffer_full()) { printk(DEVICE_NAME " : Write return Out of Buffer\n"); return -ENOMEM; } while(!is_buffer-full() && length > 0) { write_buffer_char((char *)buffer); ++buffer; --length; ++count; } filp->f_pos += count; printk(DEVICE_NAME " : Write %d bytes\n", count); return count; }
KERNELDIR = /lib/modules/$(shell uname -r)/build obj-m = minibuf2.o KDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.ko rm -rf *.mod.* rm -rf .*.cmd rm -rf *.o
7. #make를 수행하여 커널 모듈을 생성한다.
8. #/sbin/insmod minibuf2.ko를 수행하여 모듈을 로드시킨다.
9. #/sbin/lsmod를 수행하여 로드된 모듈을 확인한다.
10. #mknod /dev/minibuf2 c 254 6 를 수행하여 가상 디바이스를 생성한다.
11. #cat /dev/minibuf2 를 수행하여 가상 디바이스에 저장된 문자열을 읽어 화면에 출력한다.
12. #cat > /dev/minibuf2를 수행하여 아무 문자열이나 입력해본다.
(입력 후 엔터 입력 후 ctrl+d)
13. 다시 #cat /dev/minibuf2를 수행하여 자신이 입력한 문자열이 읽혀지나 확인한다.
14. #dmesg로 커널 로그를 확인한다.
15. #/sbin/rmmod minibuf2를 수행하여 로드된 모듈을 언로드한다.
16. #rm /dev/minibuf2를 수행하여 가상 디바이스를 삭제한다.
'C & Docker & LINUX' 카테고리의 다른 글
리눅스 시스템 관리 명령어 (0) | 2017.10.25 |
---|---|
칼리리눅스(kali linux) - static 네트워크 설정 (0) | 2017.09.23 |
리눅스 커널) 모듈 프로그래밍(간단한 Char Device 모듈 구현) (0) | 2017.05.01 |
리눅스 커널 컴파일 (0) | 2017.04.25 |
c언어 - stdout, stderr의 차이점 (0) | 2016.10.11 |