임디드 리눅스 개발 단체
1. 리눅스 커뮤니티
우리가 보는 대부분 리눅스 커널 코드 출처는 리눅스 커널 커뮤니티입니다.
리눅스 커널 커뮤니티는 리눅스 커널 개발의 심장입니다. 리눅스 커널 자체 알고리즘과 논리적 오류와 문제점을 개선하는 패치를 논의하고 관리합니다.
- 버그 수정 패치
- 코드 리팩토링
- 신규 알고리즘
- Document
보통 2주 간격으로 Greg Kroah-Hartman 개발자가 다음과 같은 메일로 전 세계 개발자들에게
패치 반영 사실을 통지합니다.
리눅스 커널 버전과 코드 내역은 https://www.kernel.org/ 사이트에서 확인할 수 있습니다.
위 그림에서 왼쪽 부분을 보면 ‘longterm’으로 표시된 부분이 보입니다. 이는 안정화된 리눅스 커널 버전을 의미합니다. 이렇게 리눅스 커널 커뮤니티에서 관리하는 안정된 리눅스 커널 버전을 LTS(Long Term Support)라고 부릅니다. 최신 리눅스 커널 버전에 적용된 버그 수정 패치를 LTS 리눅스 커널 버전에 꾸준히 반영합니다.
SoC 업체들은 대부분 이 LTS 리눅스 커널 버전을 선택해 개발합니다.
2. CPU 벤더
- ARM(ARMv7/ARMv8/Cortex-M)
- 인텔(x86/x86_64)
- IBM(PowerPC)
CPU 밴더도 리눅스 커널 개발에 참여합니다. 다음과 같은 리눅스 커널 핵심 기능은 CPU에 따라 구현 방식이 다르기 때문입니다.
- 시스템 콜
- 익셉션
- 컨텍스트 스위칭
다음 그림을 보면서 CPU 벤더의 역할을 알아볼까요?
위 그림에서 보이듯 리눅스 커널은 다양한 CPU 아키텍처와 함께 구동됩니다. 그런데 커널의 핵심 동작은 서로 다른 CPU 어셈블리 코드로 구현돼 있습니다. 컨택스트 스위칭 세부 동작은 x86와 ARMv8 CPU 별로 구현 방식이 다릅니다.
리눅스의 구조는 위와 같은데 라즈비안과 같이 ARMv8 기반 리눅스 커널을 소프트웨어를 쓰려면 어떻게 해야 할까요?
ARMv8에 맞는 빌드 스크립트로 커널을 빌드하면 됩니다.
리눅스 커널은 다양한 CPU 아키텍처를 지원하는 소스 트리를 갖추고 있으며 사용하고자 하는 CPU 아키텍처에 맞게 빌드를 하면 이에 맞는 커널 이미지를 생성할 수 있습니다.
3. SoC 벤더
SoC는 System-on-chip의 약자로 브로드컴, 퀄컴, 인텔, 미디어텍, 엔비디아와 같은 회사입니다. 이들은 먼저 리눅스 커널 버전을 선택합니다. 그리고 CPU 벤더로 툴 체인을 받아 자신의 SoC 스펙에 맞게 리눅스 커널 코드를 수정하거나 드라이버를 추가합니다.
SoC 벤더에서 개발하는 제품명은 아래와 같습니다.
- 브로드컴: bcm2837(라즈베리파이)
- 퀄컴: 스냅드래곤
- 인텔: 아톰, 무어필드
- 미디어텍: 헬리오
- 엔비디아: 테그라
SoC 벤더가 개발하는 리눅스 전체 구조는 다음과 같습니다.
4. Board Vendor & OEM
SoC가 릴리즈한 리눅스 커널 코드를 받아 제품을 개발하는 업체입니다. 벤더나 OEM 업체 시나리오에 맞게 드라이버를 추가해 제품을 개발합니다.
많은 개발자들은 이 단계에서 SoC에서 제작한 리눅스 드라이버 코드(리눅스 커널 + SoC 드라이버)를 받아 임베디드 리눅스를 개발합니다.
제품마다 다양한 시나리오와 컨셉이 있을 수 있습니다. 만약 제품 컨셉이 카메라이면 카메라 센서를 제어하는 드라이버를 제작하고 자동차 네비게이션이면 그래픽 드라이버 개선을 할 것입니다.
대부분 이 단계에서 임베디드 리눅스 개발자들이 개발을 합니다.
[B'D Vendor & OEM] 개발자들은 이 과정에서 SoC 업체와 협업을 할 때가 많습니다. 만약 SoC 벤더에서 작성한 드라이버에 버그를 확인하면 '보드 Vendor & OEM' 업체는 버그를 리포트하고 개선 패치를 받아 수정하는 경우가 많습니다.
그런데 가끔 다음과 같은 경우를 봅니다.
[B'D Vendor & OEM] 업체 개발자가 SoC 벤더에서 작성한 드라이버에 버그를 직접수정을 한다.
SoC 벤더에서 작성한 드라이버 코드는 리눅스 커널 형태로 배포하므로 누구나 소스 코드를 열어 볼 수 있습니다. 그래서 자신이 작성하지 않은 리눅스 드라이버 코드를 수정할 수 있는 것입니다.
대부분 SoC 벤더들 사이에 경쟁이 치열해 최근에 개발 중인 SoC 벤더의 제품에 대해서는 빠른 버그 수정 패치를 받을 수 있습니다. 하지만 '보드 Vendor & OEM' 업체에서 제품 가격 때문에 2~3년 전에 개발된 SoC 제품을 개발할 때는 기술 지원을 받을 수 없습니다.
[B'D Vendor & OEM] 업체 개발자가 SoC 벤더에서 작성한 드라이버 코드를 수정해야 합니다.
이상, 우리는 리눅스 개발 단체를 임베디드 리눅스 및 BSP 리눅스 관점으로 살펴봤습니다.
출처: Austin Kim 네이버 블로그
'Embedded : : Linux > : : Linux' 카테고리의 다른 글
[Linux] 환경변수 PATH 추가하기 (0) | 2024.04.17 |
---|---|
임베디드 리눅스의 4대요소 (0) | 2023.11.14 |
리눅스(유닉스)의 파일 시스템 (0) | 2023.11.09 |
리눅스(Linux)의 디렉터리(Directory) (0) | 2023.11.09 |
유닉스(UNIX)와 리눅스(Linux)의 발전 과정 (0) | 2023.11.09 |