이 문서에서는 Linux 사용자 공간 프로그램과 Linux 커널 공간에서 실행 중인 로드 가능한 커널 모듈(LKM) 간에 정보를 전달하는 데 사용할 수 있는 간단한 문자 드라이버에 대해 설명합니다. 이 예제에서 C 사용자 공간 응용 프로그램은 LKM에 문자열을 보냅니다. 그런 다음 LKM은 보낸 메시지에 포함된 문자 수와 함께 보낸 메시지로 응답합니다. 이 문서의 후반부에서는 이 접근 방식으로 발생하는 동기화 문제를 해결해야 하는 이유를 설명하고 뮤텍스 잠금을 사용하여 솔루션을 제공하는 프로그램의 버전을 제공합니다. strace 명령은 프로그램을 실행하여 수행하는 시스템 호출을 가로채고 기록할 수 있는 매우 유용한 디버깅 도구입니다. 시스템 호출 이름, 전달된 인수 및 결과 반환 값이 모두 표시되어 런타임 문제를 해결하는 데 유용한 도구가 됩니다. 중요한 것은 strace의 출력을 보기 위해 실행 수에 대한 소스 코드가 필요하지 않습니다. 예를 들어 사용자 공간 응용 프로그램에서 스trace를 사용하여 사용자 공간 프로그램과 커널 모듈 간의 통신을 볼 수 있으며, 이 모듈은 테스트 응용 프로그램에 대해 다음과 같은 결과를 초래합니다. 커널/ebbchar$ sudo apt-get 설치 strace molloyd@beaglebone:~/exploringBB/엑스트라/커널/ebbchar$ strace -v 사용: strace [-dffhiqrtttttTvVxx] [-a 열] [-e expr] …
[-o 파일] [-p 파이드] … 【-s 스트라사이즈】 [-u 사용자 이름] [-E var =val] … [명령 [아르그 ...]] molloyd@beaglebone:~/탐험BB/엑스트라/커널/ebbchar$ sudo strace ./test execve (“./test”, ["./test"], [/* 15 vars */]) = 0 … 쓰기 (1, “장치 테스트 코드 시험 을 시작”…, 37 시작 de…) = 37 열기 (“/dev/ebbchar”, O_RDWR) = 3 쓰기 (1, “장치에 메시지 쓰기 [T"..., 60 쓰기 메시지 ...) = 60 쓰기 (3, "EBBChar 장치 테스트", 26) = 26 쓰기 (1, "장치에서 읽기..." , 27 장치에서 읽기 ...) = 27 읽기 (3, "", 100) = 0 쓰기 (1, "수신 된 메시지는 : [Testin"..., 66수신 ...) = 66 쓰기(1, "프로그램 종료n", 19 프로그램의 끝) = 19 exit_group(0) = ? 시스템 호출 출력은 사용자 공간 프로그램 테스트와 /dev/ebbchar 장치 드라이버 간에 발생하는 통신에 대한 인상적인 통찰력을 제공합니다. ebbchar: 기호 device_create [104853.869208] ebbchar: 알 수 없는 기호 장치_create (err -22) [104853.869241] ebbchar: 기호 장치_destroy [104853.869251] ebbchar의 버전에 대해 동의하지 않음 err -22) 단계 2: 다음 두 번째 터미널 창 셸을 사용 하 여 두 번째 프로세스를 만들기 위해 테스트 응용 프로그램을 실행 하려고 할 수 있습니다.