Bootloader Porting Lecture #6.

Slides:



Advertisements
Similar presentations
Lee Hoon Copyright(c) 2008 LeeHoon All rights reserved. 제 10 강.
Advertisements

Linux Debugging issues
EZ Board-M In-Ho, Roh Real Time System Lab.
임베디드 시스템 개발 환경 (1) Lecture #3.
U-boot(Universal Bootloader)
Windows CE 시스템 개발 환경 구축.
제6장 FUSING.
Cross Compiler를이용한 커널 컴파일 및 포팅
Cross Compiler를이용한 커널 컴파일 및 포팅 1
크로스 컴파일 환경 구축.
Tool Chain, JTAG, Bootp, TFTP 의 설치
Kernel Porting Lecture #7.
제4장 Cross Compiler 설치.
Minicom,tftp,nfs설정,vnc설정
FUSING.
08. 디바이스 드라이버의 읽기와 쓰기 김진홍
Tftp, nfs, samba 실습 임베디드 시스템 I.
Linux를 이용한 Embedded 장비 개발
임베디드 시스템.
임베디드 리눅스 시스템의 기본 개념 강의 목표 내용 임베디드 리눅스 시스템의 기본 개념과 주제 제시 1. 임베디드 시스템
목차 커널의 개념 및 기능 커널 포팅 램디스크.
네트워크 스캔하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
UNIT 06 JTAG Debugger 로봇 SW 교육원 조용수.
Team Project : SSL 2008/05/27 정보보호 응용 발표자 : 신용철.
임베디드 리눅스 설치 및 동작 Lecture #5.
임베디드 시스템 개론 크로스 플랫폼 설치 2일차 강의 자료 Embedded System Lab.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
임베디드 시스템 개론 3주차 Embedded System..
Embedded System Porting (2)
강 명 수 LINUX 설치 강 명 수
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
Root Filesystem Porting
DK-128 ADC 실습 아이티즌 기술연구소
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
부트로더와 Self Programming
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
Cross Compiler 설치.
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
Host PC & Target Board 환경설정 Embedded Linux Image 올리기
U-boot 소스얻기,compile,올리기
4. LAN의 배선체계 (3장. LAN: Local Area Network)
Boot Loader.
Cross Compiler를이용한 커널 컴파일 및 포팅
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
Device Driver 임베디드 시스템 I.
망고100 보드로 놀아보자 -12 커널 디렉토리 설명
4장 시스템 시작 및 셧다운 Solaris 2. PROM의 이해
임베디드 시스템 개론 임베디드 타겟 보드 포팅 및 H/W 제어 3일차 강의 자료 Embedded System Lab.
Xscale Educational Kit
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Tiny OS와 NesC Tiny OS Part1. Won Mi Sun – 17 지능제어 연구실.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
컴퓨터 시스템 하드웨어 컴퓨터 시스템 소프트웨어 C P U Control Unit 입 력 장 치 출 력 장 치 ALU
ARM Development Suite v1.2
리눅스 커널 프로그래밍 환경 구축 IT EXPERT 리눅스 커널 프로그래밍 Author : Byungki Kim
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
Kernel, Ramdisk, JFFS2 Porting
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
셀프 프로그래밍으로 쓰기 셀프 프로그래밍이란? 프린트포트의 ISP 모듈을 사용하지 않음 부트로더에 의한 펌웨어 다운로드
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
임베디드 시스템 개론 3주차.
06. 디바이스의 등록과 해제 김진홍
Kernel Porting Lecture #7.
임베디드 리눅스 설치 및 동작 Lecture #5.
Docker Study 6~7.
Presentation transcript:

Bootloader Porting Lecture #6

목 차 부트로더 개요 u-boot 디렉토리와 소스 구조 u-boot 동작 이해 u-boot 빌드 부트로더 fusing하기

부트로더 개요 (1) 정의 부트로더의 메모리 위치 시스템의 하드웨어를 초기화하고 운영체제의 커널을 메모리에 실행시키는 시스템 프로그램 부트로더의 메모리 위치 일반적으로 시스템 메모리의 물리 주소 ‘0’번지에 위치 0x0000_0000 : Reset exception 부트로더의 주요 기능 : Startup, Monitoring mode, OS Boot 하드웨어 초기화 Clock 설정, memory(SDRAM) 설정, 인터럽트 disable 시리얼포트 초기화 네트워크 초기화 커널과 root filesystem 적재 커널과 root file system을 메모리에 적재하여 Linux 실행

부트로더 개요 (2) u-boot 개요 Universal Bootloader ppcboot + armboot PPC와 ARM에 기반을 둔 임베디드용 Bootloader 다양한 cpu 지원 (PPC, ARM, MIPS, SH, x86…) Open Source

u-boot 디렉토리와 소스 구조 (1) 디렉토리 설명 board 상용 evaluation 보드와 관련된 파일 board/pro3 pro3보드와 관련된 파일 common architecture 독립적인 파일 cpu architecture에 의존적인 파일 각각의 cpu에 대한 startup 코드, serial, clock 등 cpu specific한 코드들이 존재 cpu/pxa pro3에서 사용하는 XScale코어 관련 파일 disk 디스크 드라이브와 파티션 관련 파일 doc u-boot 관련된 문서 drivers 외부장치의 드라이버 파일 examples u-boot를 위한 test 실행 파일 include header file include/config 보드 설정을 위한 header file net Network 관련 파일 post Power On Self Test rtc Real Time Clock driver 파일 tools U-boot 이미지나 S-Record 이미지를 생성하기 위한 tool (mkimage)

u-boot 디렉토리와 소스 구조 (2) 디렉토리 설명 include asm/arch-pxa/ pxa2xx를 위한 헤더파일 configs pro3.h 보드에 의존적인 메모리 정보, 사용될 하드웨어 및 소프트웨어 설정, 기본 환경 변수 지정 cpu pxa start.S u-boot에서 제일 처음 시작하는 부분으로 exception table을 가진다. interrupt.c 프로세서의 인터럽트관련 소스 파일 serial.c 시리얼 장치(uart)의 디바이스 드라이버를 구현한 소스 파일 cpu.c 캐시 관리, 소프트웨어 리셋 등 cpu를 관리 board pro3 config.mk u-boot의 코드가 동작할 텍스트 섹션 베이스 주소지정 u-boot.lds u-boot의 이미지 배치를 위한 링커 스크립트 pro3.c pro3 보드 설정 flash.c 플래시 디바이스 관리 drivers smc91111.c smc91111.h smc91111 Ethernet driver

u-boot의 동작 이해 (1) 부트로더의 실행 순서

u-boot 동작 이해 (2) start.S

u-boot 동작 이해 (3) Memory 배치 0x0200_0000 u-boot 0xA7F8_0000 root f/s uImage 0x0008_0000 Bootloader parameters 0x0004_0000 u-boot 0x0000_0000 FLASH 0xA000_0000 Memory

u-boot 동작 이해 (4) u-boot 전체 흐름 [ASM] startup코드 (cpu/pxa/start.S) cpu 초기화, sdram초기화, sdram으로 relocation, start_armboot()호출 [C]코드 start_armboot() (lib_arm/board.c) flash_init, eth_init console 초기화 main_loop() (common/main.c) 명령어 처리 루틴 autoboot Linux booting (lib_arm/armlinux.c) Linux booting (커널의 헤더를 읽어서 압축 풀고 리눅스로 제어권을 넘김)

Linux를 위한 boot 조건 (1) Linux booting에 필요한 두가지 이미지 Linux Kernel image FLASH/ROM에서 동작하기 위해 Kernel을 구성 Root File System(RFS) image Jffs2 image, RAMdisk 대부분의 boot-loaders는 다음의 두 가지 부팅모드를 지원 Bootloading – Local Booting 독립적으로 Kernel과 RFS를 내부 device(Flash)로부터 load한다(autoboot). Downloading – Remote Booting Kernel과 RFS를 외부 device(Host PC)로부터 download 처음에는 Kernel과 RFS를 install하기 위해 이 모드를 사용 또한 차후에 updates를 위해 사용

Linux를 위한 boot 조건 (2) Linux kernel의 제어권을 넘기기 전에 bootloader에서 해야 될 일 (1) Initialize base hardware CPU speed memory timings Detect machine type (passed to Kernel by r1) Initialize device Init UART to be Kernel console (passed to Kernel by tagged list, kernel boot option) Copy Kernel and RFS image to RAM Kernel을 위한 연속된 physical memory의 블록을 준비한다. 또한 RFS을 위한 memory도 준비한다 (인접할 필요는 없다). Copy (또는 download) 한 후에 Kernel과 RFS를 각각의 연속된 공간에 압축을 푼다. Setup the Kernel Tagged List (보드 정보) ppc : structure arm: physical ram 시작번지 + 0x100 (0xA000_0100)

Linux를 위한 boot 조건 (3) Linux kernel의 제어권을 넘기기 전에 bootloader에서 해야 될 일 (2) Calling the Linux Kernel with following settings CPU register settings R0 = 0, R1 = machine architecture number (the MACH_TYPE_XXX in kernel) (linux/include/asm/mach-types.h) Linux/arch/arm/tools/mach-types의 것과 일치해야 한다. R2 = base address of ATAG list (system RAM안에 있는 tagged list의 physical address) CPU mode All forms of interrupts must be disabled (IRQs, FIQs) CPU must be in SVC mode Cache, MMU MMU mustbe off D-cache must be off and no any stale data (I-Cache can be on/off)

Linux를 위한 boot 조건 (4) R0, R1, R2 레지스터를 설정하고 커널로 진입하는 부분 void do_bootm_linux(…) { void (*theKernel)(int zero, int arch, uint params); .. theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep); theKernel (0, bd->bi_arch_number, bd->bi_boot_params); } u-boot/board/pro3/pro3.c gd->bd->bi_arch_number = 8894; linux/arch/arm/tools/mach-types pro3 ARCH_PRO3 PRO3 8894 gd->bd->bi_boot_params = 0xa0000100; // address of boot parameters u-boot/lib-arm/armlinux.c

u-boot 빌드 부트로더 이미지 생성 과정 부트로더 이미지 생성 # cd /root/pro3/Bootloader # ls # tar xfz ./u-boot-1.2.0-pro3-YYYYMMDD.tar.gz 부트로더 이미지 생성 cd ./u-boot-1.2.0-pro3 make pro3_config make ls ./u-boot.bin cp ./u-boot.bin /tftpboot

부트로더 fusing하기 부트로더에서 Host PC와 Targetboard IP를 설정한 후에 tftp를 통해 이미지를 다운로드 할 수 있다. // Host PC와 Targetboard의 IP를 설정하기 PRO3> set serverip 192.168.1.10  [ host pc ip ] PRO3> set ipaddr 192.168.1.20  [ targetboard ip ] // u-boot image 파일 설정 및 fusing PRO3> set boot_file ./pxa255_pro3/u-boot.bin PRO3> run bootf

u-boot 명령어 cmp : 메모리 비교 cp : 메모리 복사 erase : flash 메모리 삭제 flinfo : flash 메모리 정보 출력 go : ‘addr’ 주소에서 시작 help : 도움말 출력 md : 메모리 출력 mm : 메모리 수정 mtest : 단순 RAM 테스트 mw : 메모리 쓰기 printenv : 환경 변수 출력 run :환경 변수를 실행하는 명령어 saveenv : 저장장치에 환경 변수 저장 setenv : 환경 변수 지정