linux 공부?
source code 받을수 있는곳.
source를 볼수 있는 site
http://lxr.linux.no
kenel관련 싸이트
http://kldp.org :각종 리눅스 관련 한글화된 문서가 있는 사이트
http://www.tldp.org :리눅스 관련 문서 프로젝트
linux부팅관련 자세히 알고 싶으면..
http://www.linuxfromscratch.org/
ㅋ.. 결국 아래 주소에서 safir books online을 들어가면 O’Relly 책들을 찾을수 있고 … 책 내용을 모두 볼수 있다.
아래에서도 무료 linux 도서를 볼수 있군…
http://www.linuxlinks.com/article/20090405061458383/20oftheBestFreeLinuxBooks-Part1.html
device driver : Linux Device Drivers, 2nd Edition [http://www.xml.com/ldd/chapter/book/]
kernel : Understanding the Linux Kernel, Third Edition
kernel(2.6)의 device driver의 file system
sysfs
$mount -t sysfs sysfs /sys 를 이용하여 mount해서 볼수 있다.
device driver 만들때
mknod [디바이스 파일명][디바이스 파일형][주번호][부번호]
ex) 문자 디바이스 드라이버, 주번호240, 부번호1, /dev/devfile 이라고 만들려면
$mknod /dev/devfile c 2401 1
$ls -al /dev/console
crw——– 1 root root 5, 1, jan 1 10:00 /dev/console
c 는 문자디바이스를 뜻함
b 는 블록디바이스를 뜻함
5번 주번호, 1번 부번호
응용 플그램이 open()함수를 이용해서 해당 디바이스 파일에서 주번호를 얻어 이번호가 처리하는 디바이스 드라이버를 찾는다.
응용프로그램과 디바이스 드라이버가 연결되면 부 번호가 처리하고자 하는 실질적인 디바이스를 찾는다.
[디바이스 파일은 커지지는 않으나 디바이스에서 직접 데이터를 가져오거나 쓸수 있다.]
디바이서 파일에서 써야 하는 파일입출력 함수
open()
close()
read()
write()
lseek()
ioctl()
fsync()
모.. 이제 눈치챘겠지만.. mknod도 함수다.. int mknod(const char *pathname, mode_t mode, dev_t dev);
모듈 명령어 정리
insmod module.o module을 커널에 적재한다.
lsmod 적재된 module을 리스트한다.
rmmod module.o module을 커널에서 제거한다.
depmod module간 의존성 정보를 생성한다.
modprobe module을 커널에 적재하거나 제거한다.
모듈 : 시작된 이유는 디바이스 드라이버를 다 넣어서 빌드하거나 하면 부팅을 못하거나해서 테스트가 비효율적이된다.
이에 부팅후 적재와 제거를 손쉽게 해서 개발의 편이성을 높인것임.
모듈 심볼 테이블 보기
cat /proc/ksyms
#c0123a33 usbdriver_chrdev_R12dsfasf
usbdriver_chrdev()함수가 0xc1023a33 번지에 할당되어 있고 version은 _R12dsfasf라는의미다.
lsmod
module 이름, size , 사용여부, 해당 모듈 참고 모듈.
결국 디바이스 드라이버(어플이 접속해서 쓸수있는)는 mknod로 추가하는거고 이 디바이스 드라이버의 하드웨어 디펜던트한 제어용 함수는 모듈로 적제된다고 보면될듯
ps : process 리스트..
debug method
cat /proc/kmsg : kernel message를 계속 저장하므로 보면 된다. 중지는 CTRL-C이다.
watch ipconfig
실행된 kernel message 마지막 50줄을 본다.
| dmesg | tail -n50 |