Raspberry Pi로 Linux 드라이버 개발 학습


13

실제 하드웨어 장치 용 Linux 장치 드라이버를 작성하고 싶습니다. 어떤 라즈베리 파이 주변기기가 적합합니까? 기본적으로 다음이 필요합니다.

  1. 초보자를 위해 충분히 작아야합니다 (최대 몇 달, 몇 주 더 좋음).

  2. 데이터 시트를 사용할 수 있어야합니다. 처음에는 USB- 이더넷 어댑터에 대해 생각하고 있었지만 데이터 시트가 매우 제한적인 것 같습니다.

어떤 아이디어? GPIO에서 직렬 콘솔을 작동시키는 것과 같은 것일 수 있습니까?


2
Linux 드라이버는 커널 모듈이며 기술적으로는 하드웨어와 전혀 관련이 없기 때문에 가장 먼저 시도해야 할 것은 char 장치 인터페이스, 즉 char 장치 파일을 제공 할 수있는 char 장치 인터페이스 일 것입니다. 사소한 목적을 위해 (프로세스의 내용과 유사하게) 읽거나 쓸 수 있습니다.
goldilocks

나는 커널 / 드라이버 개발에 관한 책을 읽는 것과 함께 모든 것을하고 튜토리얼을 완성하고 의사 장치 용 커널 모듈을 썼습니다. 이 모든 것이 좋지만 이제는 실제 하드웨어로 작업하고 싶습니다 ..
Ivan

Greg KH는 이것을 잠시 전에 썼습니다 (일부 관점에서는 약간 구식 일 수도 있습니다) : linuxjournal.com/article/7353 따라서 공개 데이터 시트가있는 USB 장치가 있습니다. 그는 리버스 엔지니어링 팁을 가지고 있습니다 (너무 복잡한 방법으로는하고 싶지 않습니다). GPIO 핀에 대한 것 나는 일반적으로 기존 I2C 등 드라이버를 사용하여 작동한다고 생각하지만, 무시하고 직접 할 수 있습니다.
goldilocks

답변:


4

복잡한 장치 및 / 또는 복잡한 버스와 인터페이스 할 때 드라이버 작성을 배우기가 어려울 수 있습니다. 이 때문에 마이크로 컨트롤러에 일반적으로 사용되는 I²C / SPI 장치와 같이 간단하고 잘 알려진 장치 (커널에서 드라이버의 기존 구현 무시)를 사용하는 것이 좋습니다. 예를 들어 Arduino 커뮤니티에서 "지원"하는 장치 (라이브러리 / 문서가 있음을 의미)를 찾은 다음 RaspberryPi와 함께 사용해보십시오.

이것으로 충분하지 않거나 너무 많은 하드웨어를 사고 싶지 않다면 직접 만들 수 있습니다. atmega 또는 다른 것과 같은 마이크로 컨트롤러를 가져 와서 장치가되도록 프로그램을 만든 다음 Linux 드라이버를 사용하여 인터페이스하십시오. 이 방법으로 다른 클래스의 장치를 에뮬레이트하는 프로그램을 쉽게 만들 수 있습니다. "펌웨어"를 직접 작성하므로 문제를 디버그하는 데 도움이됩니다.

이를 위해서는 약간의 마이크로 컨트롤러 프로그래밍 기술이 필요하지만 Arduino로 프로그래밍을 배우는 것은 어렵지 않으며 드라이버 프로그래머에게 유용한 지식이라고 생각합니다.


GPIO 핀을 통해 소프트웨어에서 직렬 통신을 구현하는 것은 어떻습니까? 예를 들어 시리얼을 PC에 연결하고 콘솔에 무언가를 출력하려고 시도하십시오. 가능합니까?
Ivan

@ 이반 : 내가 그 권리를 이해했는지 잘 모르겠습니다. 직렬로 UART / rs232를 의미하고 소프트웨어로 비트 뱅을 의미하는 경우 타이밍 제약 때문에 불가능합니다. 반면에 RaspberryPi UART 하드웨어를 사용하여 Linux 직렬 장치를 구현하는 것을 의미한다면 물론 가능합니다. 이 하드웨어에 필요한 모든 정보는 BCM2835 ARM Peripherals문서 에서 찾을 수 있다고 생각합니다 . 그러나 사용하려면 먼저 커널에서 기존 드라이버를 비활성화해야합니다.
Krzysztof Adamski

고맙지 만 비트 뱅킹 UART의 불가능에 대해 확신하십니까? ganssle.com/articles/auart.htm 링크를 찾았 으므로 전송 속도가 낮고 전송 부분 만 구현하는 것이 더 쉬워 보입니다.
Ivan

@ivan :이 기사는 Linux와 같은 범용 운영체제를 가진 시스템에 관한 것이 아닙니다. UART에는 실시간 운영 체제 없이는 매우 엄격한 타이밍 제약 조건이 있습니다. 즉, 낮은 전송 속도에서 그렇게 할 수는 있지만 실제로 신뢰할 수는 없습니다.
Krzysztof Adamski

raspberrypi.stackexchange.com/questions/1987/… 가 옳은 것처럼 보입니다 (그러나 흥미로운 해결책이 있습니다). 도와 주셔서 감사합니다.
Ivan

3

개인적으로 GPIO 핀에 직접 연결된 하나 이상의 LED와 같은 매우 간단한 장치부터 시작하겠습니다.

꽂을 준비가 된 장치를 구입하거나 직접 연결할 수 있습니다.

필자가 이것을 제안하는 이유는 일반적인 프로그램보다 드라이버를 디버깅하는 것이 일반적으로 훨씬 더 어렵 기 때문에 시작하는 간단한 과제가 유용하며 더 복잡한 장치에 대한 디버그 방법으로 해당 코드를 사용할 수 있다는 것입니다. 타이밍이 중요한 경우 오실로스코프에 연결하는 GPIO 핀).

여기 에 사용 가능한 LedBorg 용 커널 드라이버가 있다면 GPIO 핀을 정기적으로 구동하기위한 소스는 합리적으로 간단한 예입니다.


@PiBorg 안녕하세요. GPIO 핀에 직접 연결된 하나 이상의 LED와 같은 장치의 간단한 드라이버를 코딩하는 방법을 배우는 데 도움이되는 몇 가지 리소스를 알려줄 수 있습니까?
Sagar

0

하드웨어 드라이버를 작성할 수있는 가장 간단한 "장치"(하드웨어 드라이버 개발이 필요한 경우)도 LED처럼 간단 할 수 있습니다 (기술적으로 LED는 장치가 아니기 때문에 인용 부호를 추가했지만 여전히 @PiBorg에서 제안한대로).

다른 선택은 포토 레지스트, 수동 적외선 센서 (짧은 PIR), 온도 센서, PC 팬 (바람직하게 모니터링 할뿐만 아니라 제어 할 수있는 4 선 팬)과 같은 인터페이스가 쉬운 일부 장치 / 구성 요소입니다. RPM), LED 도트 매트릭스 등. 기본적으로 이러한 간단한 장치를 사용하면 하드웨어를 최소화하고 (실제로 달성 한 것을보고 만질 수 있음) 동시에 훨씬 복잡한 장치에 사용되는 많은 주제에 대해 배울 수 있습니다. 복잡성은 주로 그들이 사용하는 프로토콜에서 비롯됩니다.

또한 커널 모듈에 여분의 마일을 파낼 필요가 없습니다. 물론 당신이 그렇게하고 싶다면 아무도 당신을 막을 수 없습니다. :)

다음은 수동 적외선 센서 와 인터페이스 하는 예입니다 (PIR이 제공 될 때 곧 테스트하겠습니다 : 3). 예를 들어 PIR과 작동하는 커널 드라이버를 만드는 방법을 확인하기 위해 Linux 커널의 세계에 대해 더 깊이 파고들 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.