120 likes | 292 Views
12 주차 . 모듈 프로그래밍. 수원과학대학교 정보통신과. 12.1 모듈 프로그래밍의 개요. 초기 리눅스에서는 커널 변경시 커널 전체를 다시 컴파일해야 했음 모듈 프로그램으로 개발하면 해당 모듈만 컴파일하고 필요할 때만 동적으로 링크시켜 커널의 일부로 사용할 수 있어 효율적 자주 사용하지 않는 커널 기능은 메모리에 상주시키지 않아도 됨 확장성과 재사용성을 높일 수 있음. 모듈 프로그래밍의 특징. 사건 구동형 (event-driven program) 방식으로 작성 내부에 main() 이 없음
E N D
12주차. 모듈 프로그래밍 수원과학대학교 정보통신과
12.1 모듈 프로그래밍의 개요 • 초기 리눅스에서는 커널 변경시 커널 전체를 다시 컴파일해야 했음 • 모듈 프로그램으로 개발하면 해당 모듈만 컴파일하고 필요할 때만 동적으로 링크시켜 커널의 일부로 사용할 수 있어 효율적 • 자주 사용하지 않는 커널 기능은 메모리에 상주시키지 않아도 됨 • 확장성과 재사용성을 높일 수 있음 수원과학대학 정보통신과
모듈 프로그래밍의 특징 • 사건 구동형(event-driven program) 방식으로 작성 • 내부에 main()이 없음 • 커널에 적재/제거하기 위한 규칙과 유틸리티가 필요 • 외부로 공개할 전역변수 사용에 주의 • 커널에 적재된 모듈 프로그램은 무제한의 특권을 가지므로 신중하게 작성해야 함 수원과학대학 정보통신과
12.2 모듈 프로그래밍의 규칙 • 심볼 및 관련 매크로 • 전역변수와 전역 함수 이름을 심볼 테이블에 등록 • 커널 심볼 테이블의 내용은 /proc/kallsyms라는 텍스트 파일로 외부에 제공 • EXPORT_NO_SYMBOLS: 공개하지 않음 • EXPORT_SYMBOL(), EXPORT_SYMBOL_GPL(): 공개 • 라이선스 종류 수원과학대학 정보통신과
호스트 시스템의 커널 공개 심볼 살펴보기 • head /proc/kallsyms, tail /proc/kallsyms를 입력해 커널 심볼 테이블의 내용을 확인 수원과학대학 정보통신과
모듈 프로그램의 기본 형태 수원과학대학 정보통신과
호스트 시스템 용 모듈 생성을 위한 Makefile 기본 형태 (코드 12-2) 타겟 시스템 용 모듈 생성을 위한 Makefile 기본 형태 (코드 12-3) 수원과학대학 정보통신과
12.3 모듈 유틸리티 • insmod: 모듈을 커널로 적재하는 명령 • rmmod: 제거하는 명령 • lsmod: 정상적으로 적재되었는지 확인하는 명령 • 모듈 사이의 의존성을 파악해 자동으로 적재하는 기능 • 적용할 모듈을 /lib/modules/<커널 버전> 디렉토리에 복사 • depmod –a 명령 실행 • modprobe <모듈 이름> 명령 실행 수원과학대학 정보통신과
실습 12-1 Hello 모듈 프로그램 작성 및 실행 • mkdir -p /embed/ex/12/hello • cd /embed/ex/12/hello 수원과학대학 정보통신과
실습 12-1 Hello 모듈 프로그램 작성 및 실행 • 모듈 프로그램 hello.c 작성(12/hello/hello.c) 01 #include <linux/kernel.h> 02 #include<linux/module.h> 03 #include<linux/init.h> 04 05 static int module_begin(void) // 모듈 초기화 함수 06 { 07 printk("Hello, Module!\n"); 08 return 0; 09 } 10 11 static void module_end(void) // 모듈 마무리 함수 12 { 13 printk("Good bye!\n"); 14 } 15 16 module_init(module_begin); 17 module_exit(module_end); 수원과학대학 정보통신과
실습 9-1 Hello 모듈 프로그램 작성 및 실행 • Makefile을 작성 • ppt slide #7의 호스트용 Makefile을 작성하되 test.o→hello.o • make로 hello.ko 모듈 프로그램을 생성하고 테스트 수원과학대학 정보통신과
실습문제 [실습 12-1]의 hello.c를 타깃 시스템용으로 컴파일해 모듈을 생성한 후, 타깃 시스템에 적재하고 제거하면서 출력메시지를 확인하시오. 수원과학대학 정보통신과