실제 하드웨어 장치 용 Linux 장치 드라이버를 작성하고 싶습니다. 어떤 라즈베리 파이 주변기기가 적합합니까? 기본적으로 다음이 필요합니다.
초보자를 위해 충분히 작아야합니다 (최대 몇 달, 몇 주 더 좋음).
데이터 시트를 사용할 수 있어야합니다. 처음에는 USB- 이더넷 어댑터에 대해 생각하고 있었지만 데이터 시트가 매우 제한적인 것 같습니다.
어떤 아이디어? GPIO에서 직렬 콘솔을 작동시키는 것과 같은 것일 수 있습니까?
실제 하드웨어 장치 용 Linux 장치 드라이버를 작성하고 싶습니다. 어떤 라즈베리 파이 주변기기가 적합합니까? 기본적으로 다음이 필요합니다.
초보자를 위해 충분히 작아야합니다 (최대 몇 달, 몇 주 더 좋음).
데이터 시트를 사용할 수 있어야합니다. 처음에는 USB- 이더넷 어댑터에 대해 생각하고 있었지만 데이터 시트가 매우 제한적인 것 같습니다.
어떤 아이디어? GPIO에서 직렬 콘솔을 작동시키는 것과 같은 것일 수 있습니까?
답변:
복잡한 장치 및 / 또는 복잡한 버스와 인터페이스 할 때 드라이버 작성을 배우기가 어려울 수 있습니다. 이 때문에 마이크로 컨트롤러에 일반적으로 사용되는 I²C / SPI 장치와 같이 간단하고 잘 알려진 장치 (커널에서 드라이버의 기존 구현 무시)를 사용하는 것이 좋습니다. 예를 들어 Arduino 커뮤니티에서 "지원"하는 장치 (라이브러리 / 문서가 있음을 의미)를 찾은 다음 RaspberryPi와 함께 사용해보십시오.
이것으로 충분하지 않거나 너무 많은 하드웨어를 사고 싶지 않다면 직접 만들 수 있습니다. atmega 또는 다른 것과 같은 마이크로 컨트롤러를 가져 와서 장치가되도록 프로그램을 만든 다음 Linux 드라이버를 사용하여 인터페이스하십시오. 이 방법으로 다른 클래스의 장치를 에뮬레이트하는 프로그램을 쉽게 만들 수 있습니다. "펌웨어"를 직접 작성하므로 문제를 디버그하는 데 도움이됩니다.
이를 위해서는 약간의 마이크로 컨트롤러 프로그래밍 기술이 필요하지만 Arduino로 프로그래밍을 배우는 것은 어렵지 않으며 드라이버 프로그래머에게 유용한 지식이라고 생각합니다.
BCM2835 ARM Peripherals
문서 에서 찾을 수 있다고 생각합니다 . 그러나 사용하려면 먼저 커널에서 기존 드라이버를 비활성화해야합니다.
개인적으로 GPIO 핀에 직접 연결된 하나 이상의 LED와 같은 매우 간단한 장치부터 시작하겠습니다.
꽂을 준비가 된 장치를 구입하거나 직접 연결할 수 있습니다.
필자가 이것을 제안하는 이유는 일반적인 프로그램보다 드라이버를 디버깅하는 것이 일반적으로 훨씬 더 어렵 기 때문에 시작하는 간단한 과제가 유용하며 더 복잡한 장치에 대한 디버그 방법으로 해당 코드를 사용할 수 있다는 것입니다. 타이밍이 중요한 경우 오실로스코프에 연결하는 GPIO 핀).
여기 에 사용 가능한 LedBorg 용 커널 드라이버가 있다면 GPIO 핀을 정기적으로 구동하기위한 소스는 합리적으로 간단한 예입니다.
하드웨어 드라이버를 작성할 수있는 가장 간단한 "장치"(하드웨어 드라이버 개발이 필요한 경우)도 LED처럼 간단 할 수 있습니다 (기술적으로 LED는 장치가 아니기 때문에 인용 부호를 추가했지만 여전히 @PiBorg에서 제안한대로).
다른 선택은 포토 레지스트, 수동 적외선 센서 (짧은 PIR), 온도 센서, PC 팬 (바람직하게 모니터링 할뿐만 아니라 제어 할 수있는 4 선 팬)과 같은 인터페이스가 쉬운 일부 장치 / 구성 요소입니다. RPM), LED 도트 매트릭스 등. 기본적으로 이러한 간단한 장치를 사용하면 하드웨어를 최소화하고 (실제로 달성 한 것을보고 만질 수 있음) 동시에 훨씬 복잡한 장치에 사용되는 많은 주제에 대해 배울 수 있습니다. 복잡성은 주로 그들이 사용하는 프로토콜에서 비롯됩니다.
또한 커널 모듈에 여분의 마일을 파낼 필요가 없습니다. 물론 당신이 그렇게하고 싶다면 아무도 당신을 막을 수 없습니다. :)
다음은 수동 적외선 센서 와 인터페이스 하는 예입니다 (PIR이 제공 될 때 곧 테스트하겠습니다 : 3). 예를 들어 PIR과 작동하는 커널 드라이버를 만드는 방법을 확인하기 위해 Linux 커널의 세계에 대해 더 깊이 파고들 수 있습니다.