linux_book_2nd_edition
Linux Driver Development for Embedded Processors 2nd Edition
NXP i.MX7, Microchip SAMA5D27 및 Broadcomm BCM2837 프로세서를 위한 드라이버와 디바이스 트리(device tree)의 소스 코드는 drivers_source_code.zip에서 다운로드할 수 있습니다. 이 드라이버들은 v4.9 LTS 커널을 사용하여 구현되었습니다. 이 책 전체에 걸쳐 이러한 드라이버를 개발하는 데 사용된 평가 보드와 그 구성이 자세히 설명되어 있습니다.
SAMA5D27-SOM1 (SAMA5D27 System On Module)용 드라이버와 디바이스 트리의 소스 코드는 linux_4.14_sama5d27-SOM_drivers.zip에서 다운로드할 수 있습니다. 이 드라이버들은 v4.14 LTS 커널을 사용하여 구현되었습니다. 4.14 커널 드라이버 개발에는 ATSAMA5D27-SOM1-EK1 평가 플랫폼(https://www.microchip.com/developmenttools/ProductDetails/atsama5d27-som1-ek1)이 사용되었습니다. Microchip SAMA5D27-SOM1 실습 랩 설정은 이 GitHub 저장소에 포함된 Linux_4.14_SAMA5D27-SOM1_practical_labs.pdf 파일에서 설명됩니다.
2019년 3월 말 이후, 책의 본문에 새로운 장과 부록이 추가되었습니다. 내용은 다음과 같습니다: 제13장 “Linux USB Device Drivers”와 부록 “Porting Kernel Modules to the Microchip SAMA5D27-SOM1”. 이 두 개의 새 장은 해당 날짜 이전에 책을 구매한 독자들을 위해 이 책의 Github에서 다운로드할 수도 있습니다. USB 장에서는 Microchip PIC32MX 마이크로컨트롤러 기반으로 완전히 기능하는 USB HID 장치를 생성하고, 이를 Microchip SAMA5D27 프로세서 기반의 Linux USB Host 장치와 데이터를 송수신하는 방법을 배우게 될 것이며, 이 장 전체에 걸쳐 여러 사용자 정의 Linux USB 장치 드라이버가 개발될 것입니다.
부록에서는 이 책 전체에 걸쳐 설명된 실습실을 테스트하는 데 필요한 ATSAMA5D27-SOM1-EK1 보드의 하드웨어 설정을 설명합니다. 이 새로운 보드에서 실습을 실행하려면, 본 책의 GitHub 저장소에 포함된 Appendix_linux_4.14_sama5d27-SOM_drivers.zip 파일에서 커널 4.14 기반의 SAMA5D27-SOM1 Linux 드라이버와 SAMA5D27-SOM1 장치 트리 설정을 받게 됩니다.
2019년 11월 말 이후로, 이 책에 포함된 Linux 드라이버는 리눅스 커널 버전 4.19를 사용하는 Raspberry Pi 4 Model B 보드에서 실행되도록 조정되었습니다. Raspberry Pi 4 Model B 보드를 위해 개발된 커널 4.19 모듈은 linux_4.19_rpi4_drivers.zip 파일에 포함되어 있으며, 이 GitHub 저장소에서 다운로드할 수 있습니다. Raspberry Pi 4 실습실 설정은 이 저장소에 포함된 Linux_4.9_RaspberryPi4_practical_labs 문서에 설명되어 있습니다.
2023년 3월부터 source.codeaurora.org가 폐쇄되었습니다. NXP는 CodeAurora에서 GitHub로 마이그레이션하고 있습니다. 이제 모든 소스 코드는 다음 링크에서 찾을 수 있습니다: https://github.com/nxp-imx
'Chapter 1: Building the System'의 34페이지에서는 다음 지침을 새 지침으로 대체해야 합니다:
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-morty -m imx-4.9.11-1.0.0_ga.xml
를 다음 새 지침으로 대체합니다:
repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-morty -m imx-4.9.11-1.0.0_ga.xml
다음 지침들은 Ubuntu 16.04 64비트 배포판에서 테스트되었습니다.
Ubuntu 16.04 64비트 배포판에 다음 지침을 사용하여 python 3.6을 설치합니다:
~$ sudo add-apt-repository ppa:deadsnakes/ppa<br><code> </code>
<br>~$ sudo apt-get update<br><code> </code>
<br>~$ sudo apt-get install python3.6<br><code> </code>
<br>~$ sudo apt install python3-pip<br><code> </code>
<br>~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1<br><code> </code>
<br>~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2<br><code> </code>
<br>~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 3
이제 사용자의 기기에서 python 2.7, 3.5 및 3.6을 사용할 수 있습니다. 기본 python 버전은 3.6입니다.
다음 코드는 NXP Yocto BSP 레시피 레이어(recipe layers)를 다운로드하는 방법을 보여줍니다. 이 빌드를 위해 "fsl-release-bsp"라는 디렉토리가 생성됩니다:
~$ mkdir fsl-release-bsp
~$ cd fsl-release-bsp/
~/fsl-release-bsp$
git config --global user.name "Your Name"
~/fsl-release-bsp$
git config --global user.email "Your Email"
~/fsl-release-bsp$
git config --list
~/fsl-release-bsp$
repo init -u https://github.com/nxp-imx/imx-manifest -b imx-linux-morty -m imx-4.9.11-1.0.0_ga.xml
~/fsl-release-bsp$
repo sync -j4
빌드를 시작하기 전에 초기화해야 합니다:
~/fsl-release-bsp$
DISTRO=fsl-imx-x11 MACHINE=imx7dsabresd source fsl-setup-release.sh -b build_imx7d
이제 빌드 중 오류를 방지하기 위해 레시피 "firmware-imx_6.0.bb"의 IMX_FIRMWARE_SRC 변수를 다음 코드로 대체해야 합니다:
~$ gedit ~/fsl-release-bsp/sources/meta-fsl-bsp-release/imx/meta-bsp/recipes-bsp/firmware-imx/firmware-imx_6.0.bb
IMX_FIRMWARE_SRC ?= "git://github.com/NXP/imx-firmware;protocol=git"
이미지를 빌드하려면 python 버전을 3.6에서 2.7로 변경해야 합니다. 다음 명령을 실행하고 1 (2.7 버전)을 입력하세요:
~$ sudo update-alternatives --config python
이제 Linux 이미지를 빌드할 수 있습니다:
~/fsl-release-bsp/build_imx7d$
bitbake fsl-image-validation-imx
만약 여전히 imx-firmware에서 빌드 중 오류가 발생한다면, 다음 지침을 실행하세요:
~/fsl-release-bsp/build_imx7d$
bitbake firmware-imx -c cleanall
~/fsl-release-bsp/build_imx7d$
bitbake firmware-imx
~/fsl-release-bsp/build_imx7d$
bitbake fsl-image-validation-imx
그리고 커널 소스를 다운로드하기 위한 새로운 지침은 다음과 같습니다:
~$ git clone https://github.com/nxp-imx/linux-imx -b imx_4.9.11_1.0.0_ga
2020년 3월 초부터 이 책에 포함된 리눅스 드라이버는 NXP i.MX 7Dual MCIMX7SABRE 보드에서 Linux 커널 v4.19 LTS를 사용하여 실행되도록 조정되었습니다. NXP i.MX 7Dual 리눅스 드라이버 및 디바이스 트리 설정은 이 책의 Github 저장소에서 다운로드할 수 있는 linux_4.19_imx7_drivers.zip 파일에 포함되어 있습니다. NXP i.MX 7Dual 실습 환경 설정은 이 저장소에 포함된 Linux_4.19_i.MX7D_practical_labs 문서에 설명되어 있습니다.
2020년 3월 말부터 이 책에 포함된 리눅스 드라이버는 ST STM32MP1 프로세서에서 STM32MP157C-DK2 보드와 Linux 커널 v4.19 LTS를 사용하여 실행되도록 조정되었습니다. ST STM32MP1 리눅스 드라이버 및 디바이스 트리 설정은 이 책의 Github 저장소에서 다운로드할 수 있는 linux_4.19_stm32mp1_drivers.zip 파일에 포함되어 있습니다. NXP STM32MP1 실습 환경 설정은 이 저장소에 포함된 Linux_4.19_STM32MP1_practical_labs 문서에 설명되어 있습니다.
2020년 7월 말부터 이 책에 포함된 리눅스 드라이버는 ST STM32MP1 프로세서에서 STM32MP157C-DK2 보드와 Linux 커널 v5.4 LTS를 사용하여 실행되도록 조정되었습니다. ST STM32MP1 리눅스 드라이버 및 디바이스 트리 설정은 이 책의 Github 저장소에서 다운로드할 수 있는 linux_5.4_stm32mp1_drivers.zip 파일에 포함되어 있습니다. STM32MP1 실습 환경 설정은 이 저장소에 포함된 Linux_5.4_STM32MP1_practical_labs 문서에 설명되어 있습니다.
2020년 9월 초부터, Chapter 11의 실습에 새로운 LAB 11.5가 추가되어 IIO 드라이버 생성 개념을 강화하고 gpio 컨트롤러 드라이버를 실제적으로 구현하는 방법을 적용함으로써 Chapter 11에서 개발된 이론을 더욱 공고히 합니다. 이 새로운 드라이버는 Maxim MAX11300 PIXI 장치를 제어할 것입니다. 이 실습은 본 도서의 Github 저장소에서 다운로드할 수 있습니다. 또한, 여기서는 두 가지 다른 방법을 사용하여 GPIO를 제어하는 애플리케이션을 작성하는 방법도 확인할 수 있습니다. 첫 번째 방법은 디바이스 노드(device node)를 사용하여 GPIO를 제어하고, 두 번째 방법은 libgpiod 라이브러리의 함수를 사용하여 GPIO를 제어합니다. 이 애플리케이션들을 빌드하고 디버그하기 위해 Eclipse를 구성하는 방법을 학습하게 됩니다. 이 실습을 실행할 수 있도록 여러 프로세서 보드 중 하나를 선택할 수 있습니다:
• ST의 STM32MP157C-DK2 보드: 이 실습을 실행하는 지침은 Linux_5.4_STM32MP1_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 4 Model B: 이 실습을 실행하는 지침은 Linux_5.4_rpi4_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 3 Model B: 이 실습을 실행하는 지침은 Linux_5.4_rpi3_practical_labs 문서에 포함되어 있습니다.
LAB 11.5를 위해서는 MIKROE의 PIXI™ CLICK도 필요합니다. 이 보드의 문서는 [문서 링크]에서 찾을 수 있습니다.
2020년 10월 초부터, Chapter 7의 실습에 새로운 LAB 7.4가 추가되어 NESTED THREADED GPIO irqchips 드라이버 생성 개념을 강화하고 인터럽트 기능이 있는 gpio 컨트롤러를 실제적으로 생성하는 방법을 적용합니다. 또한, 사용자 공간(user space)에서 GPIO 인터럽트를 요청하는 사용자 애플리케이션도 개발하게 됩니다. 이 새로운 실습은 이 GitHub 저장소에서 다운로드할 수 있습니다. LAB 7.4를 실행할 여러 프로세서 보드 중 하나를 선택할 수 있습니다:
• ST의 STM32MP157C-DK2 보드: 이 실습을 실행하는 지침은 Linux_5.4_STM32MP1_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 4 Model B: 이 실습을 수행하는 방법은 Linux_5.4_rpi4_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 3 Model B: 이 실습을 수행하는 방법은 Linux_5.4_rpi3_practical_labs 문서에 포함되어 있습니다.
LAB 7.4를 위해서는 MIKROE의 EXPAND 6 Click도 필요합니다. 이 보드의 문서는 다음에서 찾을 수 있습니다.
2020년 10월 말부터 Chapter 7의 실습에 새로운 LAB 7.5가 추가되었으며, 이는 pinctrl 및 pwm 컨트롤러 드라이버를 생성하는 방법을 설명합니다. 이 드라이버를 개발할 때는 LAB 7.4에서 사용한 것과 동일한 보드를 사용할 것입니다.
2020년 11월 말부터 본 책에 포함된 리눅스 드라이버들이 Linux 커널 버전 5.4 LTS를 사용하여 Raspberry Pi 4 Model B 및 Raspberry Pi 3 Model B 보드에서 실행되도록 조정되었습니다. 이 보드를 위해 개발된 커널 5.4 모듈들은 linux_5.4_rpi4_drivers.zip과 linux_5.4_rpi3_drivers.zip 파일에 포함되어 있으며, 이 GitHub 저장소에서 다운로드할 수 있습니다. 실습 환경 설정은 이 저장소에 포함된 Linux_5.4_rpi4_practical_labs 및 Linux_5.4_rpi3_practical_labs 문서에 설명되어 있습니다.
2021년 1월 초부터 Chapter 10의 실습에 새로운 LAB 10.3이 추가되었으며, 이는 Input Subsystem 드라이버를 생성하는 개념을 강화합니다. 이 실습은 본 책의 Github 저장소에서 다운로드할 수 있습니다. LAB 10.3을 수행하기 위해 여러 프로세서 보드 중 하나를 선택할 수 있습니다:
• ST의 STM32MP157C-DK2 보드: 이 실습을 수행하는 방법은 Linux_5.4_STM32MP1_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 4 Model B: 이 실습을 수행하는 방법은 Linux_5.4_rpi4_practical_labs 문서에 포함되어 있습니다.
• Raspberry Pi 3 Model B: 이 실습을 수행하는 방법은 Linux_5.4_rpi3_practical_labs 문서에 포함되어 있습니다.
LAB 10.3을 위해서는 Olimex의 MOD-Wii-UEXT-NUNCHUCK도 필요합니다. 이 보드의 문서는 다음에서 찾을 수 있습니다.
2021년 1월 초부터 Chapter 11의 실습(labs)에 새로운 LAB 11.6이 추가되었습니다. 이 실습에서는 'provider'와 'consumer' 드라이버를 개발하는 방법을 자세히 설명합니다. 이 드라이버를 개발할 때 LAB 10.3에서 사용했던 보드를 그대로 사용할 것입니다.
또한, 본문에 포함된 실습 예제들을 테스트하는 데 필요한 모든 하드웨어를 상세히 설명하기 위해 'Practical Labs Hardware' 문서가 github에 추가되었습니다.