테스트 환경
- Ubuntu 22.04
- SK-AM62A-LP
- 09_02_00_05 Processor SDK
디바이스 트리
디바이스 트리는 SoC의 내부 메모리 매핑 주변 장치, 외부 하드웨어 및 캐리어 보드를 포함한 시스템 하드웨어를 설명합니다. 일반적으로 칩 제조사는 캐리어 보드에 대한 참조 설계 와 모듈 및 캐리어 보드에 대한 일치하는 장치 트리를 제공하므로 보드 설계를 사용자 정의하고 일부 주변 장치를 연결할 때 설계 기반으로 사용한 캐리어 보드에서 장치 트리를 수정 해야 할 수 있습니다.
캐리어 보드(Carrier Board)는 주로 System-on-Module(SoM) 또는 Compute Module과 같은 작은 모듈형 컴퓨터를 확장하고 연결하기 위해 설계된 하드웨어 보드입니다. 이 보드는 SoM에서 제공하는 기본적인 프로세싱 능력을 기반으로 다양한 주변 장치, 포트, 인터페이스를 추가하여 완전한 시스템을 구성하는 데 사용됩니다.
기본적으로 장치 트리는 시스템의 하드웨어 구성 요소를 나타내는 데이터 구조입니다. 계층적 트리와 같은 구조를 사용하여 장치, 해당 속성 및 장치 간의 상호 연결을 설명합니다. 장치 트리는 일반적으로 ".dts" 또는 ".dtsi" 확장자를 가진 텍스트 파일로 저장됩니다. 장치 트리 블롭(DTB)이라고 알려진 바이너리 형식으로 컴파일할 수 있습니다. 그런 다음 DTB는 시스템 초기화 중에 부트로더에 의해 로드됩니다.
파일 포맷
source( *.dts): 장치 트리 구조는 장치 트리 소스(DTS)라는 특수 언어를 사용하여 정의됩니다. 이 형식의 구조를 포함하는 파일의 확장자는 다음과 같습니다. *.dts 이러한 파일은 #include 지시문을 사용하여 다른 장치 트리 파일에 포함될 수 있는 재사용 가능한 하드웨어 구성 요소 또는 구성을 정의합니다.
include( *.dtsi): 개발자는 *.dtsi 파일을 사용하여 유연하고 확장 가능한 방식으로 장치 트리 코드를 구성하고 모듈화할 수 있으므로 다양한 장치 트리 파일에서 공통적인 구성을 보다 쉽게 유지 관리하고 재사용할 수 있습니다.
Binary Blob( *.dtb): DTS 파일은 부트로더에 의해 로드되는 Device Tree Blob(DTB)이라는 바이너리 형식으로 컴파일됩니다. 이 바이너리를 포함하는 파일의 확장자는 다음과 같습니다. *.dtb Linux 커널은 부팅하기 위해 장치 트리 바이너리가 필요합니다. 이러한 바이너리는 장치 트리 소스 파일에서 장치 트리 컴파일러(dtc)에 의해 생성됩니다. 컴파일러는 Linux 소스의 일부이며 필요한 경우 자동으로 빌드됩니다.
ARM에서 모든 Device Tree Source 파일과 include는 linux 커널 소스 코드 arch/arm/boot/dts에 있습니다. scripts/dtc에 있는 소스 코드인 도구인 Device Tree Compiler는 소스를 바이너리 형태로 컴파일합니다. Device Tree Blob은 컴파일러에서 생성되며 부트로더에서 로드되고 부팅 시 커널에서 구문 분석되는 바이너리입니다.
빌드 시 arch/arm/boot/dts/Makefile에 생성해야 하는 DTB를 나열합니다.
장치 트리 사용자 지정 및 배포
장치 트리를 사용자 지정하고 사용하는 과정은 4단계로 구성됩니다.
- 기본 장치 트리 소스를 선택
- 하드웨어에 맞게 수정
- 장치 트리 소스 컴파일
- OS 이미지에 장치 트리 배포
Base Device Tree
장치 트리를 사용자 정의할 때 첫 번째 단계는 하드웨어 플랫폼에 해당하는 기본 장치 트리(DTS) 파일을 선택하는 것입니다. DTS 파일에는 하드웨어 구성 요소와 구성에 대한 설명이 들어 있습니다.
장치 트리 파일은 칩 제조사에서 제공하며 Linux 커널 소스 코드, 메인라인 또는 다운스트림에서 사용할 수 있습니다. 일반적으로 arch/arm/boot/dts또는 arch/arm64/boot/dts디렉토리에서 찾을 수 있습니다. 특정 하드웨어에 대한 기존 DTS 파일을 찾을 수 없는 경우 기존 DTS 파일을 참조로 사용하여 처음부터 만들어야 할 수 있습니다.
하드웨어 플랫폼과 일치하는 기본 장치 트리를 선택합니다. 예를들어 ti는 다음에서 찾을 수 있는 하드웨어 플랫폼에 대한 기본 장치 트리 세트를 제공합니다.
Customization
장치 트리를 사용자 정의해야 하는 일반적인 사용 사용방법은 다음과 같습니다.
장치 활성화 및 비활성화: 가장 간단한 사용방법 중 하나는 노드 활성화 또는 비활성화입니다. 일반적으로 캐리어 보드 수준에서 속성 값을 사용하여 status를 okay, disabled로 변경 또는 보드 *.dts에서 최근에 정의된 노드의 상태를 정의하거나, SoC 또는 SoM *.dtsi에서 이전에 정의된 노드의 속성을 변경하여 수행됩니다.
&i2c2 {
status = "okay";
};
핀 멀티플렉싱: 또 다른 사용방법은 멀티플렉싱 기능을 사용하여 보드 핀에 다양한 기능을 할당 하고 특정 장치에 핀 그룹을 할당하는 것입니다. 아래는 am62a의 IO 핀을 할당하는 부분입니다.
&main_pmx0 {
main_uart0_pins_default: main-uart0-pins-default {
pinctrl-single,pins = <
AM62AX_IOPAD(0x1c8, PIN_INPUT, 0) /* (D14) UART0_RXD */
AM62AX_IOPAD(0x1cc, PIN_OUTPUT, 0) /* (E14) UART0_TXD */
>;
};
새로운 장치 추가 및 구성: 사용자 정의 캐리어 보드에 추가된 새로운 외부 장치(예: 카메라 센서, 열 센서 등)를 나타내는 새 노드를 추가, 설명 및 구성합니다.
&i2c1 {
mpu6050: accelerometer@68 {
compatible = "invensense,mpu6050";
reg = <0x68>;
status="okay"
interrupt-parent = <&gpio1>;
interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
};
};
Compile the Device Tree Source
장치 트리를 변경한 후에는 부트로더가 로드할 수 있는 파일로 컴파일해야 합니다. 이는 Device Tree Compiler(DTC) 도구를 사용하여 수행할 수 있습니다. 컴파일된 DTB 파일은 사용자 정의 장치 트리를 장치에 배포하는 데 사용됩니다. DTC 도구는 커널과 Linux BSP에 포함되어 있으며 장치 트리를 컴파일하는 데 사용할 수 있습니다.
컴파일을 수행하려면 Linux 커널에 대한 빌드 환경을 구성하고 Linux 배포판의 올바른 버전과 요소를 설정하고 Device Tree Compiler 도구를 사용해야 합니다.
장치 트리의 독립 실행형 컴파일을 수행하고 Linux 배포판에 배포할 BLOB 파일을 생성하려면 make를 사용하여 빌드 해야한다.
[09] AM62A-SK Processor SDK Build
테스트 환경Ubuntu 22.04SK-AM62A-LP09_01_00_07 Processor SDKAM62A 시리즈는 1~2대의 카메라가 필요한 비전 애플리케이션용으로 설계되었습니다. H.264/H.265V 비디오 코덱, RGB-IR을 지원하는 이미지 센
rorsi.tistory.com
Deploy the Device Tree to the OS image
U-boot는 부팅 프로세스 중에 장치 트리를 로드합니다. 그리고 U-boot 변수 에 따라 변수를 사용하여 부트로더가 부팅 파티션에서 검색할 fdtfile 장치 트리 바이너리(파일)로 문자열을 설정합니다. ti사에 am62a7의 경우 fdtfile은 k3-am62a7-sk.dtb로 설정되어 있습니다.
u-boot 콘솔로 들어가 printev를 입력하면 현재 설정되어 있는 값을 확인 할 수 있습니다.
=> printenv
baudrate=115200
bootcmd=run findfdt; run init_console; run envboot; run mmcboot; run netboot;
bootdelay=2
bootfile=Image
console=ttyS2,115200n8
fdt_addr_r=0x88000000
fdtfile=k3-am62a7-sk.dtb
initrd_high=0xffffffffffffffff
kernel_addr_r=0x82000000
loadaddr=0x80007ff0
scriptaddr=0x80000000
soc=am62x
name_overlays=k3-am62a-gpio.dtbo k3-am62a-i2c0.dtbo
bootargs=console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait
boot_targets=mmc0 mmc1 usb0 pxe dhcp
stdin=serial
stdout=serial
stderr=serial
verify=n
참고 :
https://elinux.org/Device_Tree_Usage
Device Tree Usage - eLinux.org
Top Device Tree page (This page was previously located at htttp://devicetree.org/Device_Tree_Usage) This page walks through how to write a device tree for a new machine. It is intended to provide an overview of device tree concepts and how they are used to
elinux.org
https://www.nxp.com/docs/en/application-note/AN5125.pdf
2. Getting started — Processor SDK AM62Ax Documentation
Processor SDK Linux Edge AI for AM62Ax Docs » 2. Getting started 2. Getting started 2.1. Hardware setup 2.1.1. AM62Ax EVM AM62Ax EVM is a low cost, small form factor board designed to bring smart cameras, robots and intelligent machines to life. For more
software-dl.ti.com
'Linux' 카테고리의 다른 글
Synology File Station Upload & Download API (1) | 2024.12.26 |
---|---|
[Kernel] Device Tree Overlay (0) | 2024.11.24 |
Synology File Station에서 공유 링크를 wget/curl로 다운받는 방법 (0) | 2024.09.19 |
[Kernel] Device-tree probe Platform Driver (0) | 2024.03.11 |
v4l2loopback (0) | 2024.01.21 |