리눅스 커널 패치를 보내려 하는데 도무지 lock
과 관련된 내용이 이해가 안되고 있다. 그래서 패치에선 잠시 손 놓고 다시 초심으로 돌아가 한번 더 커널을 분석해보려 한다. 예전부터 읽어야지~ 읽어야지~ 하면서 책장에 박아두었던 디버깅을 통해 배우는 리눅스 커널의 구조와 원리
를 읽어보려 한다. (적어도 필자가 찾고 있던 락과 관련된 내용을 다루고 있다)
임베디드 리눅스, 그리고 이를 사용하는 기업들은 어떻게 협업을 하여 최종적인 프로덕트를 만들어낼까?
![]() |
---|
출처: netdev mailing list (https://lore.kernel.org/netdev/) |
우선 리눅스 커널 커뮤니티가 있다. 여기에서 리눅스 커널의 다음 버전이 릴리즈 되며, 버그가 수정되고 새로운 기능에 대한 논의가 이뤄진다. 필자도 리눅스 커널에 컨트리뷰션을 하고 있다. 바로 이곳에서부터 시작된다.
CPU 벤더는 CPU 를 설계하는 회사를 말하는데, 실제 CPU 를 제조하는 것과는 다르다. (같이 하기도 함) 대표적으로 ARM
, Intel
, IBM
등이 있다. 자세한 사항은 다음의 글을 읽어보면 좋다: https://news.samsungsemiconductor.com/kr/파운드리-팹리스-반도체-생태계-한눈에-보기/
이러한 회사들도 리눅스 커널 개발에 참여하는데 그 이유는 CPU 에 따라 커널의 구현이 달라지기 때문이다. 이는 리눅스 커널의 arch/
디렉터리 안의 항목이다. 각각이 CPU 에 종속적인 구현이다.
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 등이 있다.
보드 벤더
로는 Raspberry Pi Foundation
등이 있는데, 일단 Raspberry Pi Foundation
의 경우 보드의 제작만 하고 있고 실제 제조는 OEM
업체로 맡겨 외부 위탁을 한다. (출처: https://en.wikipedia.org/wiki/Raspberry_Pi)
라즈베리 파이 재단은 Broadcom 에서 제작한 SoC 를 얹어서 보드를 개발한 뒤 OEM 업체로 외부 위탁을 맡긴다. Broadcom 역시 SoC 에 사용될 CPU 를 CPU 벤더로부터 받아온다.
디바이스 드라이버의 시나리오와 제어하는 하드웨어의 종류는 다양하지만 다음의 내용 정도는 알아야 한다:
디바이스 드라이버는 리눅스 커널에서 제공하는 함수로 구성돼 있으며 호출한 함수의 동작 방식을 알려면 자연히 리눅스 커널 코드를 분석할 수밖에 없다.
리눅스 커널의 핵심 개념들은 대부분 어셈블리 코드로 구현돼 있다: