2.1 Machine-Specific Layer (MSL)
2.1.1 Introduction
MSL(Machine-Specific Layer)은 다음과 같이 machine에 종속적인 컴포넌트를 Linux Kernel에 제공한다.
- GPIO와 EDIO (특정 플랫폼에서만) 포함한 interrupts
- Timer
- Memory map
- 특정 플랫폼에서 IOMUX를 포함한 GPIO(General Purpose Input/Output)
- Clock
- Shared Peripheral Bus Arbiter (SPBA)
- Smart Direct Memory Access (SDMA)
2.1.2 Interrupts (Operation)
이 섹션은 디바이스에서 인터럽트의 하드웨어와 소프트웨어 작동에 대해 설명한다.
2.1.2.1 Interrupt Hardware Operation
인터럽트 컨트롤러는 모든 내부/외부 인터럽트 소스를 제어하고 우선 순위를 지정한다. 기본적으로 모든 인터럽트는 동일한 우선 순위를 갖는다.
인터럽트 컨트롤러의 레지스터를 설정하여 각 인터럽트 소스를 활성화나 비활성화할 수 있다.
GIC에는 PPI, SGI, SPI등 세가지 유형의 인터럽트가 있다.
- PPI(private peripheral interrupt)는 각 CPU의 전용 주변기기 인터럽트이다. 각각의 CPU에서만 처리할 수 있다.
- SGI(software generated interrupt)는 소프트웨어에서 생성되는 인터럽트이다. 소프트웨어 작동에 의해 트리거 될 수 있으며, 각각의 CPU에서 처리할 수도 있다.
- SPI(shared peripheral interrupt)는 SoC 플랫폼의 일반적인 외부 인터럽트 소스인 공유 주변기기 인터럽트이다. 모든 CPU에서 처리할 수 있다.
2.1.2.2 Interrupt Software Operation
i.MX 6와 i.MX 7 SoC에서 포함된 GIC-400을 사용하는 Arm architecture-based processor의 경우, normal interrupt와 fast interrupt라는 두 가지 예외(exception) 유형이 있다. i.MX 6와 i.MX 7 플랫폼의 경우 예외 벡터 주소(exception vector address)를 하위 주소 (0x0)나 상위 주소 (0xFFFF0000)에서 시작하도록 구성할 수 있다. Arm architecture에서 실행되는 Linux OS는 상위 벡터 주소 모델(high-vector address model)을 선택한다.
i.MX 8에서 포함된 GIC-500을 사용하는 Arm architecture-based processor의 경우, 예외 벡터 주소(exception vector address)는 VBAR_ELn + offset으로 정의된다. offset은 인터럽트 예외(interrupt exception)가 발생한 예외 레벨(exception level)에 따라 다르다. Documentation/arm/Interrupts 파일에 Arm interrupt architecture에 대한 설명이 있다.
irqchip 구조체에 정의된 callback 함수로 소프트웨어는 프로세서별로 인터럽트 구조체를 제공하고, 시스템 startup 중에 호출되는 하나의 초기화 함수를 내보낸다.
Table 3. Interrupt Files
File | Description |
drivers/irqchip/irq-gic.c | i.MX 6/7 SoCs에 포함된 GIC-400 |
drivers/irqchip/irq-gic-v3.c | i.MX 8 SoCs에 포함된 GIC-500 |
drivers/irqchip/irq-imx-irqsteer.c | CONFIG_IMX_IRQSTEER를 구성하는 인터럽트 함수 |
drivers/irqchip/irq-imx-intmux.c | CONFIG_IMX_INTMUX를 구성하는 인터럽트 함수 |
irq-imx-gpcv2.c | CONFIG_IMX_GPCV2를 구성하는 인터럽트 함수 |
2.1.2.3 Interrupt Features
인터럽트 구현은 다음 기능을 지원한다 :
- 인터럽트 컨트롤러로 인터럽트 비활성화와 활성화
- 표준 Arm 인터럽트 소스 코드에 정의된 Linux interrupt architecture에 필요한 함수
2.1.2.4 Interrupt Source Code Structure
인터럽트 모듈은 drivers/irqchip에 있다.
아래 테이블은 인터럽트에 대한 소스 파일 목록이다.
Table 4. Interrupt Files
File | Description |
drivers/irqchip/irq-imx-irqsteer.o.c | CONFIG_IMX_IRQSTEER를 구성하는 인터럽트 함수 |
drivers/irqchip/irq-imx-gpcv2.c | CONFIG_IMX_GPCV2를 구성하는 인터럽트 함수 |
drivers/irqchip/irq-imx-intmux.c | CONFIG_IMX_INTMUX를 구성하는 인터럽트 함수 |
2.1.2.5 Interrupt Programming Interface
machine-specific(시스템별) 인터럽트 구현은 단일 함수를 내보낸다. 이 함수는 Interrupt Controller 하드웨어를 초기화하고 각 인터럽트 소스에서 인터럽트를 활성화/비활성화하는 함수를 등록한다. 이는 type struct irqdesc의 전역 구조체 irq_desc로 수행된다. 초기화 후, device-specific(디바이스별) 인터럽트 핸들러를 등록하는 request_irq() 함수를 사용하여 인터럽트는 드라이버에서 사용될 수 있다.
Interrupt Controller에서 지원하는 네이티브 인터럽트 라인 외에도, 지원하는 인터럽트 수는 GPIO 인터럽트와 (일부 플랫폼) EDIO 인터럽트를 지원하도록 확장된다. 이는 드라이버에서 request_irq()와 free_irq() 함수와 같이 Linux OS를 실행하는 Arm 디바이스에서 지원되는 표준 인터럽트 인터페이스를 사용할 수 있도록 한다.
2.1.3 Timer
Linux Kernel은 기본 하드웨어에 기반하여 시스템 타이머(주기적인 인터럽트 생성용)와 동적 타이머(이벤트 스케줄용)를 모두 지원한다.
시스템 타이머 인터럽트 발생한 후 다음을 수행한다 :
- 시스템 가동 시간 업데이트
- 시간(Date Time) 업데이트
- 현재 프로세스가 타임 슬라이스(프로세스에 할당된 시간)를 소진한 경우 새 프로세스의 스케줄 조정
- 만료된 모든 동적 타이머 실행
- 리소스 사용량과 프로세서 시간 통계 업데이트
다음 테이블에는 사용되는 다양한 타이머에 대해 설명한다.
Table 5. Timers
Timer | Description |
General Purpose Timer (GPT) | GPT는 일정한 간격(10ms 마다)으로 주기적인 인터럽트를 생성하도록 구성된다. i.MX 6에서 WIFI 모드로 전환하는 데 사용된다. i.MX 6과 i.MX 7에서 사용된다. |
Enhanced Periodic Interrupt Timer (EPIT) | i.MX 6과 i.MX 7에서 사용 가능하다. |
Arm Arch Timer | GPT 대신 i.MX 8에서 사용한다. |
System Counter Timer | GPT 대신 i.MX 8M과 i.MX 8X에서 사용한다. |
2.1.3.1 Timer Software Operation
타이머 소프트웨어의 구현은 적당한 클록 소스, 인터업트 모드, 인터럽트 간격으로 GPT를 초기화하는 초기화 함수를 제공한다.
그런 다음 타이머는 인터럽트 서비스 루틴(ISR)을 등록하고 타이머를 시작한다. 이전 Section Timer에서 언급한 목적을 위해 OS에 서비스를 제공하는 인터럽트 서비스 루틴이 필요하다. 또 다른 함수는 마지막 타이머 인터럽트 후 경과된 시간을 제공한다.
2.1.3.2 Timer Features
타이머 구현은 다음 기능을 지원한다 :
- 시스템 타이머와 동적 타이머를 제공하기 위해 Linux OS에서 요구되는 함수
- i.MX 6와 i.MX 7에서는 매 10ms 간격으로, i.MX 8에서는 4ms 간격으로 인터럽트를 생성한다. 이는 CONFIG_HZ_XXX를 기반으로 한다.
2.1.3.3 Timer Source Code Structure
Table 6. Timer Files
File | Description |
arch/arm/mach-imx/epit.c | Enhanced Periodic Interrupt Timer |
driver/clocksource/timer-imx-sysctr.c | System Controller Timer |
driver/clocksource/timer-imx-tpm.c | TPM Timer |
drivers/clocksource/timer-imx-gpt.c | General Purpose Timer |
drivers/clocksource/arch-arm-timer.c | Arm arch Timer |
2.1.3.4 Timer Programming Interface
타이머 모듈은 4개의 하드웨어 타이머를 활용하여 클록 소스와 클록 이벤트 개체를 구현한다.
이는 struct clocksource 타입의 clocksource_mxc 구조체와 struct clockevent_device 타입의 clockevent_mxc 구조체로 수행된다. 두 구조체 모두 현재 타이머 값을 읽고 다음 타이머 이벤트를 스케줄하는 데 필요한 루틴을 제공한다. 이 모듈은 타이머 인터럽트 루틴(이 장의 시작 부분에서 언급한 목적을 위해 타이머 이벤트로 Linux OS에 서비스 제공.)을 구현한다.
2.1.4 Memory Map
Linux Kernel이 MMU(Memory Management Unit)가 활성화된 가상 주소 공간에서 실행되므로, 디바이스 드라이버가 디바이스 레지스터에 액세스하려면 미리 정의된 virtual-to-physical 메모리 맵 테이블이 필요하다.
2.1.4.1 Memory Map Hardware Operation
Arm core의 일부인 MMU는 페이지 테이블에 정의된 virtual-to-physical 주소 맵을 제공한다. 자세한 내용은 Arm Limited의 Arm Technical Reference Manual (TRM)을 참조한다.
2.1.4.2 Memory Map Features
모든 I/O 모듈에 대해 physical-to-virtual 메모리 맵을 생성하도록 메모리 맵 모듈을 프로그램하여 메모리 맵을 구현한다.
2.1.5 IOMUX
고밀도 직접 프로세서의 제한된 수의 핀은 여러 기능을 가질 수 있다. IOMUX 모듈은 핀의 사용 용도를 제어한다. 그래서 동일한 핀을 다른 용도로 구성하여 다른 모듈에서 사용할 수 있다. 이는 다양한 고객의 요구 사항을 충족하면서 핀의 수를 줄이는 일반적인 방법이다. IOMUX 하드웨어 모듈이 없는 플랫폼은 GPIO 모듈을 통해 핀 MUX를 수행할 수 있다.
IOMUX 모듈은 멀티플렉스 제어를 제공한다. 그래서 각 핀은 기능 핀과 GPIO 핀으로 구성될 수 있다. 기능 핀은 기본(primary) 기능이나 대체(alternate) 기능으로 세분될 수 있다. 핀 동작은 특정 하드웨어 모듈로 제어된다. GPIO 핀은 GPIO 모듈을 통한 추가 구성과 소프트웨어로 사용자가 제어한다. 예를 들어 TXD1 핀은 다음과 같은 기능을 가질 수 있다 :
- TXD1 - 내부 UART1 데이터 전송. 이 핀의 기본(primary) 기능이다.
- UART2 DTR - 대체(alternate) 모드 3
- LCDC_CLS - 대체(alternate) 모드 4
- GPIO4[22] - 대체(alternate) 모드 5
- SLCDC_DATA[8] - 대체(alternate) 모드 6
하드웨어 모드가 시스템 통합 레벨에서 선택되면, 이 핀은 해당 용도로만 사용되고 소프트웨어에서 변경할 수 없다. 그렇지 않으면, IOMUX 모듈을 시스템(보드) 설계에서 지정한 특정 기능에 맞게 구성해야 한다. 핀이 외부 UART 트랜시버와 연결되어 UART 전송 신호로 사용되는 경우에는 기본(primary) 기능으로 구성해야 한다. Arm core의 인터럽트용 핀으로 외부 이더넷 컨트롤러에 연결된 경우에는 인터럽트를 활성화한 GPIO 입력 핀으로 구성해야 한다. 다시 말해 소프트웨어는 핀이 가져야 하는 기능을 제어할 수 없다. 소프트웨어는 시스템 설계에 따라 핀의 기능만 구성한다.
2.1.5.1 IOMUX Hardware Operation
다음 설명은 IOMUX 하드웨어 모듈을 포함하는 프로세서만 적용된다. 이 섹션에서는 IOMUX 컨트롤러의 레지스터에 대해 간략하게 설명한다. 자세한 내용은 IC Reference Manual의 pin multiplexing section을 참조한다.
- SW_MUX_CTL - 핀의 기본(primary)이나 대체(alternate) 기능을 선택한다. 또한 해당하는 경우 루프백 모드를 활성화한다.
- SW_SELECT_INPUT - 핀의 입력 경로를 컨트롤 한다. 이 레지스터는 여러 패드가 동일한 내부 포트를 드라이브할 때만 필요하다.
- SW_PAD_CTRL - 드라이브 강도, pull-up/pull-down 저항 등, 패드의 slew rate(출력 전압의 최대 변화율)을 제어한다.
2.1.5.2 IOMUX Software Operation
IOMUX 소프트웨어는 핀 기능과 패드 기능을 설정하기 위한 API를 제공한다.
2.1.5.3 IOMUX Features
IOMUX는 하드웨어에서 지원하는 핀을 구성하도록 IOMUX 모듈을 프로그램한다.
2.1.5.4 IOMUX Source Code Structure
아래 표는 IOMUX 모듈의 소스 파일 목록이다. 파일은 drivers/pinctrl/freescale 폴더에 있다.
Table 7. IOMUX Files
File | Description |
drivers/pinctrl/freescale/pinctrl-imx.c | i.MX pinctrl core 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx6q.c | i.MX 6Quad/DualLite pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx6sx.c | i.MX 6SoloX pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx6sll.c | i.MX 6SLL pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx6ul.c | i.MX 6UltraLite and 6ULL pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx7d.c | i.MX 7Dual pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx7ulp.c | i.MX 7ULP pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx8qm.c | i.MX 8QuadMax pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx8qxp.c | i.MX 8QuadXPlus pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx8mq.c | i.MX 8M Quad pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx8mm.c | i.MX 8M Mini pinctrl 드라이버 |
drivers/pinctrl/freescale/pinctrl-imx8mn.c | i.MX 8M Nano pinctrl 드라이버 |
2.1.5.5 IOMUX Programming Interface
pinctrl 바인딩 문서는 Documentation/devicetree/binding/pinctrl/fsl을 참조한다.
- imx-pinctrl.txt
- imx6q-pinctrl.txt
- imx6dl-pinctrl.txt
- imx6sll-pinctrl.txt
- imx6sx-pinctrl.txt
- imx6ul-pinctrl.txt
- imx7d-pinctrl.txt
- imx7ulp-pinctrl.txt
- imx8qm-pinctrl.txt
- imx8qxp-pinctrl.txt
- imx8mq-pinctrl.txt
- imx8mm-pinctrl.txt
- imx8mn-pinctrl.txt
2.1.5.6 IOMUX Control Through GPIO Module
다기능 핀의 경우, GPIO 컨트롤러는 멀티플렉스 컨트롤을 제공한다. 그래서 각 핀은 기능 핀이나 GPIO 핀으로 구성될 수 있다. 주요 기능이나 하나의 대체 기능으로 세분화될 수 있는 기능 핀의 동작은 특정 하드웨어 모듈로 제어된다. GPIO 핀으로 구성된 경우, 핀은 GPIO 모듈을 통한 추가 구성과 소프트웨어를 통해 사용자가 제어한다. 추가적으로 GPIO 핀에 대한 몇 가지 특수 구성이 있다(예 : 출력 기반 A_IN, B_IN, C_IN 또는 데이터 레지스터이지만 입력 기반은 A_OUT나 B_OUT).
다음 설명은 GPIO(general purpose input/output) 모듈을 통해 핀의 MUX을 컨트롤하는 플랫폼에 적용된다.
하드웨어 모드가 시스템 통합 레벨에서 선택되면, 이 핀은 소프트웨어로 변경될 수 없고 해당 기능으로만 사용된다. 그렇지 않으면 GPIO 모듈을 시스템(보드) 설계에서 지정한 특정 기능에 맞게 적절하게 구성해야 한다. 이 핀이 외부 UART 트랜시버에 연결된 경우에는 기본 기능으로 구성되어야 하며 이 핀이 core의 인터럽트용으로 외부 이더넷 컨트롤러에 연결되는 경우에는 인터럽트를 활성화한 GPIO 입력 핀으로 구성되어야 한다. 소프트웨어는 핀이 가져야 하는 기능을 컨트롤할 수 없다. 다만 소프트웨어는 시스템 설계에 따라 해당 용도로 핀을 구성한다.
2.1.5.6.1 GPIO Hardware Operation
GPIO 컨트롤러 모듈은 MUX 컨트롤과 PULLUP 컨트롤의 하위 모듈로 나뉜다. 다음 섹션에서는 하드웨어 동작에 대해 간략하게 설명한다. 자세한 내용은 관련 디바이스 문서를 참조한다.
2.1.5.6.1.1 Muxing Control
GPIO의 사용 중인 레지스터는 GPIO 모듈의 멀티플렉스를 컨트롤한다.
이 레지스터 설정은 핀이 peripheral 기능이나 GPIO 기능에 사용되는지를 선택한다. 하나의 32비트 범용 레지스터는 각 GPIO 포트 전용이다. 이 레지스터는 GPIO IOMUX 블록의 소프트웨어 컨트롤에 사용될 수 있다.
2.1.5.6.1.2 PULLUP Control
GPIO 모듈에는 각 GPIO 포트에 대한 PULLUP 컨트롤 레지스터(PUEN)가 있어서 해당 포트의 모든 핀을 컨트롤한다.
2.1.5.6.2 GPIO Software Operation (general)
GPIO 소프트웨어는 핀 기능과 패드 기능을 설정하는 API를 제공한다.
2.1.5.6.3 GPIO Implementation
GPIO의 구현은 하드웨어에서 지원하는 핀을 구성하도록 GPIO 모듈을 프로그램한다.
2.1.6 General Purpose Input/Output (GPIO)
GPIO 모듈은 입력이나 출력으로 구성할 수 있는 범용 핀을 제공한다. 출력으로 구성되면, 핀의 상태(high 또는 low)는 내부 레지스터에 기록(write)하여 제어할 수 있다. 입력으로 구성되면, 핀의 입력 상태는 내부 레지스터에서 읽을 수 있다.
2.1.6.1 GPIO Software Operation
GPIO(General Purpose Input/Output) 모듈은 i.MX 프로세서의 외부 핀을 구성하기 위한 API와 GPIO 인터럽트를 제어하는 중심 역활을 제공한다.
GPIO 유틸리티 함수는 GPIO 레지스터를 직접 액세스하지 않고 핀을 구성하기 위해 호출되어야 한다. GPIO 인터럽트 구현에는 ISR(Interrupt service routine) 등록/해제와 인터럽트 발생 시 ISR 디스패치와 같은 기능이 포함되어 있다. 모든 드라이버에서 GPIO 설정 기능은 더 나은 이식성과 유지성을 제공하기 위해 MSL 레이어에서 디바이스 초기화 중에 만들어야 한다. 이 GPIO 인터럽트는 시스템 시작 중에 자동으로 초기화된다.
IOMUX에서 핀을 GPIO로 구성하면, 핀의 상태도 설정해야 한다. 이는 전용 하드웨어 모듈로 초기화되지 않는다. 패드 제어 기능으로 pull-up, pull-down, slew rate 등의 설정이 필요할 수 있다.
2.1.6.1.1 API for GPIO
API for GPIO는 GPIO 구현에서 지원하는 기능을 나열한다.
GPIO 구현은 다음 기능을 지원한다 :
- GPIO 인터럽트를 인터럽트 서비스 루틴에 등록하는 API. 이것은 NR_IRQS에 의해 정의된 인터럽트의 수가 인터럽트를 생성할 수 있는 모든 가능한 GPIO핀을 수용하도록 확장되기 때문에 가능하다.
- IOMUX 핀을 request / free하는 함수. 핀이 GPIO로 사용되는 경우, 다른 request / free 함수 호출 세트가 제공된다. 핀의 상태를 변경하기 전 사용자는 핀이 이미 예약되었는지 request 호출의 반환 값을 확인해야 한다. free 함수 호출은 핀이 더 이상 필요하지 않을 때 해야 한다. 자세한 내용은 API 문서를 참조한다.
- IOMUX와 GPIO 함수 호출 모두 전달하는 파라미터는 정렬 되었다. 이 구현에서 iomux_pins의 동일한 enumeration(열거 자료형)는 IOMUX와 GPIO 호출 모두에 사용되고, 사용자는 핀이 GPIO 모듈에서 어느 비트 위치에 있는지 파악할 필요가 없다.
- 인터럽트 등록에 특별한 GPIO 함수 호출이 필요하지 않으므로, Ethernet와 UART 드라이버와 같은 공용 드라이버에 최소한의 변경만 요구.
2.1.6.2 GPIO Module Source Code Structure
GPIO 모듈의 모든 소스 코드는 이장의 시작 부분에 표시된 디렉토리에 있는 다음 파일의 GPIO 프레임워크에 있다 :
Table 8. GPIO Files
File | Description |
drivers/gpio/gpio-mxc.c | Function implementation |
2.1.6.3 GPIO Programming Interface 2
자세한 내용은 프로그램 인터페이스에 대한 Linux 소스 디렉토리 아래의 Documentation/gpio/gpio.txt를 참조한다.
2.1.6.4 GPIO Features
GPIO 구현은 다음 기능을 지원한다 :
- GPIO 하드웨어 모듈에 액세스하기 위한 함수를 구현한다.
- GPIO signal direction과 GPIO interrupt를 제어하는 방법을 제공한다.
2.1.7 Clock
Linux clock 프레임워크는 clock tree 관리를 제공하기 위해 기본(underlying) 하드웨어에 의존한다.
다음 테이블에는 사용되는 다양한 clock 하드웨어에 대해 설명한다.
File | Description |
Clock controller module (CCM) | i.MX 6Quad/DualLite/SoloX/UltraLite/ULL/SLL, i.MX 7Dual, i.MX 8M Quad, i.MX 8M Mini, and i.MX 8M Nano |
Peripheral clock control (PCC) and System clock generator (SCG) | i.MX 7ULP |
Distributed slave system controller (DSC) | i.MX 8QuadMax/8QuadXPlus |
2.1.7.1 Clock Software Operation
clock 소프트웨어 구현은 하드웨어 clock 유형과 설정에 따라 clock tree를 초기화하는 초기화 함수를 제공하고, 하드웨어 clock 모듈을 작동하기 위한 clock operation callback을 제공한다.
2.1.7.2 Clock Features
clock 구현은 다양한 clock 유형에 따라 다음 기능을 지원한다 :
- Prepare/Unprepare a clock (clock 준비/해제)
- Enable/Disable a clock (clock 활성화/비활성화)
- Get/Set the clock rate (clock 속도 가져오기/설정)
- Get/Set the clock parent (상위 clock 가져오기/설정)
2.1.7.3 Source Code Structure
소스 코드 구조는 다음과 같다.
File | Description |
drivers/clk/imx/clk-imx6q.c | i.MX 6Quad/6DualLite clock driver |
drivers/clk/imx/clk-imx6sx.c | i.MX 6SoloX clock driver |
drivers/clk/imx/clk-imx6ul.c | i.MX 6UltraLite and 6ULL clock driver |
drivers/clk/imx/clk-imx6sll.c | i.MX 6SLL clock driver |
drivers/clk/imx/clk-imx7d.c | i.MX 7Dual clock driver |
drivers/clk/imx/clk-imx7ulp.c | i.MX 7ULP clock driver |
drivers/clk/imx/clk-imx8qm.c | i.MX 8QuadMax clock driver |
drivers/clk/imx/clk-imx8qxp.c | i.MX 8QuadXPlus clock driver |
drivers/clk/imx/clk-imx8mq.c | i.MX 8M Quad clock driver |
drivers/clk/imx/clk-imx8mm.c | i.MX 8M Mini clock driver |
drivers/clk/imx/clk-imx8mn.c | i.MX 8M Nano clock driver |
2.1.7.4
서로 다른 clock 유형은 서로 다른 clock operation callback를 제공한다. 디바이스 드라이버는 clock 프레임 워크에서 표준 clock API를 호출하고, 결국 플랫폼 clock 드라이버를 호출하고 해당 clock 노드의 operation callback이 실행된다.
※ machine : computer system으로 생각하면 됨.
※ SPBA : 공유되는 주변기기에 대한 버스 중개기
※ SDMA : 지능적인 DMA
'NXP i.MX SoC Family > i.MX Linux Reference Manual' 카테고리의 다른 글
i.MX Linux Reference Manual - System - Boot Image (0) | 2022.06.10 |
---|---|
i.MX Linux Reference Manual - System - System Controller (0) | 2022.06.07 |
i.MX Linux Reference Manual - System (0) | 2022.05.25 |
i.MX Linux Reference Manual - Video - JPEG Encoder and Decoder (0) | 2022.05.25 |
i.MX Linux Reference Manual - Video - Video Processing Unit (VPU) (0) | 2022.05.24 |