본문 바로가기

프로그래밍./ARM(임베디드)

[s5pc100] 모듈 만들기 기초. (hello 출력하기). 그림설명.

[s5pc100] 모듈 만들기 기초. (hello 출력하기)
[s5pc100] 모듈 만들기 기초. (hello 출력하기)
[s5pc100] 모듈 만들기 기초. (hello 출력하기)



vi hello_module.c


c 프로그래밍에서 메인이 있어야 하는 형식이 있듯이, 모듈에서도 기본적이 형식이 있다.
init_module() / cleanup_module() 함수가 있다. 이름에서 알 수 있듯이 시작하는 함수와 끝나는 함수이다.

main 처럼 반드시 있어야 하는 함수이다. 헌데.. 이런 함수의 이름을 다르게 쓰고 싶은 경우.
module_init() / moduel_exit() 라는 메크로 함수가 있다. 이 함수는 인자로 받은 함수를 init_module로 연결해 주는 셈.

그래서 내 마음대로 함수를 생성하고 그 함수를 module_init(내 함수) 로 작성해 주면 init_module 처럼 작동 한다.


단, init_module() 은 리턴형이 int 이고, cleanup_module() 은 리턴형이 void 라는 점을 주의해야 한다.
따라서 내가 임의로 만들어준 함수도 같은 형식으로 만들어 주어야 한다. int 형으로 제대로 해주지 않으면
정상적으로 수행 후 이상한 문자가 출력 되는 등 문제를 일으킨다.




보드에서 모듈 추가하고 실행 결과 보기.


모듈 파일을 보드에 옮기고 보드에서 보라색 밑줄 처럼 insmod 명령으로 추가해 주면 화면이 출력.
insmod 모듈명.ko

빨간색을 보면 내 모듈이 추가되고 삭제 되는 것을 확인 할 수 있다.
 lsmod

삭제는 rmmod 모듈명  이다 삭제는 .ko 없이 모듈명만 적어준다.


여기서 2가지 방식으로 나뉜다.

심볼을 공유 하느냐, 공유하지 않느냐. 아래 링크를 참조하자.
[s5pc100] 모듈 만들기 기초 (심볼 미공개, 전역 심볼 공개)