본문 바로가기

임베디드

CPU 선정과 리눅스 커널 버전과의 상관 관계

임베디드 시스템 개발자들이 최신 커널을 선호하는 이유는 셀 수 없이 많지만, 내가 보는 관점에서는 수많은 패치로 안정성과 성능이 좋아지고 엄청나게 많은 새로운 주변 장치용 디바이스 드라이버가 추가되어 큰 노력없이 안정적인 대규모 임베디드 시스템을 구축할 수 있기 때문이라고 생각한다.

물론 CPU 제조사가 제공하는 BSP의 커널 버전이 4.4나 4.9 이상이고 LTS(Long Term Support)로 심각한 보안이나 버그패치가 꾸준히 제공된다면 대부분 큰 문제는 없다. 그러나 플랫폼을 구축하여 5년 이상 꾸준히 사용하려면 업스트림은 필수라고 생각한다.

 

많은 리소스를 필요로하는 포팅과정 없이 메인라인(현재 5.4~5.5 버전 기준) 리눅스 바닐라 커널이 GPU와 VPU까지 잘 동작하는 ARM 프로세서는 많지 않다. 3D 그래픽 가속기와 동영상 재생/녹화 기능을 제대로 사용하려면 CPU(AP) 업체가 제공하는 3년~7년정도된 묵은지 같이 오래된 커널 버전을 사용하여하는 경우가 많다.

 

GPU/VPU 동작 완성도 기준으로 보면 현재 시점에서 일반 SBC용 메인라인 업스트림의 완성도 높은 CPU는 두 종류가 보인다. 

- 라즈베리파이에 사용되는 BCM28xx와 BCM27xx시리즈

- 오드로이드 XU4에 사용되는 Exynos-5422

 

물론 산업용 임베디드 AP를 만드는 NXP, ST에서 나오는 CPU들도 Mainlining을 잘하고 있다.

그러나 중국의 저가 CPU에 비해 칩셋의 가격이 5~10배 정도라 실제 양산에 적용할 수 있는 범위는 제한적이다.

아마도 그런 이유때문에 저가형 범용 SBC가 거의 없는것 같다.

 

중국의 Amlogic이나 Rockchip에서 생산하는 AP칩들도 올해 초부터는 Kernel upstream이 잘되기 시작했다.

BSP 커널에 비해 기능이나 성능이 부족하지만 해당 업체에서 많은 수의 개발자들을 Upstream 업무에 투입하고 있어, 앞으로 1~2년 정도 지나면 실제 제품에 적용할만한 수준이 될것으로 기대한다. 

 

Allwinner의 경우 CPU 자체의 가격 경쟁력은 아주 좋지만 제조사에서 공식적으로 투자하는 Upstream 노력은 거의 보이질 않는다.

그러나 Sunxi Community에 의한 Upstream 커널 패치가 많고 Bootlin라는 프랑스 업체에서 크라우드펀딩으로 투자를 받아 만든 VPU 드라이버의 완성도가 획기적으로 좋아졌다.

Allwinner 칩들의 Mainline 커널 지원 상태는 아래 링크에 자세하게 나와있다.

https://linux-sunxi.org/Linux_mainlining_effort

 

그런데 내가 취미삼아 개발하고 있는 리눅스 컴퓨터에 탑재되는 Allwinner i3(S3) CPU에는 그 흔한 Mali-400조차 없고, VPU는 있으나  비디오 디코딩/인코딩 드라이버가 Mainline 커널에 없다. 3D 게임을 구동하거나 현란한 3D 가속이 포함된 GUI 구현은 힘들다.

동영상 재생/녹화에 대한 기능 추가는 현재 Bootlin에서 준비하고 있는것으로 보이며 2020년 하반기에는 가능할것으로 기대한다.

 

i3(S3) CPU에 대한 메인라인 커널 패치는 Sunxi Commuinity 멤버인 Icenowy Zheng이라는 분이 6월에 만들었으며, 약간의 수정을 거쳐 Kernel 5.4에 Merge 되었다.  아래 링크에 patch commit에 대한 이력이 있다.

https://lwn.net/Articles/790896/

덕분에 내가 만든 보드에 적합한 DeviceTree와 Kernel config 파일만 작성하면 대부분의 입출력 장치들은 잘 동작한다. 

 

커널 5.4.1에 Ubuntu 18.04.3을 부팅시키고 실제 기능까지 확인한 하드웨어 장치들은 다음과 같다.

CPU A7 core 기능

DDR3 메모리

1024x600 광시야각 7인치 LCD 프레임버퍼

정전식 멀티터치 스크린 (I2C 인터페이스, GPIO Reset 출력, GPIO Interrupt 입력)

이더넷 포트 (iperf 테스트 결과 안정적으로 90Mbps이상 꾸준히 뽑아준다)

USB 2.0 host와 Hub 칩셋 (키보드, 마우스, 저장장치 동작 확인)

MIPI Parallel 카메라 입력 (1차 보드에 오류가 있어 이미지가 녹색으로 보임, 2차 보드 받으면 추가 테스트 필요)

스테레오 오디오 출력 (헤드폰 출력으로 ALSA 드라이버와 믹서 정상 동작 확인)

 

Qt5 LTS 중에 가장 최근 버전인 Qt 5.12.6를 빌드해서 돌려보았는데 만족스러운 성능을 보였다.

최신 메인라인 커널이 동작하니 다양한 최신 통신 장치를 이용해서 일반적인 IoT 허브나 제어용 GUI 시스템 구축에는 불편함이 없을것으로 보인다.

 

몇가지 Qt 예제를 실행해 보면서 화면을 fbgrab 명령으로 capture을 해보았다.

GPU 가속이 없어서 OpenGL-ES를 사용하는 예제들은 사용할 수 없었지만, 2D 기반의 GUI들은 거의 문제없이 빠르게 동작함을 확인하였다.

 

멀티터치 핀치줌 기능으로 치즈와 쥐새끼들이 커지기도 하고 작아지기도 한다.

홈 오토메이션이나 웨어러블에 적합한 GUI Control도 좋아보인다. 상당히 빠른 반응 속도로 답답함이 거의 없었다.

커피머신용 UI를 만드는 사람들에게도 도움될것 같은 예제.

가상키보드도 깔끔하니 좋아 보인다. 

좀더 찾아보니 한글도 지원한다. 한글이 포함된 unicode 폰트(CJK)를 설치해야 보인다.

커널이 최신 버전이라 Qt 멀티터치 구동까지 한번에 잘 끝난것 같아 시원하다.