사물 인터넷 기술
편집자 주:임베디드 Linux 커널은 이미 임베디드 시스템에서 중요한 역할을 하고 있으며 사물 인터넷(IoT)의 다양한 요구 사항을 충족하는 데 있어 그 중요성이 점점 커지고 있습니다. 차례로 장치 드라이버는 응용 프로그램과 IoT 장치 자체 간의 중요한 연결을 제공합니다. Linux Device Drivers Development에서 저자 John Madieu는 자세한 설명과 많은 코드 샘플을 결합하여 이러한 드라이버의 개발에 대한 포괄적인 설명을 제공합니다.
이 책의 14장에서 발췌한 내용은 핀 제어 및 GPIO에 초점을 맞추고 있습니다. 이는 맞춤형 하드웨어 장치와 상호 작용하려는 임베디드 시스템 개발자에게 특히 중요한 영역입니다. 이 발췌 부분의 첫 번째 기사에서는 핀 제어 하위 시스템을 소개합니다.
John Madieu의 Linux Device Drivers Development에서 각색
14장. 핀 제어 및 GPIO 하위 시스템
John Madieu 작성
대부분의 임베디드 Linux 드라이버 및 커널 엔지니어는 GPIO를 사용하여 작성하거나 핀 멀티플렉싱을 사용합니다. 핀은 구성 요소의 나가는 라인을 의미합니다. SoC는 핀을 다중화합니다. 즉, 핀에 여러 기능이 있을 수 있습니다. 예를 들어 arch/arm/boot/dts/imx6dl-pinfunc.h의 MX6QDL_PAD_SD3_DAT1은 SD3 데이터 라인 1, UART1의 cts/rts, Flexcan2의 Rx 또는 일반 GPIO.
핀이 작동해야 하는 모드를 선택하는 메커니즘을 핀 먹싱이라고 합니다. 담당하는 시스템을 핀 컨트롤러라고 합니다. 이 장의 두 번째 부분에서는 범용 입력 출력 에 대해 설명합니다. (GPIO ), 이것은 핀이 작동할 수 있는 특수 기능(모드)입니다.
이 장에서 우리는:
핀 제어 하위 시스템을 살펴보고 DT에서 노드를 선언하는 방법 확인
레거시 정수 기반 GPIO 인터페이스와 새로운 설명자 기반 인터페이스 API 탐색
IRQ에 매핑된 GPIO 처리
GPIO 전용 sysfs 인터페이스 처리
핀 제어 하위 시스템
핀 제어 (pinctrl ) 하위 시스템은 핀 muxing을 관리할 수 있습니다. DT에서 특정 방식으로 핀을 다중화해야 하는 장치는 필요한 핀 제어 구성을 선언해야 합니다.
pinctrl 하위 시스템은 다음을 제공합니다.
핀 멀티플렉싱을 통해 동일한 핀을 UART TX 핀, GPIO 라인 또는 HSI 데이터 라인. 멀티플렉싱은 핀 그룹 또는 개별 핀에 영향을 줄 수 있습니다.
풀업, 풀다운, 드라이버 강도, 디바운스 기간 등과 같은 핀의 전자적 속성을 적용한 핀 구성.
이 책의 목적은 핀 컨트롤러 드라이버에서 내보내는 기능을 사용하는 것으로 제한되며 핀 컨트롤러 드라이버를 작성하는 방법은 아닙니다.
Pinctrl 및 장치 트리
pinctrl은 핀(GPIO 뿐만 아니라)을 수집하고 드라이버에 전달하는 방법일 뿐입니다. 핀 컨트롤러 드라이버는 DT의 핀 설명을 구문 분석하고 해당 구성을 칩에 적용합니다. 드라이버는 일반적으로 핀 구성 그룹을 설명하기 위해 두 개의 중첩 노드 세트가 필요합니다. 첫 번째 노드는 그룹의 기능(그룹이 사용되는 용도)을 설명하고 두 번째 노드는 핀 구성을 보유합니다.
DT에서 핀 그룹을 할당하는 방법은 플랫폼과 핀 컨트롤러 드라이버에 크게 의존합니다. 모든 핀 제어 상태에는 0에서 시작하여 연속적인 정수 ID가 부여됩니다. 동일한 이름이 항상 동일한 ID를 가리키도록 ID 위에 매핑되는 name 속성을 사용할 수 있습니다.
각 클라이언트 장치의 고유한 바인딩은 해당 DT 노드에 정의해야 하는 상태 집합과 제공해야 하는 상태 ID 집합을 정의할지 여부 또는 제공해야 하는 상태 이름 집합을 정의할지 여부를 결정합니다. 어쨌든 핀 구성 노드는 두 가지 속성을 통해 장치에 할당할 수 있습니다.
pinctrl-
pinctrl-name :목록의 각 상태에 이름을 부여할 수 있습니다. 목록 항목 0은 정수 상태 ID 0의 이름을 정의하고 목록 항목 1은 상태 ID 1 등을 정의합니다. 상태 ID 0에는 일반적으로 default라는 이름이 지정됩니다. . 표준화된 상태 목록은 include/linux/pinctrl/pinctrl-state.h에서 찾을 수 있습니다.
다음은 핀 제어 노드와 함께 일부 장치 노드를 보여주는 DT의 일부입니다.
앞의 예에서 핀 구성은
MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09 0x80000000
MX6QDL_PAD_DISP0_DAT15__GPIO5_IO09는 핀 기능을 나타내며 이 경우 GPIO이며 0x80000000은 핀 설정을 나타냅니다. 이 라인의 경우
MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1
MX6QDL_PAD_EIM_D25__UART3_RX_DATA는 UART3의 RX 라인인 핀 기능을 나타내며 0x1b0b1은 설정을 나타냅니다.
핀 기능은 핀 컨트롤러 드라이버에만 의미 있는 값을 갖는 매크로입니다. 일반적으로 arch//boot/dts/ 에 있는 헤더 파일에 정의되어 있습니다. 예를 들어 i.MX6 쿼드 코어(ARM)가 있는 UDOO 쿼드를 사용하는 경우 핀 기능 헤더는 arch/arm/boot/dts/imx6q-pinfunc.h가 됩니다. 다음은 GPIO5 컨트롤러의 다섯 번째 줄에 해당하는 매크로입니다.
#define MX6QDL_PAD_DISP0_DAT11__GPIO5_IO05 0x19c 0x4b0 0x000 0x5 0x0
이러한 선행 노드는 해당 드라이버별 노드에서 호출됩니다. 또한 이러한 핀은 해당 드라이버 초기화 중에 구성됩니다. 핀 그룹 상태를 선택하기 전에 먼저 pinctrl_get() 함수를 사용하여 핀 제어를 얻고, 요청한 상태가 있는지 여부를 확인하기 위해 pinctrl_lookup_state()를 호출하고, 마지막으로 상태를 적용하기 위해 pinctrl_select_state()를 호출해야 합니다.피>
다음은 pincontrol을 가져오고 기본 구성을 적용하는 방법을 보여주는 샘플입니다.
일반적으로 드라이버 초기화 중에 이러한 단계를 수행합니다. 이 코드의 적절한 위치는 probe() 함수 내에 있을 수 있습니다.
pinctrl_select_state()는 내부적으로 pinmux_enable_setting()을 호출하고, 이는 차례로 핀 제어 노드의 각 핀에서 pin_request()를 호출합니다.
pinctrl_put() 함수로 핀 컨트롤을 해제할 수 있습니다. API의 리소스 관리 버전을 사용할 수 있습니다. 즉, pinmux를 구성하기 위해 선택할 상태의 이름이 주어지면 pinctrl_get_select()를 사용할 수 있습니다. 이 기능은 다음과 같이 include/linux/pinctrl/consumer.h에 정의되어 있습니다.
정적 구조체 pinctrl *pinctrl_get_select(구조 장치 *dev,
const char *name)
여기서 *name은 pinctrl-name 속성에 작성된 상태 이름입니다. 상태 이름이 default 인 경우 pinctl_get_select() 주변의 래퍼인 pinctr_get_select_default() 함수를 호출하면 됩니다.
정적 구조체 pinctrl * pinctrl_get_select_default(
struct device *dev)
{
return pinctrl_get_select(dev, PINCTRL_STATE_DE
}
보드별 dts 파일(am335x-evm.dts)에서 실제 예를 살펴보겠습니다.
dcan1:d_can@481d0000 {
상태 ="좋음";
pinctrl-names ="기본값";
pinctrl-0 =<&d_can1_pins>;
};
그리고 해당 드라이버에서:
pinctrl =devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl))
dev_warn(&pdev->dev,"핀이 드라이버에서 구성되지 않았습니다.");
핀 제어 코어는 장치가 프로브될 때 자동으로 기본 pinctrl 상태를 요구합니다. 초기화 상태를 정의하면 pinctrl 코어는 자동으로 probe() 함수 이전에 pinctrl을 이 상태로 설정하고 probe() 이후에 기본 상태로 전환합니다(드라이버가 이미 상태를 명시적으로 변경하지 않는 한).
다음 기사에서는 GPIO 하위 시스템에 대해 설명합니다.
Packt Publishing의 허가를 받아 재인쇄했습니다. 저작권 © 2017 팩트 퍼블리싱
John Madieu는 프랑스 파리에 거주하는 임베디드 Linux 및 커널 엔지니어입니다. 그의 주요 활동은 자동화, 운송, 의료, 에너지 및 군대와 같은 영역의 회사를 위한 드라이버 및 BSP(보드 지원 패키지) 개발로 구성됩니다. John은 컴퓨터 온 모듈 및 임베디드 Linux 솔루션을 기반으로 하는 전자 기판 설계의 선구자인 프랑스 회사인 EXPEMB에서 근무하고 있습니다. 그는 오픈 소스 및 임베디드 시스템 애호가이며 지식을 공유해야만 더 많은 것을 배울 수 있다고 확신합니다.
사물 인터넷 기술
인터넷과 클라우드 기반 컴퓨팅은 제조업체가 CNC 공작 기계를 작동하는 방식을 바꾸고 있습니다. 당신의 가게는 준비가 되었나요? 이더넷 포트는 20년 전 CNC 선반과 머시닝 센터에 처음 등장했습니다. MTConnect 공작 기계 통신 표준은 시카고에서 열린 2010 IMTS에서 공식 미국 데뷔를 했습니다. 제조업체들은 얼마 지나지 않아 독일 경제학자 Klaus Schwab이 2015년에 세계가 4차 산업혁명에 진입했다는 논문을 발표했을 때 주류가 된 용어인 클라우드 컴퓨팅과 산업용 사물 인터넷(IIoT)에 대해 이야기하기 시작
Rudgley M은 신속한 제조를 적층 제조 방법으로 최종 실제 제품을 제조하기 위한 제조 기술로 프로토타입 제조 기술을 사용하여 원하는 생산 제품을 생산하는 것으로 정의합니다. Rapid Manufacturing은 Rapid Prototyping 기술의 발전 방향이지만 여전히 개선해야 할 부분이 많습니다. SLA, SLS, FDM은 프로토타입 제작사의 주요 기술로 부품을 분리하여 별도의 레이어로 만들고 레이어를 독립적으로 만드는 것이 공통적인 특징입니다. 복잡한 기하학 래피드 프로토타이핑 제품의 가장 매력적인 특징은 형상