기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
아래 그림은 제 임베디드 리눅스의 /dev 폴더를 ls 한 결과입니다.
/dev 폴더를 보면 ttyS0는 serial port0를 말하는 것같아서 applicaation을 작성해서 사용해봤습니다.
그런데 빨간줄을 칠한 consol도 있고 mem도 있고 bus도 있고 여러기자
/dev 폴더에 제가 제어할 수 있는 디바이스 파일들이 많은데요... 이런 것들이 무엇을 의미하는 건가요?
ttyS0는 serial port를 의미하듯 각각의 디바이스 파일은 페리페러를 말할 텐데 무슨 설명서도 없으니 ㅠㅠ;
혹시 이런것들에 대한 설명이 있는 곳이 어딘가에 있지 않을가해서요 ^^; 고수님들의 조언 부탁드립니다.
저도 최근에 책 보면서 알게 된건데요 (리눅스 커널 내부구조-백승재,최종무)
/dev 밑에 있는 file 들은 kernel 의 device driver 의 진입점을 알려 주는 것입니다.
Major,Minor 번호를 가지고 system call 을 호출 하여
커널 내부에 Major,Minor 번호에 해당하는(배열) 의 함수 포인터를 수행 한다.
말이 어렵네요.. ㅎㅎ
예를 들어 보면
kerenl 에서 MY_UART.C 라는 device driver 에서
캐릭터 디바이스를(major 번호 45 minor 번호 3) 등록합니다.
(이는 256개의 캐릭터 디바이스 배열에 45번쩨 인덱스를 사용하겠다는것)
각각 open,write,read 에 해당하는 함수는 따로 작성하였다고 생각하고......
이제 이 디바이스 드라이버를 User 영역에서 제어를 해야 할때
User 영역에서 major 45, minor 3 을 알 수 없으니 이것을 알려주는 곳이 /dev 입니다.
User 영역 프로그래머 입장에서는 major 45, minor 3을 알 필요는 없습니다.
그냥 /dev 밑에 file open 하게 되면 /dev/file 의 major , minor 번호를
가지고 system call 이 일어 나서 캐릭터 디바이스 배열중 45번째 인덱스의 함수 포인터를
수행 해라 라는 의미 이니깐요.
임베디드 리눅스 총체적으로 흐름을 살펴 보면
1. 새로운 sensor 하나가 회로도에 있음.
2. sensor 을 제어하는 device driver 작성(I2C,SPI,UART 등을 통한 기타 등등...)
3. user 영역과 interface 하는 device driver 작성
3.1. 캐릭터 디바이스로 등록함( ex. major 251, minor 1 )
4. mount 하는 fs system 의 /dev 디렉토리에 mknod c new_sensor 251 1 형식으로 등록함
(부팅시 스크립트 나, 혹은 fs system 에 고정시켜 사용 가능가능 하게 함)
5. user 영역 프로그램 작성. /dev/new_sensor 을 이용하여 open , read , write 함.
이정도로.... ㅎㅎㅎ ㅡ.ㅡ;;;;
이런식으로 활용 할 수 도 있고
번외로... /sys 밑에 있는 sysfs 을 이용한 user program 도 있습니다.
안드로이드가 sysfs 를 활용하여 사용하는 것을 보았습니다.