linux_raspberrypi_book
리눅스 드라이버 개발과 Raspberry Pi - 실습 랩
임베디드 시스템은 우리 일상생활의 필수적인 부분이 되었습니다. 모바일 장치, 네트워킹 인프라, 가정 및 소비자 기기, 디지털 사이니지, 의료 영상, 자동차 인포테인먼트 등 수많은 산업 응용 분야에 배치됩니다. 임베디드 시스템의 사용은 기하급수적으로 증가하고 있습니다. 이러한 임베디드 시스템 중 다수는 저렴하면서도 강력한 시스템 온 칩(SoC)을 구동하며, 이 SoC는 리눅스 운영 체제를 실행합니다. Broadcom의 BCM2837은 이러한 SoC 중 하나로, 1.2Ghz에서 작동하는 사중 ARM Cortex A53 코어를 구동합니다. 이것이 인기 있는 Raspberry Pi 3 보드에 사용되는 SoC입니다.
이 책은 '실습을 통한 학습(learning by doing)' 접근 방식을 따르므로, 첫 장부터 Raspberry Pi를 가지고 놀게 될 것입니다. Raspberry Pi 보드 외에도 여러 저가형 보드를 사용하여 실습 예제를 개발할 것입니다. 랩에서는 각 단계가 무엇을 의미하는지 자세히 설명하고 있으므로, 책의 내용을 자신의 필요에 맞게 조정하여 자체 하드웨어 구성 요소를 사용할 수 있습니다.
독자는 Raspberry Pi 보드를 위한 리눅스 드라이버를 개발하는 방법을 배우게 됩니다. 외부 하드웨어와 상호 작용하지 않는 가장 간단한 것들부터 시작하여, 가속도계(Accelerometer), DAC, ADC, RGB LED, 버튼, 조이스틱 컨트롤러, 멀티 디스플레이 LED 컨트롤러 및 I2C와 SPI 버스를 통해 제어되는 I/O 익스팬더 등 다양한 종류의 장치를 관리하는 리눅스 드라이버를 개발하게 됩니다. 또한 DMA 드라이버, USB 장치 드라이버, 인터럽트를 관리하는 드라이버, 그리고 SoC의 내부 레지스터에 쓰기/읽기를 수행하여 GPIO를 제어하는 드라이버도 개발합니다. 이러한 일부 드라이버의 개발을 용이하게 하기 위해, 다양한 유형의 리눅스 커널 서브시스템(Miscellaneous, LED, UIO, USB, Input 및 Industrial I/O)을 사용하게 됩니다. 여러 사용자 애플리케이션 외에도 30개 이상의 커널 모듈이 작성되었으며, 이는 책의 GitHub 저장소에서 다운로드할 수 있습니다.
이 책은 2019년 11월에 출시되어 2025년 12월까지 유지보수될 예정인 Long Term Support (LTS) Linux 커널 5.4를 사용합니다. 이 책에서 사용된 Linux 커널 5.4는 Ubuntu 20.04 LTS를 사용하여 컴파일되었습니다. 20.04가 아닌 다른 버전의 Ubuntu는 테스트되지 않았으며, 이러한 버전으로 Linux 커널 5.4를 빌드할 경우 다른 컴파일 문제가 발생할 수 있습니다.
이 책은 이 분야에 대한 사전 지식이 전혀 없는 사람도 드라이버 개발을 시작할 수 있도록 하는 학습 도구입니다. 따라서 집필 과정에서 높은 수준의 복잡성을 갖지 않으면서도 주요 드라이버 개발 개념을 강화하는 데 도움이 되고, 독자 스스로 자신의 드라이버를 개발할 수 있는 출발점이 될 수 있도록 하려는 의도가 있었습니다. 그리고 기억하세요. 드라이버를 개발하는 가장 좋은 방법은 처음부터 코드를 작성하는 것이 아닙니다. 유사한 Linux 커널 메인라인(mainline) 드라이버에서 무료로 사용할 수 있는 코드를 재사용할 수 있습니다. 이 책 전체에 걸쳐 작성된 모든 드라이버는 GPL 라이선스를 따르므로, 동일한 라이선스 하에 수정하고 재배포할 수 있습니다.
실습 과정에서 개발된 Linux 드라이버 및 애플리케이션은 세 가지 다른 Raspberry Pi 보드인 Raspberry Pi 3 Model B, Raspberry Pi 3 Model B+, 그리고 Raspberry Pi 4 Model B로 포팅되었습니다. 이 보드의 사양은 다음에서 확인할 수 있습니다:
이 책에서는 실습 과정 중 사용된 데모 섹션 및 Device Tree 설정이 Raspberry Pi 3 Model B 보드를 기준으로 언급됩니다. 세 가지 Raspberry Pi 보드에 대한 Linux 드라이버, 애플리케이션 및 Device Tree 파일은 책의 GitHub에서 다운로드할 수 있습니다. Raspberry Pi 보드 외에도 이 책을 최대한 활용(실습 진행)하려면 다음 하드웨어가 필요합니다:
MikroElektronika Color click 액세서리 보드 (LAB 5.2, LAB 7.3, LAB 10.3 및 LAB 11.1에서 사용): https://www.mikroe.com/color-click
PCF8574 IO 확장 보드 (LAB 6.1에서 사용): https://www.waveshare.com/pcf8574-io-expansion-board.htm
Analog Devices LTC3206 I2C 멀티디스플레이 보드 DC749A (LAB 6.2 및 LAB 13.4에서 사용): https://www.analog.com/en/products/ltc3206.html#product-evaluationkit
MikroElektronika Button R 클릭 보드 (LAB 7.1, LAB 7.2 및 LAB 7.3에서 사용): https://www.mikroe.com/button-r-click
MikroElektronika EXPAND 6 클릭 보드 (LAB 7.4, LAB 7.5 및 LAB 7.6에서 사용): https://www.mikroe.com/expand-6-click
MikroElektronika Accel 클릭 보드 (LAB 10.1, LAB 10.4 및 LAB 12.1에서 사용): https://www.mikroe.com/accel-click
Olimex MOD-Wii-UEXT-NUNCHUCK (LAB 10.2, LAB 10.3 및 LAB 11.2에서 사용): https://www.olimex.com/Products/Modules/Sensors/MOD-WII/MOD-Wii-UEXT-NUNCHUCK/open-source-hardware
MikroElektronika PIXI 클릭 보드 (LAB 11.1에서 사용): https://www.mikroe.com/pixi-click
Microchip Curiosity PIC32MX470 개발 보드 (LAB 13.1, LAB 13.2, LAB 13.3 및 LAB 13.4에서 사용): https://www.microchip.com/DevelopmentTools/ProductDetails/dm320103#additional-summary