티스토리 뷰

목차

    반응형

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


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


    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. 참조 사이트


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

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


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

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


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

    반응형