각 구글에 대한 프로젝트 코드를 참고할 수 있다.
micro kernel - NT, Message Q
monolithic kernel - Linux
zImage - 통합형커널
자주사용하지 않는 것들을 모듈화 시킨다.
$ lsmod 명령어
Linux Kernel의 모듈을 볼 수 있게 해준다.
커널코드하고 사용카 코드는 다르다.
strace 명령어를 쓰면 intruction에 대한 추적을 할 수 있다.
참고로 ls 명령어를 추적할 수 있으면 커널에 대한 이해를 어느정도 하고 있다고 볼 수 있을 정도이다.
Linux는 모든 것을 파일로 취급한다.
단 네트워크 장치만 인터페이스 이름으로 인식을 한다.
libpcap -> tcpdump를 할 수 잇다.
http://ntop.org를 가면 pf_ring를 사용하여 대용량 패킷을 유용하게 캡처할 수 있다.
open ( libc.so )
1) system call number
2) return type
3) 인자의 갯수
4) 인자 type
/proc에서 cat devices하면
Character device와 Block device가 있다.
각 주소값은 중복이 가능하다. 영역이 다르니까.
/proc에서 kallsyms는 모든 symbom을 볼 수 있다.
/proc/1 로 들어가면 1번 PID에 있는 것들을 볼 수 있다.
커널은 ISO C99(2003)의 표준을 따라서 쓰고 있다.
cfaqs.kr.pdf
$ uname -r : 현재 실행중인 커널의 정보.
$ insmod : insert module.
모듈사이에는 의존성이 있을 수도 있다.
모듈의 기본 형태
초기함수 형태 static int my_init(void);
등록 매크로 함수 module_init(my_init);
라이선스 정보매크로
MODULE_LICENSE()
MODULE_AUTHOR()
MODULE_DESCRIPTION()
위의 세개는 꼭 적어주어야 한다.
[드라이버 추가 하는 순서]
- KConfig에 메뉴를 추가.
- Makefile 수정
- 모듈 소스를 작성한다.
아래는 예제이다.
커널디렉토리/driver/char/Kconfig
그리고 이 아래는 Makefile
그리고 이 아래는 make menuconfig 했을 때 나타나는 메뉴이다.
/nfsdir/example/ 에
vi hello.c 를 하고 아래의 내용을 추가하자.
그리고 테스트를 위해 Makefile을 /nfsdir/example/에 만들어주고.
vi Makefile 하고선
그렇게 하고 테스트 하면 된다.
make를 하고 결과물들 생성되는지 확인하고, make clean을 한다.
마지막으로
--커널디렉토리/driver/char/에 아래내용의 hello.c를 추가하면 되는데. 이것은 이렇게 복사하자.--
cp /nfsdir/example/hello.c ~/aaa/android-2.~~/driver/char 엔터
cd ~/aaaa/android-2.~~/ 이동
여기에서 make clean; make;
만들어진 zImage는 /tftproot에 복사하고, 그담에 target을 리붓!!
(물론 그 전에 make menuconfig를 확인하자)
관련 파일인 .config를 첨부한다.
이상.ㅋ
이 글은 스프링노트에서 작성되었습니다.
'[Developer] > Android' 카테고리의 다른 글
Linux4Android 5th Morning (0) | 2010.11.12 |
---|---|
Linux4Android 4th Afternoon (0) | 2010.11.11 |
Linux4Android 3rd Afternoon (0) | 2010.11.10 |
Linux4Android 3rd Morning (0) | 2010.11.10 |
Linux4Android 2nd Afternoon (0) | 2010.11.10 |
댓글