전시 통신 플랫폼 uboot 시작 프로세스

1415 단어

프로세스 시작


1、 Stage1


start.S 코드 구조 u-boot의 stage1 코드는 보통 start.S 파일에서 어셈블리 언어를 사용하는 주요 기능은 다음과 같습니다.
(1) 엔트리 정의: 이 작업은 커넥터 스크립트를 수정하여 수행됩니다. 
(2) 예외 벡터(Exception Vector)를 설정합니다. 
(3) CPU의 속도, 시계 주파수와 단말기 제어 레지스터를 설정한다.
(4) 메모리 컨트롤러를 초기화합니다. 
(5) ROM의 프로그램을 RAM으로 복사합니다. 
(6) 스택을 초기화합니다. 
(7) 명령ldr pc를 사용하여 RAM으로 이동합니다.bl lowlevel_initarm926ejs에 있는 spl.c

2、Stage2


C 언어 코드 섹션libarm/board.c의 start armboot은 C 언어에서 시작하는 함수이자 전체 부트 코드에서 C 언어의 주 함수이며 전체 u-boot(armboot)의 주 함수입니다. 이 함수는 다음과 같은 작업을 수행하기만 하면 됩니다.
(1) 일련의 초기화 함수를 호출한다.
(2) Flash 장치를 초기화합니다. 
(3) 시스템 메모리 분배 함수를 초기화한다. 
(4) 대상 시스템에 낸드 디바이스가 있으면 낸드 디바이스를 초기화합니다. 
(5) 대상 시스템에 디스플레이 장치가 있으면 클래스를 초기화합니다.//LCM 
(6) 관련 네트워크 장치를 초기화하고 IP, MAC 주소 등을 기입한다. 
(7) 명령 순환(즉 전체 boot의 작업 순환)에 들어가 사용자가 직렬로 입력한 명령을 받고 해당하는 작업을 한다.
u-boot\arch\arm\cpu\armv7\start.S
.globl _start
_start: b reset
… …
jump_2_ram:
… …
_board_init_r_ofs:
.word board_init_r - _start    //   uboot/arch/arm/lib/ board.c  C                 C      ,  Stage2
u-boot\arch\arm\lib\board.c

1. 하드웨어 초기화

board_init_r() (u-boot15/arch/arm/board.c)
————>board_init()(sl8541e_1h10.c)
————>stdio_init()  
————>drv_lcd_init()  (common/lcd.c)

좋은 웹페이지 즐겨찾기