uboot 의 데이터 구조, 메모리 배분
4358 단어 uboot
u - boot 의 주요 기능 은 OS 를 유도 하 는 데 사용 되 지만 그 자체 도 강력 한 기능 을 제공 하여 명령 행 을 입력 하여 많은 작업 을 완성 할 수 있 습 니 다.그래서 그 자체 도 하나 예요. 매우 완 비 된 시스템.u - boot 의 대부분 조작 은 그 자체 의 데이터 구 조 를 중심 으로 하 는데 이런 데이터 구 조 는 통용 되 지만 서로 다른 판 에서 이 데 이 터 를 초기 화 하 는 것 은 다르다.그래서 u - boot 의 유 니 버 설 코드 는 이러한 중요 한 데이터 구조 에 의존한다.여기 서 말 하 는 데이터 구 조 는 사실 일부 전역 변수 이다.
1)gd 전역 데이터 변수 포인터, u - boot 실행 에 필요 한 전역 데 이 터 를 저장 합 니 다. 형식 정의:
typedef struct global_data {
bd_t *bd; //board data pointor
unsigned long flags; // , 。
unsigned long baudrate; //
unsigned long have_console; /* */
unsigned long reloc_off; /* , , 0 */
unsigned long env_addr; /* */
unsigned long env_valid; /* CRC */
unsigned long fb_base; /* base address of frame buffer */
#ifdef CONFIG_VFD
unsigned char vfd_type; /* display type */
#endif
void **jt; /* ,1.1.6 */
} gd_t;
2) bd, 판 데이터 포인터.판 자 는 매우 많은 중요 한 매개 변수 가 있다. 형식 정 의 는 다음 과 같 습 니 다.
typedef struct bd_info {
int bi_baudrate; /* */
unsigned long bi_ip_addr; /* IP */
unsigned char bi_enetaddr[6]; /* MAC */
struct environment_s *bi_env;
ulong bi_arch_number; /* unique id for this board */
ulong bi_boot_params; /* */
struct /* RAM */
{
ulong start;
ulong size;
}bi_dram[CONFIG_NR_DRAM_BANKS];
} bd_t;
3) 환경 변수 포인터 envt *env_ptr = (env_t *)(&environment[0]);(common/env_flash.c) env_ptr 는 환경 매개 변수 구역 을 가리 키 며 시스템 이 시 작 될 때 기본 적 인 환경 매개 변수 environment [] 를 common/environment. c 에 정의 합 니 다. 매개 변수 설명: bootdelay 는 자동 으로 시작 하 는 대기 초 수 를 정의 합 니 다. baudrate 는 직렬 콘 솔 의 포트 율 을 정의 합 니 다. netmask 는 이 더 넷 인터페이스의 마스크 를 정의 합 니 다. ethaddr 이 더 넷 인터페이스의 MAC 주 소 를 정의 합 니 다. bootfile 에서 부족 한 다운로드 파일 을 정의 합 니 다. bootargs 는 Linux 커 널 에 전달 되 는 명령 행 인 자 를 정의 합 니 다. bootcmd 는 자동 으로 시작 할 때 실행 되 는 명령 을 정의 합 니 다. server rip 정의 tftp 서버 쪽 IP 주소 ipaddr 로 컬 IP 주소 정의 stdin 정의 표준 입력 장치, 일반적으로 직렬 포트 stdout 정의 표준 출력 장치, 일반적으로 직렬 포트 stderr 정의 표준 오류 정보 출력 장치, 일반적으로 직렬 포트
4) 장치 관련:
표준 IO 장치 배열t *stdio_devices[] = { NULL, NULL, NULL }; 장치 목록 listt devlist = 0; device_t 의 정의: include\devices. h 중:
typedef struct {
int flags; /* Device flags: input/output/system */
int ext; /* Supported extensions */
char name[16]; /* Device name */
/* GENERAL functions */
int (*start) (void); /* To start the device */
int (*stop) (void); /* To stop the device */
/* */
void (*putc) (const char c); /* To put a char */
void (*puts) (const char *s); /* To put a string (accelerator) */
/* */
int (*tstc) (void); /* To test if a char is ready... */
int (*getc) (void); /* To get that char */
/* Other functions */
void *priv; /* Private extensions */
} device_t;
u - boot 는 콘 솔 입 출력 에 사용 할 수 있 는 장 치 를 장치 목록 devlist 에 추가 하고 현재 표준 IO 로 사용 되 는 장치 지침 을 stdio 에 추가 합 니 다.devices 배열 중.printf () 와 같은 표준 IO 함 수 를 호출 할 때 stdiodevices 배열 에 대응 하 는 장치 의 IO 함수 예 를 들 어 putc ().
5) 명령 과 관련 된 데이터 구조. 6) 구체 적 인 설비 와 관련 된 데이터 구조, 여 flashinfo_t flash_info[CFG_MAX_FLASH_BANKS];nor 플래시 메 시 지 를 기록 합 니 다. nand_info_t nand_info[CFG_MAX_NAND_DEVICE];nand 플래시 블록 장치 정보
2. uboot 재 포 지 셔 닝 후의 메모리 분포
smdk 2410 에 대해 RAM 범 위 는 0x 30000000 ~ 0x 34000000. u - boot 에서 고급 메모리 구역 을 점용 합 니 다.높 은 주소 에서 낮은 주소 로 메모리 할당 은 다음 과 같 습 니 다.
디 스 플레이 버퍼 (.bss_end~34000000)
uboot(bss,data,text) (33f00000~.bss_end)
heap(for malloc)
gd(global data)
bd(board data)
stack
·········
nor flash (0~2M)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
u - boot 2 단계 빗질 시작\ #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t * gd asm ("r8") 설명: register 를 통 해 레지스터 변 수 를 표시 하고, asm ("r8")...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.