device_create 예제

하지만 그것에 몇 줄 후 … device_create(cl, NULL, MKNOD(MAJOR(첫 번째), 마이너(첫 번째) + i), NULL, “mynull%d”, i); 다시 한번 죄송합니다. class_create 및 device_create 호출 (http://lxr.free-electrons.com/source/drivers/base/class.c#L249)이 오류에 NULL을 반환하지 않고 ERR_PTR을 반환하지 않는다는 것을 (놀랍게도) 가리킬 수 있습니다. 이는 -errno 캐스팅포인터이며 IS_ERR로 확인하고 PTR_ERR이 있는 숫자로 변환해야 합니다. 위대한 시리즈를 주셔서 감사합니다 – 나는 또한 리눅스 트리를 참조하여 많은 것을 배웠습니다 (위의 lxr를 사용하여). 커널에는 lib/vsprintf.c 를 참조하는 유용한 표준 라이브러리 복제 함수를 포함하여 많은 문자열 함수가 구현되어 있습니다. 나는 DKazakov가 위에서 언급 한 것과 같은 문제를 (본질적으로) 가지고 있습니다. 나는 비글 보드 포럼에 대해 물어, 그것은 뭔가가 충돌할 수 있습니다 4.4.48에서 변경 되었을 수 있습니다 있는지 여부를 확인하기 위해 연락을 제안했다. 이제 우리가 여기에 논의 된 모든 것을 구현하는 리눅스 커널 모듈의 완전한 예. 이 문서의 끝에서 문자 장치 드라이버의 전체 예제를 찾을 수 있습니다., 하지만 먼저 어떻게 작동 하는지 설명 해 보자.

예를 들어 ebbchar 장치에 대한 사용자 수준 액세스를 제공하기 위해 첫 번째 단계는 장치에 대한 sysfs 항목을 식별하는 것입니다. 간단한 찾기를 사용하여 이 작업을 수행할 수 있습니다. -name “ebbchar” ./device/virtual/ebb/ebb/ebbhar ./ebbhar ./ebbchar ./ebbchar 단계 4: 두 번째 터미널 쉘로 돌아가ENTER를 눌러 완료할 수 있습니다(그늘진 출력은 2단계에서 반복되는 출력입니다). molloyd@beaglebone:~/탐험BB/엑스트라/커널/ebbchar$ ./테스트 시작 장치 테스트 코드 예제… 커널 모듈로 보낼 짧은 문자열입력: 두 번째 터미널 창에서 장치에 메시지를 쓰는 메시지입니다[두 번째 터미널 창에서 메시지입니다]. ENTER를 눌러 장치에서 다시 읽습니다… 장치에서 읽기 … 수신 된 메시지는 다음과 같습니다 : [] 프로그램 molloyd@beaglebone의 끝 : ~ / 탐험BB / 엑스트라 / 커널 / ebbchar $ 문자열이 수신되지 않습니다.

LKM이 해당 시점에 메시지를 저장하지 않기 때문입니다. 저장된 메시지를 이미 첫 번째 터미널 창 테스트 응용 프로그램에 전달하고 버퍼 인덱스를 0으로 재설정했습니다. 그런 다음 testebbchar 프로그램(목록 4)을 사용하여 LKM이 올바르게 작동하는지 테스트할 수 있습니다. 현재로서는 테스트 프로그램이 루트 권한으로 실행되어야 합니다. molloyd@beaglebone:~/탐험BB/엑스트라/커널/ebbchar$ sudo insmod ebbchar.ko molloyd@beaglebone:~/exploringBB/엑스트라/커널/ebbchar$ sudo ./테스트 시작 장치 테스트 코드 예… 커널 모듈로 보낼 짧은 문자열을 입력: 이것은 장치에 ebbchar LKM 쓰기 메시지의 테스트입니다 [이것은 ebbchar LKM의 테스트입니다]. ENTER를 눌러 장치에서 다시 읽습니다… 장치에서 읽기 … 수신 된 메시지는 다음과 같습니다 : [이것은 ebbchar LKM (33 문자)의 테스트입니다] 프로그램 molloyd@beaglebone의 끝 :~/탐험BB / 엑스트라 / 커널 / ebbchar $ sumod ebbchar 장치 드라이버는 관련 주요 및 소수 의 숫자를 가지고있다. 예를 들어 /dev/ram0 및 /dev/null은 주 번호 1이 있는 드라이버와 연결되며 /dev/tty0 및 /dev/ttyS0은 주 숫자 4가 있는 드라이버와 연결됩니다. 주요 숫자는 장치에 액세스할 때 올바른 장치 드라이버를 식별 하기 위해 커널에 의해 사용 됩니다.

마이너 번호의 역할은 장치에 따라 다르며 드라이버 내에서 내부적으로 처리됩니다. /dev 디렉토리에서 목록을 수행하는 경우 각 장치에 대한 주/소수 숫자 쌍을 볼 수 있습니다.