반응형
디바이스 드라이버는 특정 하드웨어나 장치의 입출력을 제어하기 위해 커널의 일부분으로 동작하는 컴퓨터 소프트웨어이다.
디바이스 드라이버를 통해 어플리케이션을 수행하고자 한다면 디바이스 드라이버와 어플리케이션의 호출관계를 이용해야한다.
디바이스 드라이버의 호출 구조는 윗 그림을 보면 알 수 잇는데
응용프로그램의 함수를 디바이스 드라이버의 file_operations이라고 하는 구조체에 함수 포인터로 링크해주는거임. 그래서 어플리케이션에서 특정 함수를 실행하면, 디바이스 드라이버를 거쳐 하드웨어 인터럽트를 발생시켜 어플리케이션이 원하는 동작을 수행하는거임.
applitaion 단계에서는 *pathname, flags 2개가 들어가지만 커널의 시스템 콜 함수를 거쳐서 *inode, *filp 2개의 다른 값으로 들어가게 되는거임.
실제 코드가 어떤식으로 작성되는지는 아래의 글을 참고
ubuntu@ubuntu8:~/pi_bsp/kernel/linux$ ls -l /dev|more
- -: 일반 파일 (Regular file)
- b: 블록 특수 파일 (Block special file)
- c: 문자 특수 파일 (Character special file)
- d: 디렉터리 (Directory)
- l: 심볼릭 링크 (Symbolic link)
- 일반 파일 (-): 가장 흔한 유형의 파일로, 일반적인 데이터를 저장하는 데 사용됩니다. 대부분의 파일이 이 유형에 속합니다.
- 예시: -rw-r--r-- 1 user group 1024 Feb 21 10:30 filename
- 블록 특수 파일 (b): 블록 장치에 대한 특수 파일로, 데이터를 블록 단위로 읽거나 쓰는 데 사용됩니다. 주로 하드 디스크와 같은 블록 기반의 저장 장치를 나타냅니다.
- 예시: brw-rw---- 1 user disk 8, 1 Feb 21 10:30 blockfile
- 문자 특수 파일 (c): 문자 장치에 대한 특수 파일로, 데이터를 문자 단위로 읽거나 쓰는 데 사용됩니다. 주로 터미널, 마우스 등과 같은 문자 기반 장치를 나타냅니다.
- 예시: crw-rw-r-- 1 user tty 5, 1 Feb 21 10:30 charfile
- 디렉터리 (d): 다른 파일이나 디렉터리를 포함하는 디렉터리를 나타냅니다. 디렉터리에 접근하려면 'x' 권한이 필요합니다.
- 예시: drwxr-xr-x 2 user group 4096 Feb 21 10:30 dirname
- 심볼릭 링크 (l): 다른 파일이나 디렉터리에 대한 참조를 나타내는 심볼릭 링크를 나타냅니다.
- 예시: lrwxrwxrwx 1 user group 6 Feb 21 10:30 linkname -> target
디바이스 드라이버에서 중요한 건 char 파일인지, 주번호와 부번호가 몇번인지가 가장 중요함.
ubuntu에서 디바이스 드라이버 만들어보자~
ubuntu@ubuntu8:~/pi_bsp/drivers/p184_calldev$ sudo mknod /dev/calldev c 230 32
ubuntu@ubuntu8:~/pi_bsp/drivers/p184_calldev$ ls -l /dev/calldev
crw-r--r-- 1 root root 230, 32 2월 23 09:31 /dev/calldev
아래의 mknod 명령이 /dev파일에 device driver 파일을 생성하는거임.
c 옵션은 character 문자형 파일
b 옵션을 주면 block 블록형 파일이 되는거임.
230은 주번호
32는 부번호
calldev 파일은 일반적인 파일이 아니므로 sudo 명령을 주더라도 write가 안된다.
지울때는 파일 지우듯이
$ sudo rm -rf /dev/calldev
해주면 됨~
반응형
'Linux BSP' 카테고리의 다른 글
[Linux Device Driver] application-> 디바이스 드라이버 8바이트 매개변수 입력 (0) | 2024.02.26 |
---|---|
[Linux Device Driver] Device Driver와 application으로 led, 버튼 제어 (0) | 2024.02.23 |
[Raspberry Pi Device Driver] 디바이스 드라이버(app과 dev)를 통한 device 제어 (0) | 2024.02.22 |
[Device Driver] 변수의 데이터형과 바이트 순서와 volatile 변수 (0) | 2024.02.22 |
[RaspberryPi DeviceDriver] 디바이스 드라이버 매개변수 명령어로 입력 받는 함수 만들기 (0) | 2024.02.22 |