<2012 11 2> U-boot(2) U-boot 구조 분석 및 이식 중점

4158 단어 2012
bootloader <주로 웨이둥산에서 온 책bootloader 버전은 u-boot-1.1.6>이고 신판 2010.6 이후의 디렉터리 구조는 약간 변화가 있지만 주요 파일은 다음과 같다. ----------------------------------------------1. bootloader는 일반적으로 booard에 전기를 넣거나 복원한 후의 첫 번째 프로그램으로 C 프로그램과 소량의 어셈블리로 쓰인다.
주로 두 가지 작용이 있다. 첫째, 시스템 안내 핵을 초기화하는 것이다.
2. 개발 단계에서 다운로드와 디버깅을 도와줍니다.
2. bootloader의 두 단계 작업: 1, 1단계 #하드웨어 장치 초기화(Watchdog 끄기, 끄기 중단, CPU 속도와 시계 주파수 설정, 램 초기화... 일부 하드웨어 초기화는 2단계로 할 수 있다) #bootloader의 2단계 코드를 램 공간에 불러오기(Flash-RAM 읽기)하고 이 램 공간을 준비해야 한다. #스택 #을 설정하고 2단계 코드 입구로 이동
2. 2단계 # 이 단계에 사용된 하드웨어(예를 들어 직렬, 네트워크 카드 등) # 감지 시스템의 메모리 맵(memory map) # 내장 이미지와 루트 파일 시스템 이미지를 RAM 공간으로 불러오기(Flash-쓰기 RAM) # 내장 부팅 파라미터를 설정하고 적당한 시기에 내장 입구 함수로 이동할 수 있음 #cmdline의 상호작용 환경을 구축(개발을 돕기 위해)
-----------------------------------------------3. 커널이 작동하기 전에 CPU가 있어야 하는 상태 1, #레지스터 R0 = 0;    R1 = machine ID; @ARM 구조 CPU에 대해 기계 ID는 리셋 코드인 linux/arch/arm/tools/mach-types에서 R2를 찾을 수 있습니다 = 시작 파라미터 RAM에서 시작 주소 #CPU 작업 모드 중단 금지(IRQs와 FIQs) 작업 모드는 SVC 모드 # MMU와 데이터 Cache가 닫혀야 합니다.(명령 Cache는 임의로)
2. CPU는 R1의 ID와 R2가 표시하는 매개 변수 목록을 통해 bootloader가 전달하는 시작 매개 변수를 단방향으로 받아들이고 대조와 초기화를 진행한다.
tag lists에 대한 정의는 원본 코드인clude/asm/setup을 재호출할 수 있습니다.h에서 # 설정 태그 ATAGCORE(bootloader와 커널에 약정된 매개 변수 저장 주소) #메모리 태그 설정(메모리 시작 주소 및 메모리 크기) #명령줄 태그 설정(커널의 일부 동작을 제어하는 문자열) #메모리 태그 설정ATAGNONE
-------------------------------------------------4 U-boot의 구성, 링크 분석 컴파일 1, 구성 명령:make _configmake all==>U-boot.bin (평탄한 이진 형식);U-boot(ELF 형식);U-boot.srec(Motorola 포맷)=>도구 하위 디렉터리tools:mkimage는 U-boot 포맷 헤더가 있는 내장 이미지 파일 uImage를 생성하는 데 사용됩니다. (linux 내장 이미지 vmlinuz)
2、./mkconfig $1 $2 $3 $4 $5 $6  board_name arm arm920t board_name NULL s3c24x0 명령을 사용하여 #개발판 이름 BOARD 설정NAME=$1
# 플랫폼/개발판 관련 헤더 파일 만들기 링크($2 =arm)asm====>asm-$2 asm-$2/arch===>arch-$6 asm-$2/proc====>proc-armv
#최상위 Makefile에 포함된 파일 include/config을 만듭니다.mk  config.mk 파일 내용: ARCH = arm CPU = arm920t BOARD = boardname  SOC = s3c24x0
# 개발판 관련 헤더 파일 include/config 만들기h  config.h 파일 내용: #include
3、board 디렉터리에 새 개발판을 만들려면의 디렉터리는 개발판 설정 정보 파일인clude/config/.h 개발자보드 구성 정보 파일에는 다음과 같은 두 가지 유형의 매크로 매개 변수가 있습니다.
# CONFIG_XXXXX .CPU, SOC, 개발판 종류, 시스템 시계 설정, 장치 드라이브 선택 등에 사용됩니다.
# CFG_XXX .malloc 버퍼 크기, U-boot 프롬프트, U-boot 다운로드 파일의 기본 로드 주소, Flash의 시작 주소 등을 설정하는 데 사용되는 매개 변수입니다.
링크 컴파일 시 매크로 스위치 CONFIG코드 포함 여부, 매크로 구성 CFG세부 매개변수를 설정합니다.
4. U-boot 컴파일 프로세스
# 먼저 cpu/arm920t/start를 컴파일합니다.S 및 이 디렉터리에 있는 다른 파일
# 그리고 플랫폼과 개발판과 관련된 디렉터리, 그리고 모든 일반 디렉터리에Makefile 파일로 해당하는 라이브러리를 생성한다(.o.a 파일)
#앞의 두 단계를 생성합니다.o .a 파일은 board/boardname/config.mk 파일에 지정된 코드 세그먼트 시작 주소 및 board/(board name)/U-boot.lds 링크 스크립트, 링크를 진행합니다.
# 마지막으로 받은 ELF 형식의 U-boot을.bin .srec 형식
====》cpu/arm920t/start.S. 네.lds에서 전체 U-boot으로 지정된 포털 파일입니다.
============================================5. U-boot 부팅 프로세스 소스 분석 #1단계 코드 cpu/arm920t/start.S <== 플랫폼 종속(Soc chip 레벨 초기화)
board/board_name/lowlevel_init.S<== 개발판 관련(board급, 예를 들어 SDRAM 등 기타 외부 설비 초기화)
# 2단계 코드는libarm/board.c의 startarmboot 함수 시작 주요 작업 1 시스템 시계 설정, 초기화 직렬 (인쇄 정보 전송) MPLL 설정, 시스템 시계 변경(board/board name/board name.c 파일) 2 메모리 매핑 파라미터(즉 메모리 시작 주소, 크기 등) 측정커널 3에 U-boot을 구현하는 명령 모드 4 커널 시작 매개변수(tag lists)(lib arm/armlinux.c 파일)를 설정합니다. 일반적으로 두 개의 tags를 커널에 설정하면include/config/.h중:
  #define CONFIG_SETUP_MEMORY_TAGS 1

  #define CONFIG_CMDLINE_TAG 1

lib_arm/armlinux.c에서 정의된 함수:setupmemory_tags  setup_comandline_tag
마지막lib 통과arm/armlinux.c의dobootm_linux 함수로 핵을 시작합니다.최종 통과
theKernel(0,bi->bi_arch_number,bd->bi_boot_params)

내핵을 호출하다.bi->bi_arch_number는 기계 ID입니다.bd->biboot_params는 태그 목록 tag lists의 시작 주소입니다.
========================================6, U-boot을 이식할 때 일반적으로 선택하는 board의 SoC는 이미bootloader가 지원한다.주로 고려해야 할 외곽 부품과 SoC의 인터페이스 특징, 예를 들어 1. 메모리 SDRAM2, NandFlash,NorFlash3, 네트워크 카드 4, LCD(bootloader 단계의 LCD를 지원하려면) 5, USB

좋은 웹페이지 즐겨찾기