-
[Linux Kernel] Device Driver : 묘듈 분할프로그래밍/리눅스 시스템 2024. 4. 29. 05:39
[Makefile]
KERNEL_HEADERS=/lib/modules/$(shell uname -r)/build obj-m += common.o devicedriver.o PWD := $(CURDIR) all: make -C $(KERNEL_HEADERS) M=$(PWD) modules clean: make -C $(KERNEL_HEADERS) M=$(PWD) cleancopy
■ 두개 모듈 생성
- device driver 코드를 2개의 모듈로 분할해서 작성해줌
=> 모든 소스코드를 obj-m으로 추가해주어야 한다!!
[common.h]
#ifndef COMMON_H #define COMMON_H int common_function(int value); #endif
- 함수 정의
- 변수 정의
- 매크로 변수 정의 등등 공통으로 사용할 인터페이스를 작성한다.
=> common.h를 불러오면, 해당 인터페이스를 사용할 수 있게된다!
[common.c]
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> #include <linux/printk.h> #include "common.h" MODULE_LICENSE("GPL"); MODULE_AUTHOR("SSAFY"); int common_function(int value) { pr_info("Received value: %d\n", value); return value * 2; } EXPORT_SYMBOL(common_function); static int __init common_module_init(void) { pr_info("Common module loaded\n"); return 0; } static void __exit common_module_exit(void) { pr_info("Common module unloaded\n"); } module_init(common_module_init); module_exit(common_module_exit);copy
- <linux/kernel.h> : 커널 모듈에서 사용 가능한 다양한 기능 및 도구 정의
- MODULE_LICENSE() : 라이센스 등급 설정
- MODULE_AUTHOR() : 모듈 개발자 소개
- <linux/module.h>에 정의되어있다.
- EXPORT_SYMBOL(공유할 함수/변수명) : 매크로. 인자로 들어온 함수 / 변수 등을 공유할 수 있도록 설정.
(=> 다른 소스파일에서 common.h를 include해주면, 해당 함수로 export한 변수/함수를 사용할 수 있게된다!)
[devicedriver.c]
#include <linux/module.h> #include <linux/printk.h> #include <linux/init.h> #include "common.h" MODULE_LICENSE("GPL"); static int __init devicedriver_init(void) { int result; pr_info("Insmod Module\n"); result = common_function(10); pr_info( "Result from common_function: %d\n", result); return 0; } static void __exit devicedriver_exit(void) { pr_info("Unload Module\n"); } module_init(devicedriver_init); module_exit(devicedriver_exit);
■ common_function 사용하기
- common.h 헤더 추가
- common_function() 사용할 수있다!
동작 확인하기 : 공통 모듈부터 insmod 하기
- 사용된 모듈이 있다면, 사용한 모듈먼저 insmod 해주어야 inmod가능하다!
'프로그래밍 > 리눅스 시스템' 카테고리의 다른 글
[Linux Kernel] Device Driver : Timer (0) 2024.04.29 [Linux Kernel] Device Driver : proc file system (0) 2024.04.29 [Linux Kernel] Device File : Read, write (with ioctl) (0) 2024.04.29 [Linux Kernel] Device Driver 적재, Device File 생성 (0) 2024.04.29 [Linux] 멀티 Process, Signal, WDT (0) 2024.04.15 - device driver 코드를 2개의 모듈로 분할해서 작성해줌