전시 통신 플랫폼 uboot 시작 프로세스
프로세스 시작
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_init
arm926ejs에 있는 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)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.