Boot Loader
Boot Loader 비교 일반 리눅스 Embedded Linix Boot Loader Boot Loader EMPOS_boot Flash 0 block에서 동작 Linux Booting Command line Kernel/root file system을 Downloading Ram에서 Flash로 writing LILO (LInux LOader) Hard disk의 MBR에서 동작 여러 O/S를 선택적으로 부팅
Boot Loader Functions Hardware 초기화 Memory setting, CPU clock setting GPIO setting, Serial setting MAC address, Ethernet port setting Memory copy : Flash ROM → SDRAM kernel image ramdisk image bootloader 자신 Kernel booting Command mode boot, reset, bootp, ……. (total 12 commends), diagnostic Memory dump. Memory modify, execution command를 제외 시킴 Debug mode (debugging functions) Example of boot loaders blob, Redboot(eCos), ppcboot, armboot, bootldr
Boot Loader 종류 LILO (Linux Boot Loader) GNU GRUB (Grand Unified Boot Loader) LILO upgrade Boot Loader, x86 계열 지원 ARMBoot ARM 계열 지원, 부트 디바이스를 flash ROM, bootp/dhcp/tftp, PCMCIA CF 등을 지원, 지원하는 보드가 적음. BLOB (Boot Loader OBject) SA11x0 계열 지원, 직렬통신으로 커널 이미지와 램디스크를 다운로드 기능을 지원하나 변종이 많음, iPAQ, Jornada 등의 PDA와 Assabet 지원 Bootlr Compac에서 IPAQ용 지원, 30가지 명령어 지원으로 기능은 우수 PPCBoot MPC 계열 지원, ARMBoot와 통합, 네트워크 부팅 환경 제공 RedBoot Red Hat상의 eCos 일부를 사용하여 개발, 다양한 CPU를 지원 Angel Intel Assabet 보드를 지원하는 초기 Boot Loader
Boot Loader 수행 화면
Flow Chart
Boot Loader Sources(1) : files Makefile : make 유틸리티에 사용되는 compile scriptor start.S : 처음 시작하는 코드로써 register setting main.c : 전체적인 boot loader sequence를 control command.c : 명령어를 처리 lib.c : 소스에서 사용하는 라이브러리 함수 제공 flash.c : flash ROM에 데이터를 저 serial.c : FFUART 초기화 및 monitoring을 위한 기본 함수 제공 time.c : boot loader 에서 사용하는 timer smc91111.c : 네트워크 디바이스 파일로써 저수준 네트워크 통신 담당 net.c : bootp, tftp와 smc91111.c와의 중간 다리 역할 bootp.c : bootp packet 구성과 전달 tftp.c : tftp packet 구성과 전달
Boot Loader Sources(2): head ld-xscale : 링커 스크립트로 링커의 모듈 결합에 사용 bootp.h : bootp.c와 관련된 해더 commands.h : commands.c와 관련된 해더 config.h : 보드의 래지스터 및 환경설정을 담당 flash.h : flash.c 와 관련된 해더 header.h : 네트워크 패킷 구성에 사용되는 패킷의 구조 제공 lib.h : lib.c 와 관련된 해더 main.h : main.c 와 관련된 해더 net.h : net.c와 관련된 해더 reg.h : Xscale PXA255와 관련된 여러 래지스터의 주소 serial.h : serial.c와 관련된 해더 smc91111.h : smc91111.c와 관련 해더 tftp.h : tftp.c와 관련된 해더 time.h : time.c와 관련된 해더 types.h : 변수 타입 및 필요 항목 정의
Memory Map SDRAM Flash ROM Linux Booting RAM environment (Virtual memory) Flash ROM Physical address Boor loader
Boor Loader Commands boot reset bootp : bootp를 통해 호스트로 부터 IP address 할당 setip : host와 target의 IP address를 설정 macwrite : Primary/Secondary Ethernet의 MACaddress 설정 tftp : tftp를 통한 데이터를 전송 download : Serial port을 통한 데이터를 전송 read : 특정 메모리 address의 값을 read write : 특정 메모리 address 의 값을 write flash : 전송 받은 데이터를 flash ROM에 저장 erase : flash ROM 에 저장되어 있는 데이터 삭제 status : memory, register, Ethernet의 status를 표시 test : 사용자에게 테스트 함수를 제공 help
Main Routine
Sources Makefile : (그림 7.2) ld-xscale config.h start.S : main.c : (그림 7.3), (그림 7.4), (그림 7.5) serial.c (그림 7.6), (그림 7.7), (그림 7.8)
Experiment 1: boot loader porting Boot Loader를 compile 할 tool chains를 Linix PC에 설치 Boot Loader 수행시 처음 출력되는 Copyright 정보(Herald message)에 자신의 정보를 추가 “Honam University” “Multimedia Lab, Feb-11-2004” IO 초기화 부분을 수정하여, Text LCD 글자를 변경 “Multimedia Lab, EMPOS-II” 테스트 함수를 수정해서, 버튼 입력을 출력 “If on 8 bits push button, Light LED” 수정된 boot loader 를 compile하여 보드에 포팅