Buildroot 드라이버 모듈 작성하기
Buildroot는 SSH를 지원하지 않으므로 ADB를 이용하여 디버깅한다.
ADB 연결
기기 목록 확인
adb devices

기기 연결
adb shell

드라이버 모듈 컴파일(크로스 컴파일)
드라이버 모듈 소스 코드
#include <linux/module.h> /* 모듈 관련 매크로 및 함수 */
#include <linux/kernel.h> /* printk 로그 함수 */
/* 로드 함수(드라이버 진입점) - insmod로 드라이버를 로드할 때 자동 실행 */
static int __init hello_drv_init(void)
{
printk(KERN_INFO "hello_drv_init: driver loaded\r\n");
return 0; // 0을 반환하면 로드 성공
}
/* 언로드 함수(드라이버 종료점) - rmmod로 드라이버를 언로드할 때 자동 실행 */
static void __exit hello_drv_exit(void)
{
printk(KERN_INFO "hello_drv_exit: driver unloaded\r\n");
}
/* 커널에 진입점과 종료점 함수를 등록 */
module_init(hello_drv_init);
module_exit(hello_drv_exit);
/* 모듈 정보 선언 */
MODULE_LICENSE("GPL v2"); /* 모듈 라이선스 */
MODULE_VERSION("1.0"); /* 모듈 버전(선택) */
MODULE_DESCRIPTION("Hello Driver"); /* 모듈 설명(선택), lsmod 시 표시됨 */
기능을 간단히 설명하면 다음과 같다.
드라이버 로드: hello_drv_init 로그 출력
드라이버 언로드: hello_drv_exit 로그 출력
크로스 컴파일 도구 경로 찾기
find prebuilts -name "*gcc" -type f

보통 SDK 경로에서 찾을 수 있다.
Makefile 설정
# 타겟 아키텍처
# RK3566은 ARM64 아키텍처
ARCH ?= arm64
# 크로스 컴파일러 툴체인 접두사
# 최종적으로 aarch64-linux-gnu-gcc / ld / objcopy 등이 사용됨
CROSS_COMPILE ?= aarch64-linux-gnu-
# Linux 커널 소스 디렉터리
# 반드시 configure 및 prepare/modules_prepare가 완료된 커널이어야 함
# 용도: 어떤 커널 버전의 소스와 헤더로 컴파일/링크할지 결정
KERN_DIR := $(HOME)/Desktop/SDK/kernel
# 현재 외부 모듈 소스 디렉터리
# 커널은 이 디렉터리에서 obj-m으로 지정된 모듈 소스를 찾음
MOD_DIR := $(shell pwd)
# 컴파일할 외부 커널 모듈
# hello_drv.c → hello_drv.ko
obj-m += hello_drv.o
# 기본 타겟: 커널 모듈 컴파일
all:
# 커널 소스 디렉터리의 Makefile 호출
# M=$(MOD_DIR)은 "외부 모듈"임을 의미
# ARCH / CROSS_COMPILE은 타겟 아키텍처와 크로스 컴파일러 지정
$(MAKE) -C $(KERN_DIR) M=$(MOD_DIR) \
ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
# 컴파일 시 생성된 중간 파일 정리
clean:
$(MAKE) -C $(KERN_DIR) M=$(MOD_DIR) clean
PS: 핵심 설정 항목
크로스 컴파일러 툴체인 접두사:
aarch64-linux-gnu-Linux 커널 소스 디렉터리 경로:
$(HOME)/Desktop/SDK/kernel
컴파일
make
모듈 출력 경로

드라이버 테스트
드라이버를 RK3566 보드로 복사
ADB 사용
ADB가 이미 보드에 연결되어 있다면 먼저 연결을 해제한다.
exit
보드 기기 확인
adb devices

로컬의 드라이버 모듈 파일을 보드로 전송한다.
adb -s 0123456789abcdef push hello_drv.ko /data/local/tmp/hello_drv.ko

드라이버 모듈 로드
insmod hello_drv.ko
드라이버 관련 로그 확인
dmesg | grep -E 'hello'

드라이버 모듈 언로드
rmmod hello_drv.ko
드라이버 관련 로그 확인
dmesg | grep -E 'hello'
