티스토리 뷰
목차
임베디드 리눅스 커널, 부팅, 컴파일, 포팅과 루트 파일 시스템
이전 포스트에서 이어집니다. [임베디드 리눅스 개발 환경 [링크]]
4. 리눅스 커널
개념
운영체제의 핵심 부분
운영체제는 HW 플랫폼에 포함된 모든 하드웨어 구성요소에 작용하면서 컴퓨터에서 실행되는 모든 응용 프로그램의 구동 환경을 제공
- 모든 프로세스, 하드웨어, 메모리, 시스템 자원 등도 관리
커널이란 운영체제와 사용자 간의 연결 고리
리눅스 커널과 운영체제
커널 이미지
zImage : 압축된 형태의 커널
uImage : u-boot에서 사용할 압축된 형태의 커널
: zImage는 u-boot의 파라미터를 전달받을 수 없는 구조이기에 uImage를 사용
커널 부팅 과정
프로세스 정보 검색
- ARM일 경우 ARM과 관련된 프로세스 정보를 검색
- 정보가 없다면 사용자가 별도로 저장한 추가 정보를 검색
- 프로세스의 버전도 검색해 이 과정을 완료함
머신 아키텍처 정보 검색
- 개발 대상 보드의 타입을 의미
- 개발 단계에선 임의의 타입을 설정하여 사용이 가능
- 사용화할 경우엔 ARM 리눅스 관리 사이트에서 해당 머신을 등록하여 사용
페이지 테이블 설정
- 물리 주소의 사항을 가상 공간 영역으로 매핑
- 보드 스펙에 따라 접근해야할 물리 주소가 다름
MMU(Memory Management Unit) 설정
- 모든 실행 파일을 물리 메모리에 로드하면 부팅 시간이 길어짐
- 임베디드 시스템에서 메모리 용량은 제한적
- 물리 주소를 사용자가 원하는 형태로 편집하여 사용이 가능
리눅스 커널 mmu 설정
커널 초기화
- BSS 영역을 초기화하여 커널 로드를 준비
: Block Stared by Symbol, 초기화되지 않은 데이터를 위한 영역
- 위의 과정에서 설정된 사항들로 커널을 초기화
start_kernel() 호출
- 시스템 초기화
- 부팅시 실행되어야할 작업 수행
- 위의 두 과정을 거친 이후 runlevel에 따라 사용자에게 부팅 결과를 알림
: runlevel
1 : Single user mode
5 : X11
커널 설정, 컴파일, 포팅
공식 리눅스 커널 사이트 : http://www.kernel.org [링크]
커널 설정
- make menuconfig로 옵션 설정
리눅스 menuconfig
- 불필요한 드라이버 제거
- 모듈 로더 기능 ON
- 시스템 타입(타깃 보드) 설정
- 부팅 시 도움말 등
커널 컴파일, 포팅
부트로더 파일 생성때와 같이 기존의 소스를 복사/수정하여 타깃 보드를 설정
부트 옵션 설정
- NFS, 또는 ramdisk 사용 설정
머신 타입 ID 설정
- 해당 ID는 u-boot에서 지정한 값과 동일
- 개발용 머신은 임의의 값으로 지정 가능
네트워크 장비 등 HW 사항도 이때 설정
이 단계에서 생성된 zImage를 u-boot 포팅 시 함께 테스트 가능
- 커널 부팅 테스트가 완료된다면 디바이스 드라이버 포팅도 진행
- LCD, Keypad, Audio 등
부팅 과정
linux 리눅스 부팅 과정
- head.S : 커널 이미지가 올라와야 하기에 메모리 초기화
- misc.c : zImage의 압축을 풀고 메모리에 올림
: 교육 교재 226p ~ 274p 참조
5. 루트 파일 시스템
파일 시스템
리눅스에서 파일이란 모든 입출력 디바이스를 의미
모든 입출력 제어를 위해 디바이스 드라이버를 이용
- 리눅스는 ext2, jffs2, proc 등의 파일 시스템을 지원
커널만으론 사용자 제어가 불가능
- shell과 같은 시스템 프로그램 필요
- 커널 부팅 마지막 단계에서 루트 파일 시스템을 마운트
루트 파일 시스템
- 커널이 동작하기 위한 공간, 라이브러리, 유틸리티 등을 포함
- read/write 기능이 있어 사용자는 루트 파일 시스템을 이용해 머신을 제어
- 즉, 완전한 리눅스 시스템을 지원하기 위한 모든것을 갖춤
- 응용 프로그램이 구동될 수 있는 환경을 제공
Busybox
사이즈가 작기에 임베디드 리눅스용 루트 파일 시스템 구성 시 주로 사용
보편적으로 이용하는 옵션들이 대부분 포함
Busybox를 이용해 루트 파일 시스템을 컴파일하여 사용
: 컴파일한 파일은 주로 ramdisk 또는 ramdisk-xxxx로 네이밍
리눅스 커널 컴파일
6. 참조 사이트
친절한 임베디드 시스템 개발자 되기 강좌
이글루스 링크 - 친절한 임베디드 시스템 개발자 되기 강좌, 히언 [링크]
임베디드 소프트웨어 강의 자료
임베디드 소프트웨어, 순천향대학교 이상정 교수님 [링크]
임베디드 리눅스 커널, 부팅, 컴파일, 포팅과 루트 파일 시스템