코딩 일기장
[인텔리사인] #2 Orange Pi Zero 2W에 OpenWrt 이미지 설치하기 본문

오렌지파이 제로에 OpenWrt 이미지를 설치해 보자.
그동안 리눅스 기반 장치를 만드는 프로젝트에서는 모두 범용 이미지(라즈비안, 우분투, armbian 등)을 사용했었는데,
범용 이미지는 당장 빠르게 시작하기에는 좋지만, OS 레벨의 수정이 잦아질수록 알지 못하는 사전 설치 서비스들 때문에 세팅이 쉽게 꼬이는 어려움이 있었다.
그래서 이번에는 다소 험난하겠지만 밑바닥부터 세팅해 보는 경험을 위해 OpenWrt를 사용해 보고자 하였다.
먼저 제조사 제공 OpenWrt 이미지가 있어 설치해 보았다.
https://drive.google.com/drive/folders/1LfgBqpa0kbxj1NGg1t4iselso_V5ImWd
OpenWRT - Google Drive
이 브라우저 버전은 더 이상 지원되지 않습니다. 지원되는 브라우저로 업그레이드하세요. 닫기
drive.google.com


제조사 openwrt 이미지를 설치하고 부팅하면 기본적으로 내장 UART0 포트로 u-boot 부트로더와 부팅 로그 확인 및 쉘 접근이 가능하다.
사실 openwrt 이미지도 직접 빌드해보고 싶었지만 출품 마감일이 얼마 남지 않은 관계로 나중에 해보기로 했다.
다음으로 확인해야 할 것은 UART LTE 모뎀, 그리고 64x32 전광판 컨트롤러로 사용 중인 ESP32와 UART로 통신하기 위해 H618 내장 UART 블록이 인식되고 있는지 확인해 보았다.
root@OpenWrt:/# dmesg| grep ttyS
[ 0.000000] Kernel command line: fw_devlink=on console=ttyS0,115200 earlyprintk root=PARTUUID=5452574f-02 rootwait
[ 10.723418] printk: console [ttyS0] disabled
[ 10.743823] 5000000.serial: ttyS0 at MMIO 0x5000000 (irq = 286, base_baud = 1500000) is a 16550A
root@OpenWrt:/#
커널 로그를 확인해본 결과 procd 설정(/etc/inittab)에서 쉘로 사용하도록 한 ttyS0를 제외하고는 하나도 인식되지 않고 있는 것을 확인할 수 있었다.

따라서 디바이스 트리를 수정하여 위와 같은 구성으로 주변장치를 연결할 수 있도록 하였다.
오렌지파이 제로 2W의 SoC인 Allwinner H618은 MMIO 방식으로 칩 내부의 UART 블록에 접근할 수 있다.
이를 위해서는 디바이스 트리에 해당 블록이 바인딩된 주소를 기재해야 한다.

Allwinner H616 매뉴얼에서 활성화해야 하는 UART2는 0x05000800, UART5는 0x05001400인 것을 확인했다.
H618이 아닌 H616 매뉴얼을 참고한 것은 H618이 H616의 마이너 업그레이드 버전(CPU 클럭, 캐시메모리 용량 증가 등)이어서 H616과 기능적으로는 동일한 칩이기 때문이다.(그래서인지 H618은 공개된 매뉴얼도 찾지 못했다)
serial@5000c00 {
compatible = "snps,dw-apb-uart";
reg = <0x5000c00 0x400>;
interrupts = <0x00 0x03 0x04>;
reg-shift = <0x02>;
reg-io-width = <0x04>;
clocks = <0x02 0x45>;
resets = <0x02 0x14>;
status = "disabled";
pinctrl-names = "default";
pinctrl-0 = <0x2b>;
};
...
serial@5001400 {
compatible = "snps,dw-apb-uart";
reg = <0x5001400 0x400>;
interrupts = <0x00 0x05 0x04>;
reg-shift = <0x02>;
reg-io-width = <0x04>;
clocks = <0x02 0x47>;
resets = <0x02 0x16>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x2d>;
};
이미 기존 부트 파티션의 dtb를 dts로 디컴파일해본 결과 이미 uart2와 uart5에 대한 노드 선언이 존재했다.
따라서 status를 okay로 변경해 주었고,
각 UART 포트의 phandle 값을 참고하여(0x2b, 0x2d) 같은 물리 핀헤더를 사용하는 다른 노드가 없는지 확인해 주었다.

그런 다음 dtc 컴파일러를 사용하여 dts를 dtb로 변환한 다음 원본 dtb를 덮어쓰면 적용이 완료된다.
실제로도 커널 로그에 ttyS2와 ttyS5가 할당된 것을 확인할 수 있었다.
이렇게 하여 오렌지파이 OS 준비가 완료되었다.
'개발 및 프로젝트' 카테고리의 다른 글
| VSCode에서 두 프로젝트 비교하기 (0) | 2025.12.26 |
|---|---|
| 프로그래밍 공부, 연습사이트 추천 (0) | 2020.01.26 |
| [ FreeRTOS ] xTaskCreate 사용방법 (0) | 2020.01.21 |