[Linux] BBB Linux boot time 최적화 #0
·
Embedded Systems/리눅스
Udemy의 임베디드 리눅스 강의와, '임베디드 리눅스 프로그래밍 완전정복' 책을 병행해 공부해보며, 단순히 지식을 주입받고있는 것 같다는 느낌을 받았다.더 효율적으로 공부할 수 있는 방법이 뭐가 있을까 생각해보다가, 일단 프로젝트를 해보면서 부딪히는게 좋겠다는 생각이 들어 임베디드 리눅스 관련 프로젝트를 수행해보기로 마음먹었다. 과제는 내가 가장 관심있는 커널 영역의 지식을 활용해야하는, 비글본 블랙의 리눅스 커널 부팅타임을 감소시키는 것이다. 가장 먼저 선행연구 자료를 조사하였다.https://bootlin.com/doc/training/boot-time/boot-time-slides.pdf (이어서 작성 예정)
[Linux] U-boot 가 리눅스 커널을 로드하는 구체적인 과정 정리(1)
·
Embedded Systems/리눅스
리눅스 부팅시, 부트로더는 구체적으로 어떤 절차를 거쳐 메모리에 리눅스 커널을 로드하는 건지 알아보았다. 실행되는 파일로 구분해본 리눅스 부팅과정 flow-chartU-boot가 리눅스의 bootstrap loader에 있는 `head.s` 파일에게 제어를 넘긴다.`head.s`는 압축된 커널 이미지의 압축 해제를 위해, 같은 bootstrap loader에 위치한 `misc.c` 파일을 호출한다.다음으로 제어권은 리눅스 커널에 위치한 또다른 `head.s`파일로 넘어간다.제어권은 `head-common.c` 파일을 거쳐, 리눅스 커널의 `main.c` 파일로 넘어간다.`main.c` 로부터, 리눅스 커널의 첫번째 appliction인 `init`이 실행된다!U-boot(bootloader)가 linux..
[Linux] 임베디드 리눅스 부팅 순서 + 비글본 블랙(BBB) 부팅 순서
·
Embedded Systems/리눅스
https://www.youtube.com/watch?v=DV5S_ZSdK0s&t=359s임베디드 리눅스 부팅 순서를 정리한 훌륭한 강의의 내용을 정리해보았다!1. "대부분의 리눅스 시스템"에서의 부팅 순서1. SoC ROM Bootloader의 역할보드에 파워를 넣으면, 제어가 reset vector라는 곳으로 넘어간다. 이 부분은 제조사가 보드에 사전 프로그래밍한 기능이다.reset vector 로 제어가 넘어간 뒤에는 일반적으로 SoC의 boot ROM 로더가 존재하기 때문에, ROM 부트로더가 executing 을 시작할 것이다.이제, ROM 부트로더의 할일은 기본적인 하드웨어를 설정하고 boot device에서 First stage bootloader을 찾는 것이다. 이 boot device는..
[Linux] 디바이스 드라이버란 무엇일까?
·
Embedded Systems/리눅스
디바이스 드라이버란?디바이스 드라이버(device driver)란, 하드웨어를 제어하기 위해 하드웨어 특성이나 레지스터 설정 등 디바이스 제어를 위한 기능을 담고 있는 layer로, 리눅스에선 커널의 일부분으로 구성된다. 디바이스 드라이버는 디바이스 관리에 필요한 정형화된 인터페이스를 구현하기 위해 필요한 함수와 자료구조의 집합체로, 리눅스 커널에서 동일 디바이스끼리 비슷한 서비스를 제공하기 위해 커널 내에서 관련 기능을 제공한다. 사용자 영역의 디바이스들은 커널 영역에서의 실제 디바이스들과 매핑되어야 한다. 디바이스 드라이버는 추상화 개념을 제공해야 하는데, 애플리케이션 관점에서 해당 디바이스에 대한 자세한 구현은 알 필요가 없이 파일 시스템으로 접근할 수 있어야 한다. 디바이스 드라이버는 디바이스를 ..
[Linux] 리눅스의 프로그래밍 도구 (GCC, make, gdb 유틸리티)
·
Embedded Systems/리눅스
리눅스의 프로그래밍 도구인 GCC, make, gdb가 무엇인지 정리해본다.Reference: [책] 사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이, 78-104 1. GCC (GNU Compiler Collection)GCC란 무엇일까? 정확하게 알아보자.GCC(GNU Compiler Collection)를 알기 위해선 GNU가 무엇인지부터 알아야겠다.GNU 홈페이지의 정의를 살펴보았다. "GNU는 여러 사람들이 합작으로 만든 운영체제이며, GNU의 주된 목적은 100% 무료로 유닉스 운영체제에 호환 가능한 시스템을 제공하는데에 있다고 한다."다시말해, GCC는 유닉스 계열 운영체제에 호환 가능한 100% 무료인 오픈소스 컴파일러 모음집인 것이다. GCC는 다음과 같이 유닉스 계열 운영체제에..