임베디드 리눅스 커널, 부팅, 컴파일, 포팅과 루트 파일 시스템

임베디드 리눅스 커널, 부팅, 컴파일, 포팅과 루트 파일 시스템


이전 포스트에서 이어집니다. [임베디드 리눅스 개발 환경 [링크]]


4. 리눅스 커널


개념


운영체제의 핵심 부분


운영체제는 HW 플랫폼에 포함된 모든 하드웨어 구성요소에 작용하면서 컴퓨터에서 실행되는 모든 응용 프로그램의 구동 환경을 제공

- 모든 프로세스, 하드웨어, 메모리, 시스템 자원 등도 관리


커널이란 운영체제와 사용자 간의 연결 고리


리눅스 커널과 운영체제리눅스 커널과 운영체제


커널 이미지


zImage : 압축된 형태의 커널

uImage : u-boot에서 사용할 압축된 형태의 커널

  : zImage는 u-boot의 파라미터를 전달받을 수 없는 구조이기에 uImage를 사용


커널 부팅 과정


프로세스 정보 검색

- ARM일 경우 ARM과 관련된 프로세스 정보를 검색

- 정보가 없다면 사용자가 별도로 저장한 추가 정보를 검색

- 프로세스의 버전도 검색해 이 과정을 완료함

머신 아키텍처 정보 검색

- 개발 대상 보드의 타입을 의미

- 개발 단계에선 임의의 타입을 설정하여 사용이 가능

- 사용화할 경우엔 ARM 리눅스 관리 사이트에서 해당 머신을 등록하여 사용


페이지 테이블 설정

- 물리 주소의 사항을 가상 공간 영역으로 매핑

- 보드 스펙에 따라 접근해야할 물리 주소가 다름


MMU(Memory Management Unit) 설정

- 모든 실행 파일을 물리 메모리에 로드하면 부팅 시간이 길어짐

- 임베디드 시스템에서 메모리 용량은 제한적

- 물리 주소를 사용자가 원하는 형태로 편집하여 사용이 가능


리눅스 커널 mmu 설정리눅스 커널 mmu 설정


커널 초기화

- BSS 영역을 초기화하여 커널 로드를 준비

  : Block Stared by Symbol, 초기화되지 않은 데이터를 위한 영역

- 위의 과정에서 설정된 사항들로 커널을 초기화


start_kernel() 호출

- 시스템 초기화

- 부팅시 실행되어야할 작업 수행

- 위의 두 과정을 거친 이후 runlevel에 따라 사용자에게 부팅 결과를 알림

  : runlevel

    1 : Single user mode

    5 : X11


커널 설정, 컴파일, 포팅


공식 리눅스 커널 사이트 : http://www.kernel.org [링크]


커널 설정

- make menuconfig로 옵션 설정


리눅스 menuconfig리눅스 menuconfig


- 불필요한 드라이버 제거

- 모듈 로더 기능 ON

- 시스템 타입(타깃 보드) 설정

- 부팅 시 도움말 등


커널 컴파일, 포팅


부트로더 파일 생성때와 같이 기존의 소스를 복사/수정하여 타깃 보드를 설정

부트 옵션 설정

- NFS, 또는 ramdisk 사용 설정

머신 타입 ID 설정

- 해당 ID는 u-boot에서 지정한 값과 동일

- 개발용 머신은 임의의 값으로 지정 가능


네트워크 장비 등 HW 사항도 이때 설정

이 단계에서 생성된 zImage를 u-boot 포팅 시 함께 테스트 가능

- 커널 부팅 테스트가 완료된다면 디바이스 드라이버 포팅도 진행

- LCD, Keypad, Audio 등


부팅 과정


linux 리눅스 부팅 과정linux 리눅스 부팅 과정


- head.S : 커널 이미지가 올라와야 하기에 메모리 초기화

- misc.c : zImage의 압축을 풀고 메모리에 올림

  : 교육 교재 226p ~ 274p 참조


5. 루트 파일 시스템


파일 시스템


리눅스에서 파일이란 모든 입출력 디바이스를 의미

모든 입출력 제어를 위해 디바이스 드라이버를 이용

- 리눅스는 ext2, jffs2, proc 등의 파일 시스템을 지원


커널만으론 사용자 제어가 불가능

- shell과 같은 시스템 프로그램 필요

- 커널 부팅 마지막 단계에서 루트 파일 시스템을 마운트


루트 파일 시스템

- 커널이 동작하기 위한 공간, 라이브러리, 유틸리티 등을 포함

- read/write 기능이 있어 사용자는 루트 파일 시스템을 이용해 머신을 제어

- 즉, 완전한 리눅스 시스템을 지원하기 위한 모든것을 갖춤

- 응용 프로그램이 구동될 수 있는 환경을 제공


Busybox

사이즈가 작기에 임베디드 리눅스용 루트 파일 시스템 구성 시 주로 사용

보편적으로 이용하는 옵션들이 대부분 포함

Busybox를 이용해 루트 파일 시스템을 컴파일하여 사용

  : 컴파일한 파일은 주로 ramdisk 또는 ramdisk-xxxx로 네이밍


리눅스 커널 컴파일리눅스 커널 컴파일


6. 참조 사이트


친절한 임베디드 시스템 개발자 되기 강좌

이글루스 링크 - 친절한 임베디드 시스템 개발자 되기 강좌, 히언 [링크]


임베디드 소프트웨어 강의 자료

임베디드 소프트웨어, 순천향대학교 이상정 교수님 [링크]


임베디드 리눅스 커널, 부팅, 컴파일, 포팅과 루트 파일 시스템

댓글(0)

Designed by JB FACTORY