[직무교육] 임베디드 리눅스 커널 포팅 및 구조 Day2

1 minute read

임베디드 리눅스 커널 포팅 및 구조

Day2

Bootloader

  • 운영체제가 시동되기 이전에 미리 실행되는 프로그램 (운영체제 시동 목적)
  • 하드디스크이 첫번째 섹터에 위치
  • U-BOOT(임베디드 리눅스), NTLDR(Window), GRUB(PC 리눅스)

BSP(Board Support Package)

  • 부트로더 소스 및 이미지 파일
  • 리눅스 커널 소스, 디바이스 드라이버 소스 및 이미지 파일
  • 램디스크 이미지 파일
  • Cross Compiler Tool Package(gcc)

U-Boot 소스코드 분석

  • start_armboot(void) => main 함수
  • 어셈블리 코드(.s)는 하드웨어 초기화도 하지만, C언어 소스코드를 호출해서 부팅을 진행할 수도 있다.

Makefile

  • 규모가 큰 프로그램의 경우 여러 개의 모듈로 나누어 프로그램을 개발하게 된다.
  • 이 때, 입력 파일이 바뀌면 바뀐 파일과 관계 있는 다른 파일들이 다시 컴파일이 되어야 하는데, 이러한 과정을 쉽게 할 수 있도록 해주는 파일이다.
  • Makefile이 뭘까?

Vector Table

  • 프로그램 맨 시작부분에 위치하여 프로그램이 동작 중에 문제가 발생하거나 인터럽트가 걸렸을 때 점프하는 부분이다.
  • Vector Table

Porting

  • 호스트에서 제작한 프로그램을 타겟 보드에서 실행될 수 있게 만들기 위해 요구되는 작업
  • SoC 포팅
    • Reference 보드의 SoC와 target 보드의 SoC 차이점을 파악하고 소스코드에 반영하는 작업

U-boot 포팅 실습

  • 삼성에서 제공하는 smdk2450 용 부트로더를 Reference로 활용한다.
  • 컴파일러를 수정하고 mds2450 보드용 디렉터리를 추가한다.
  • mds2450과 유사한 시스템 보드의 디렉터리와 configuration 파일을 이용하여 mds2450에 맞도록 수정한다.
  • 리눅스 커널을 메모리에 올리기 전이므로 U-boot가 메모리에서 차지하는 위치는 테스트 시에는 상관이 없으나, 리눅스 커널 자리를 미리 확보해두고 U-boot 위치를 정하는 것이 좋다.
  • DRAM (64MB) 메모리 주소 범위
    • 0x30000000 ~ 0x33ffffff

image

MMU(Memory Management Unit)

  • 가상 메모리 주소 -> 물리 메모리 주소 변환
  • 메모리 보호

커널 이미지 구조

  • zImage: 압축된 형태
  • 압축을 풀기 위한 head.S, 커널 시작을 위한 head.S 존재

커널 이미지

Categories:

Updated:

Leave a comment