Linux Kernel 18

[ Linux Kernel ] 02. printf("Hello Wolrd!")의 진실

3. printf("Hello World!")의 진실 그러면 이제 우리가 한 가지 궁금한 점이 있다. 우리는 프로그램을 만들 때 소스코드에 입출력과 관련된 함수를 작성한다. printf()를 사용하거나 get()등 디스크에 접근해서 값을 읽어오거나 화면에 문자를 출력하는 함수를 사용한다. 우리가 작성한 코드와 프로그램은 유저모드에서 아무런 제약없이 사용할 수 있었는데, 왜 I/O가 금지되었다고 말을 하는 것일까? 정답은 “소스코드에서만 그렇게 보인다”이다. 소스코드에서는 개발자가 입출력을 관리하는 것처럼 보이지만, 소스코드를 컴파일 한 후에 바이너리 파일을 열어보면 I/O와 관련된 instruction은 전혀 존재하지 않는다. 위에서 언급했듯이 I/O를 하고 싶으면 커널이 가지고 있는 function을 ..

[ Linux Kernel ] 00. 리눅스커널과 운영체제

LINUX 커널 리눅스 커널을 한 사람이 전부 아는 것은 불가능하다. 커널 관련 두터운원서를 75~80권 정도는 읽어야 "아, 한 번씩은 훑어봤다"라고 말할 수 있을 정도다. IBM같은 대형회사에서도 리눅스를 다루는 사람만 250명 정도 있다고 한다. 250명의 사람이 방대한 커널에서 각자 분야를 맡아서 일을 처리한다. 따라서 "모든걸 다 알아야지~!"라는 마음가짐 보다는 "커널과 운영체제가 어떤식으로 동작하는지 개략적으로 이해해보자"라는 수준의 마음가짐으로 임할것이다. 1. 운영체제란? 운영체제(Operating System)이란 하드웨어 자원들(cpu, memory, disk, tty)을 관리하고 프로그램들을 지원(support)해주는 것이다. (아래 그림을 살펴보면 Operating System의 ..

[ Embedded ] 00. 임베디드의 이해(LINUX 기반)

** 무엇을 배워야 임베디드 리눅스 개발을 잘할 수 있을까? ** 좁게 보면 임베디드 리눅스 개발자가 알아야할 지식은 다음과 같다. 리눅스 디바이스 드라이버 리눅스 커널 CPU 아키텍쳐 SoC 조금 넓게 보면 다응 내용도 알면 좋다. 유저 공간 HAL(Hardware Abstraction Layer) 코드 구현 빌드 스크립트 구현 테스트용 디바이스 드라이버 구현 git과 형상관리 임베디드 리눅스 개발을 시작하면 바로 디바이스 드라이버를 맡는 경우가 많다. 물론 프로세스나 개발 회사 규모에 따라 드라이버 개발 범위가 다르다. 제품을 이루는 디바이스 드라이버의 특정 분야를 맡을 수도 있고 어떤 경우 한 명의 임베디드 개발자가 임베디드 리눅스를 채임지는 경우도 있다. 디바이스 드라이버..