Linux 문자 장치 드라이버 작성 기본 프로 세 스

드라이버 작성 기본 프로 세 스:
1. 우선 일부 버 전 정 보 는 쓸모 가 없 지만 적어 서 는 안 된다.
       
#define __NO_VERSION__
#include <linux/modules.h>
#include <linux/version.h>
char kernel_version[] = UTS_RELEASE;

2. 시스템 호출 과 드라이버 를 연결 하기 위해 서 는 매우 중요 한 데이터 구조 가 필요 합 니 다: struct fileoperations。
file_operations 구조의 모든 구성원 의 이름 은 시스템 호출 에 대응 합 니 다.사용자 프로 세 스 는 시스템 호출 을 이용 하여 장치 파일 에 대해 read / write 작업 을 할 때 시스템 호출 은 장치 파일 의 주 장치 번 호 를 통 해 해당 하 는 장치 드라이버 를 찾 은 다음 에 이 데이터 구조 에 해당 하 는 함수 지침 을 읽 고 이 함수 에 제어권 을 전달 합 니 다.이것 은 Liux 의 장치 드라이버 작업 의 기본 원리 이다.장치 드라이버 를 만 드 는 주요 작업 은 하위 함 수 를 만 들 고 file 을 채 우 는 것 입 니 다.operations 의 각 영역
3. 간단 한 드라이버 작성 (test. c):
a. 기본 적 인 헤더 파일 을 포함 합 니 다.
b. read (), write () 등 기능 함 수 를 작성 합 니 다.이 함수 들 이 호출 되 었 을 때 시스템 은 핵심 상태 로 들 어 갔다.
c. struct file 정의operations 구조의 대상, 구조 체 를 채 웁 니 다.구조 체 에서 기능 의 순 서 는 바 꿀 수 없습니다. 일부 기능 이 실현 되 지 않 으 면 NULL 로 채 웁 니 다. 이미 실 현 된 기능 은 read (), write () 와 같이 각각 해당 하 는 위치 에 추 가 됩 니 다.이 단계 에서 실 현 된 것 은 함수 의 등록 이다.여기까지 드라이버 의 주 체 는 다 썼 다 고 할 수 있다.드라이버 를 커 널 에 끼 워 넣 어야 합 니 다.
d. 장치 드라이버 등록, register 사용chrdev 등록 문자 형 장치.함수 프로 토 타 입:
  
int register_chrdev(0, "test_name", &test_file_operations)

함수 가 주 장치 번 호 를 되 돌려 줍 니 다. 등록 에 성공 하면 반환 값 이 0 보다 큽 니 다.
첫 번 째 매개 변수: 주 장치 번호.두 번 째 매개 변수: 등 록 된 장치 이름 입 니 다.세 번 째 매개 변수: 구조 체 이름 (장치 관련 조작 방식, 드라이버 가 실제 작업 을 수행 하 는 함수 의 지침).
이 함 수 는 int initmodule (void) 함수 호출, 이 함 수 는 시스템 이 시 작 될 때 커 널 에 등록 할 때 호출 합 니 다.
e. rmmod 로 모듈 을 마 운 트 해제 할 때 cleanupmodule 함수 가 호출 되 었 습 니 다. 문자 장치 test 가 시스템 문자 장치 표 에서 차지 하 는 표 항목 을 방출 합 니 다.
  
void cleanup_module(void)
{
  unregister_chrdev(test_major, "test");
}

여기까지 test. c 는 기본적으로 작성 이 완료 되 었 습 니 다.간단 한 문자 장 치 는 다 썼 다 고 할 수 있다.
4. 컴 파일
  
$ gcc -O2 -DMODULE -D__KERNEL__ -c test.o test.c

파일 test. o 를 가 져 오 는 것 은 장치 드라이버 입 니 다.
만약 장치 드라이버 에 여러 개의 파일 이 있다 면, 모든 파일 을 위의 명령 행 에 따라 컴 파일 한 다음,
  
ld -r file1.o file2.o -o modulename

드라이버 가 이미 컴 파일 되 었 으 니, 지금 그것 을 시스템 에 설치 해라.
  
$ insmod -f test.o

설치 에 성공 하면 / proc / devices 파일 에서 장치 test 를 볼 수 있 고 주 장치 번 호 를 볼 수 있 습 니 다.마 운 트 해제 실행:
  
$ rmmod test

 
5. 장치 노드 만 들 기
  
mknod /dev/test c major minor

c 는 문자 장치, major 는 주 장치 번호, minor 는 장치 번호 에서 보통 0 으로 설정 할 수 있 습 니 다.
이상 은 Liux 구동 작성 의 기본 과정 입 니 다.

좋은 웹페이지 즐겨찾기