산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

내장된 Linux 장치 드라이버:역할 이해

편집자 주:임베디드 Linux는 임베디드 시스템 설계에 사용되는 최고의 운영 체제 중 하나로 꾸준히 순위를 매겼습니다. 사물 인터넷(IoT)에 대한 관심이 빠르게 증가함에 따라 다양한 역할을 수행하는 임베디드 Linux의 능력은 IoT 애플리케이션 계층 구조의 각 계층에서 발견되는 다양한 요구 사항을 지원하는 데 필수적임이 증명될 것입니다. 결과적으로 임베디드 Linux 시스템을 마스터하는 엔지니어의 능력은 보다 정교한 시스템의 빠르고 안정적인 개발을 달성하는 데 중요하게 될 것입니다. Mastering Embedded Linux Programming – Second Edition에서 저자 Chris Simmonds는 독자를 이 중요한 운영 체제의 폭과 깊이에 대한 자세한 둘러보기를 통해 각 핵심 요점을 설명하는 자세한 예를 사용합니다.

이 책의 9장에서 발췌한 내용에서 저자는 커널 장치 드라이버가 시스템 하드웨어와 상호 작용하는 방법과 개발자가 장치 드라이버를 작성하고 응용 프로그램에서 사용하는 방법을 설명합니다. 다음 연재에서는 임베디드 Linux 장치 드라이버에 대한 이 발췌문을 제공합니다.

• 역할 이해

• 런타임 시 드라이버 상태 읽기

• 사용자 공간의 장치 드라이버

• 커널 장치 드라이버 작성

• 하드웨어 구성 검색

에서 수정 임베디드 리눅스 프로그래밍 마스터하기 – 제2판, Chris Simmonds.

9장. 장치 드라이버와의 인터페이스

커널 장치 드라이버는 기본 하드웨어가 시스템의 나머지 부분에 노출되는 메커니즘입니다. 임베디드 시스템 개발자는 이러한 장치 드라이버가 전체 아키텍처에 어떻게 맞는지, 사용자 공간 프로그램에서 액세스하는 방법을 알아야 합니다. 귀하의 시스템에는 새로운 하드웨어가 있을 수 있으며 이에 액세스하는 방법을 찾아야 합니다. 많은 경우에 장치 드라이버가 제공되며 커널 코드를 작성하지 않고도 원하는 모든 것을 얻을 수 있습니다. 예를 들어, sysfs의 파일을 사용하여 GPIO 핀과 LED를 조작할 수 있으며 SPI(Serial Peripheral Interface) 를 포함하여 직렬 버스에 액세스하는 라이브러리가 있습니다. 그리고 2 C(집적 회로 간).

장치 드라이버를 작성하는 방법을 찾을 수 있는 곳은 많이 있지만 왜 그렇게 하고 싶은지, 그렇게 할 때 선택할 수 있는 방법을 알려주는 곳은 거의 없습니다. 이것이 제가 여기서 다루고자 하는 것입니다. 그러나 이 책은 커널 장치 드라이버 작성에 관한 책이 아니며 여기에 제공된 정보는 해당 지역을 탐색하는 데 도움이 되지만 반드시 그곳에 정착할 필요는 없다는 점을 기억하십시오. 장치 드라이버를 작성하는 데 도움이 되는 좋은 책과 기사가 많이 있으며 그 중 일부는 이 장의 끝에 나열되어 있습니다.

이 장에서는 다음 주제를 다룰 것입니다:

장치 드라이버의 역할

4장, 커널 구성 및 구축에서 언급했듯이 , 커널의 기능 중 하나는 컴퓨터 시스템의 많은 하드웨어 인터페이스를 캡슐화하여 사용자 공간 프로그램에 일관된 방식으로 제공하는 것입니다. 커널에는 위의 커널과 아래의 하드웨어 사이를 중재하는 코드 조각인 장치 드라이버를 쉽게 작성할 수 있도록 설계된 프레임워크가 있습니다. 장치 드라이버는 UART 또는 MMC 컨트롤러와 같은 물리적 장치를 제어하기 위해 작성되거나 null 장치( /dev/null ) 또는 ramdisk와 같은 가상 장치를 나타낼 수 있습니다. 한 드라이버가 같은 종류의 여러 장치를 제어할 수 있습니다.

커널 장치 드라이버 코드는 나머지 커널과 마찬가지로 높은 권한 수준에서 실행됩니다. 프로세서 주소 공간과 하드웨어 레지스터에 대한 전체 액세스 권한이 있습니다. 인터럽트 및 DMA 전송을 처리할 수 있습니다. 동기화 및 메모리 관리를 위해 정교한 커널 인프라를 사용할 수 있습니다. 그러나 여기에는 단점이 있음을 알아야 합니다. 버그가 있는 드라이버에서 문제가 발생하면 정말 잘못되어 시스템이 다운될 수 있습니다. 따라서 장치 드라이버는 실제 결정을 내리는 응용 프로그램에 정보를 제공하기만 하면 가능한 한 단순해야 한다는 원칙이 있습니다. 커널에 정책이 없음이라는 표현을 자주 듣습니다. . 시스템의 전반적인 동작을 제어하는 ​​정책을 설정하는 것은 사용자 공간의 책임입니다. 예를 들어, 새 USB 장치를 연결하는 것과 같은 외부 이벤트에 대한 응답으로 커널 모듈을 로드하는 것은 커널이 아니라 사용자 공간 프로그램인 udev의 책임입니다. 커널은 커널 모듈을 로드하는 수단을 제공할 뿐입니다.

Linux에는 세 가지 주요 유형의 장치 드라이버가 있습니다.

의사 파일 시스템 중 하나에 파일 그룹으로 표시되는 네 번째 유형도 있습니다. 예를 들어 이 장의 뒷부분에서 설명하겠지만 /sys/class/gpio에 있는 파일 그룹을 통해 GPIO 드라이버에 액세스할 수 있습니다. 먼저 세 가지 기본 기기 유형에 대해 자세히 살펴보겠습니다.

캐릭터 장치

캐릭터 장치는 사용자 공간에서 장치 노드라는 특수 파일로 식별됩니다. . 이 파일 이름은 연결된 주 및 부 번호를 사용하여 장치 드라이버에 매핑됩니다. 일반적으로 주요 숫자 장치 노드를 특정 장치 드라이버에 매핑하고 부수 액세스 중인 인터페이스를 드라이버에 알려줍니다. 예를 들어 ARM Versatile PB에 있는 첫 번째 직렬 포트의 장치 노드 이름은 /dev/ttyAMA0 이며 주 번호는 204이고 부 번호는 64입니다. 두 번째 직렬 포트의 장치 노드는 동일한 주 번호를 갖습니다. 동일한 장치 드라이버에 의해 처리되지만 부 번호는 65입니다. 여기 나열된 디렉토리에서 4개의 직렬 포트에 대한 번호를 모두 볼 수 있습니다.

# ls -l /dev/ttyAMA*crw-rw---- 1 루트 루트 204, 64 Jan 1 1970 /dev/ttyAMA0crw-rw---- 1 루트 루트 204, 65 Jan 1 1970 /dev/ ttyAMA1crw-rw---- 1 루트 루트 204, 66 1970년 1월 1일 /dev/ttyAMA2crw-rw---- 1 루트 루트 204, 67 1970년 1월 1일 /dev/ttyAMA3

표준 주 및 부 번호 목록은 Documentation/devices.txt의 커널 문서에서 찾을 수 있습니다. 목록은 자주 업데이트되지 않으며 이전 단락에서 설명한 ttyAMA 장치를 포함하지 않습니다. 그럼에도 불구하고 drivers/tty/serial/amba-pl011.c에 있는 커널 소스 코드를 보면 메이저 번호와 마이너 번호가 선언된 위치를 볼 수 있습니다.

 #define SERIAL_AMBA_MAJOR 204 #define SERIAL_AMBA_MINOR 64

ttyAMA 드라이버와 같이 장치의 인스턴스가 둘 이상인 경우 장치 노드의 이름을 형성하는 규칙은 기본 이름인 ttyAMA를 사용하고 이 예에서 인스턴스 번호를 0에서 3까지 추가하는 것입니다.

5장 루트 파일 시스템 구축에서 언급했듯이 , 장치 노드는 여러 가지 방법으로 만들 수 있습니다.

위에서 사용한 숫자를 보면 메이저 번호와 마이너 번호가 모두 0에서 255 사이의 8비트 숫자라는 인상을 받을 수 있습니다. 사실 Linux 2.6부터 메이저 번호는 12비트 길이로 유효한 숫자를 제공합니다. 1에서 4,095까지, 그리고 마이너 번호는 0에서 1,048,575까지 20비트입니다.


임베디드

  1. 자동차의 임베디드 시스템 역할
  2. IoT 장치 PCB 제조에서 에폭시의 다양한 역할
  3. 핵심 기술은 임베디드 비전을 위한 성장 역할을 강화합니다
  4. Embedded Linux용 OTA 업데이트, 2부 – 기성 업데이트 시스템 비교
  5. Embedded Linux용 OTA 업데이트, 파트 1 – 기본 사항 및 구현
  6. 내장된 Linux 장치 드라이버:하드웨어 구성 검색
  7. 블로그:미세 유체 공학 영역에서 PDMS의 역할 이해
  8. IoT에서 Cryptojacking까지:새로운 모바일 장치 위협 이해
  9. IoT 기기 임베디드 하드웨어 해킹 소개
  10. CAM의 구성 요소와 CNC 가공에서의 역할