<2012 11 2> U-boot(2) U-boot 구조 분석 및 이식 중점
4158 단어 2012
주로 두 가지 작용이 있다. 첫째, 시스템 안내 핵을 초기화하는 것이다.
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를 찾을 수 있습니다 = 시작 파라미터
2. CPU는 R1의 ID와 R2가 표시하는
tag lists에 대한 정의는 원본 코드인clude/asm/setup을 재호출할 수 있습니다.h에서 # 설정 태그 ATAGCORE(bootloader와 커널에 약정된 매개 변수 저장 주소) #메모리 태그 설정(메모리 시작 주소 및 메모리 크기) #명령줄 태그 설정(커널의 일부 동작을 제어하는 문자열) #메모리 태그 설정ATAGNONE
-------------------------------------------------4 U-boot의 구성, 링크 분석 컴파일 1, 구성 명령:make
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 디렉터리에 새 개발판을 만들려면
# 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/
#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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문제의 진정한 원인 찾기: 20121021 서버 장애 처리 경험(당초 성능을 고려하여tempdb 데이터베이스 파일을 비RAID5의 독립 하드디스크에 놓았습니다.) 파일이 존재했지만 갑자기 이 하드디스크에 다른 폴더가 많이 보이지 않는 것을 발견했습니다.RAID5가 아닌 이 독립...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.