"디버깅을 통해 배우는 리눅스 커널의 구조와 원리" 책을 읽고 공부한 내용을 정리하기로 한다.

휴대폰, 서버, 네트웍 장비, 전기차, IoT 등 많은 곳에서 리눅스를 사용한다. 데스크탑의 대세는 windows지만 그 외 분야에선 linux가 갑이다. 왜 그럴까? 공짜니까, 소스를 오픈해주니까.

리눅스 커널을 공부하면 파일 시스템, 메모리 관리, 네트워크 등 기술을 구현하는 방법을 알 수 있다. 공부 방법은 두 가지다. 1) 실행한다 2) 코드를 분석한다.

역사

옛날엔 컴퓨터가 싱글 스레드였다. 멀티 스레드를 만들어 보려고 노력을 많이했다. 60년대 AT&T, MIT, GE에서 Multics를 만들었다. 하지만 Multics는 실패했고 이후 멀티 스레드를 지원하는 UNIX를 만든다.

그런데 UNIX를 어셈블리어로 만들어서 CPU Architecture(x86, amd64, ARMv7 등)가 다르면 그에 맞는 UNIX를 다시 개발해야했다. 즉, 호환성 문제가 있었다. 70년대 데니스 리치가 C언어를 만들었다. 이식성, 호환성 문제를 해결했다.

AT&T회사의 벨 연구소에서 만든 UNIX로 회사는 장사를 하려했으나 당시 전화부터 전자, 컴퓨터까지 독점하던 대기업 AT&T는 반독점 소송을 당해 7개의 회사로 쪼개지고 컴퓨터 사업을 할 수 없게된다. 만든 UNIX는 여러 회사에 돈을 받고 팔았는데 그 결과 변종 버전의 UNIX가 많이 탄생한다.

이에 IEEE(전기 전자 기술자 협회; Institute of Electrical and Electronis Engineers)에서 서로 다른 UNIX OS의 공통 API를 정리하여 표준을 만들었다. 그게 POSIX다. (이식 가능 운영 체제 인터페이스; Portable Operating System Interface) 이는 미국의 정부기관에서 컴퓨터 시스템 도입조건으로 요구하기 때문에 windows도 지키는 표준 규격이다.

AT&T로부터 구매해서 자체 개발한 여러 UNIX는 유료였다. 공짜 버전의 UNIX를 만들어보자는 취지로 리처드 스톨만(Richard Matthew Stallman)을 중심으로 사람들이 모여 GNU(Gnu is Not Unix)라는 단체와 FSF(Free Software Foundation)라는 재단을 만든다. 유닉스는 유틸리티 + 커널이다. GNU는 HURD라는 이름의 커널을 만들고 있었는데 진행이 잘 안됐다.

90년대 리누스 토발즈(Linus Tovalds)라는 대학생이 개발한 무료 OS를 GNU에서 GNU 커널로 채택한다. 공짜 UNIX, Linux가 탄생한다. 공짜고 소스가 오픈되어 있으니 사람들이 찾아서 많이 발전했다.

리눅스는 누구나 코드를 작성하고 배포할 수 있다. 다양한 버전의 리눅스가 있다. (Ubuntu, Fedora, Mint, 등)

리눅스는 다양한 개인과 단체가 함께 개발한다.

CPU 회사는 리눅스 커널 중 CPU에 따라 구현이 달라지는 부분을 개발한다. (시스템 콜, 익셉션, 컨텍스트 스위칭)

SoC(System on Chip) 집적회로 회사는 CPU 회사로 부터 toolchain을 제공받아 본인 회사의 제품에 맞게 리눅스 커널 코드를 수정하고 드라이버를 추가한다.

보드 회사는 SoC회사로 부터 리눅스 코드(커널 + 드라이버)를 제공받아 임베디드 리눅스를 개발한다.

공부 주제

디바이스 드라이버, 커널, CPU 아키텍처, SoC, HAL(Hardware Abstraction Layer), 빌드 스크립트, Git

환경

보드는 지인을 통해 얻은 "Raspberry Pi 2 Model B V1.1"을 사용한다. 커널 버전은 rpi-5.10y로 한다.

 

'개발 > linux' 카테고리의 다른 글

커널 소스 폴더 구조  (0) 2021.11.29
[번역] 라즈베리파이 커널 빌드 방법  (0) 2021.11.27
[기초편] Shell 이란?  (0) 2020.08.24
vi 사용법  (0) 2020.06.16
하드링크, 심볼릭링크 개념 및 사용법  (0) 2020.06.02

+ Recent posts