[리눅스 커널 구조 원리] #0. 임베디드 리눅스 개발 단체

문연수·2025년 1월 27일
1
post-thumbnail

 리눅스 커널 패치를 보내려 하는데 도무지 lock 과 관련된 내용이 이해가 안되고 있다. 그래서 패치에선 잠시 손 놓고 다시 초심으로 돌아가 한번 더 커널을 분석해보려 한다. 예전부터 읽어야지~ 읽어야지~ 하면서 책장에 박아두었던 디버깅을 통해 배우는 리눅스 커널의 구조와 원리 를 읽어보려 한다. (적어도 필자가 찾고 있던 락과 관련된 내용을 다루고 있다)


임베디드 리눅스, 그리고 이를 사용하는 기업들은 어떻게 협업을 하여 최종적인 프로덕트를 만들어낼까?

1. 리눅스 커널 커뮤니티

출처: netdev mailing list (https://lore.kernel.org/netdev/)

 우선 리눅스 커널 커뮤니티가 있다. 여기에서 리눅스 커널의 다음 버전이 릴리즈 되며, 버그가 수정되고 새로운 기능에 대한 논의가 이뤄진다. 필자도 리눅스 커널에 컨트리뷰션을 하고 있다. 바로 이곳에서부터 시작된다.

2. CPU 벤더

 CPU 벤더는 CPU 를 설계하는 회사를 말하는데, 실제 CPU 를 제조하는 것과는 다르다. (같이 하기도 함) 대표적으로 ARM, Intel, IBM 등이 있다. 자세한 사항은 다음의 글을 읽어보면 좋다: https://news.samsungsemiconductor.com/kr/파운드리-팹리스-반도체-생태계-한눈에-보기/

 이러한 회사들도 리눅스 커널 개발에 참여하는데 그 이유는 CPU 에 따라 커널의 구현이 달라지기 때문이다. 이는 리눅스 커널의 arch/ 디렉터리 안의 항목이다. 각각이 CPU 에 종속적인 구현이다.

3. SoC 벤더

SoC (System on-Chip) 은 하나의 칩 안에 필요한 구성요소를 집적한 회로를 말하는데 여기에는 위에서 설명한 CPU 벤더가 설계한 CPU 도 들어가고 그 밖에 다른 IP (Intellectual Property) 들도 포함된다.

출처: Arm GNU Toolchain Downloads (https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads)

SoC 벤더들은 위의 CPU 벤더로부터 toolchain 등을 받아와 SoC 스펙에 맞게 커널 코드를 수정하고 드라이버를 작성한다. 위 삽화는 CPU 벤더 중 하나인 ARM 에서 제공하는 toolchain 인데 요즈음에는 보통 GNU Toolchain 으로 그 기능을 지원한다.

SoC 벤더에는 대표적으로 Broadcom (bcm2837), 삼성 전자 (Exynos), Qualcomm (Snapdragon), Intel, MediaTek, NVIDIA 등이 있다.

4. 보드 벤더 및 OEM

보드 벤더 로는 Raspberry Pi Foundation 등이 있는데, 일단 Raspberry Pi Foundation 의 경우 보드의 제작만 하고 있고 실제 제조는 OEM 업체로 맡겨 외부 위탁을 한다. (출처: https://en.wikipedia.org/wiki/Raspberry_Pi)

 라즈베리 파이 재단은 Broadcom 에서 제작한 SoC 를 얹어서 보드를 개발한 뒤 OEM 업체로 외부 위탁을 맡긴다. Broadcom 역시 SoC 에 사용될 CPU 를 CPU 벤더로부터 받아온다.

5. 임베디드 리눅스 개발을 위해 알아야 할 것들

- 디바이스 드라이버

 디바이스 드라이버의 시나리오와 제어하는 하드웨어의 종류는 다양하지만 다음의 내용 정도는 알아야 한다:

  • 인터럽트 핸들러 함수와 인터럽트를 처리하는 방식
  • 디바이스 파일로 open / read / write 연산에 대한 함수를 등록하는 방법
  • 디바이스 트리를 읽어 디바이스 속성을 저장하는 방식

- 리눅스 커널

 디바이스 드라이버는 리눅스 커널에서 제공하는 함수로 구성돼 있으며 호출한 함수의 동작 방식을 알려면 자연히 리눅스 커널 코드를 분석할 수밖에 없다.

- CPU 아키텍처

 리눅스 커널의 핵심 개념들은 대부분 어셈블리 코드로 구현돼 있다:

  • 컨텍스트 스위칭
  • 익셉션 벡터
  • 시스템 콜
  • 시그널 핸들러
  • 메모리 관리 (MMU)
profile
2000.11.30

0개의 댓글

관련 채용 정보