u-boot 학습(二): u-boot 간략 분석
4069 단어 uboot 학습
u-boot-1.1.6의 경우 다음과 같이 디렉토리 구조를 분석합니다.
1. 플랫폼 관련 또는 개발판 관련 디렉터리:board,cpu,lib유사 i386
2. 일반 함수의 디렉토리:include,libgeneric、common
3. 일반적인 장치 드라이버:disk,drivers,dtt,fs,nandspl、net、post、rtc
4, u-boot 도구, 예제 프로그램, 문서:doc, example, tools
u-boot 최상위 디렉토리 설명
카탈로그 특성 설명은board 개발판과 서로 다른 설정에 대응하는 회로판(CPU가 같아도), 예를 들어 smdk2410 등 cpu 플랫폼과 관련된 서로 다른 CPU는예컨대arm920t,i386 등.lib_i386 플랫폼 관련 어떤 구조에서 통용되는 파일인include 통용 함수 헤더 파일과 개발판 프로필, 개발판의 프로필은include/configs 디렉터리에libgeneric 유니버설 함수는 유니버설 라이브러리 함수, 예를 들어 printf 등common 유니버설 함수 유니버설 함수,주로 다음 층 드라이버에 대한 추가 봉인disk 유니버설 드라이버 하드디스크 인터페이스 프로그램drivers 유니버설 드라이버 각종 구체적인 장치 드라이버 dtt 유니버설 드라이버 디지털 온도 측정 또는 센서 드라이버 fs범용 장치 드라이버 파일 시스템 nandspl 일반 장치 드라이버 u-boot은 일반적으로 ROM, NORFLASH 등의 장치에서 시작합니다.지금부터 NAND Flash 시작 net 유니버설 장치 드라이버 각종 네트워크 프로토콜post 유니버설 장치 드라이버문서 example 예시 프로그램 개발, 사용 일부 테스트 프로그램, u-boot 다운로드 후 tools 도구를 실행하여 S-Record, u-boot 포맷 이미지를 만드는 도구, 예를 들어 mkimage
위 표에서 u-boot 디렉터리의 분석을 통해 u-boot의 일부 특성을 알 수 있다. 예를 들어 리눅스, Vxworks 등 다양한 삽입식 운영체제의 핵을 지원한다.PowerPC, ARM, x86 등 여러 프로세서 제품군을 지원합니다.직렬 포트, SDRAM, Flash, 이더넷 등 다양한 장치 구동 소스;NFS 마운트, RAMDISK 형식의 루트 파일 시스템을 지원하며 Flash에서 압축 또는 비압축 시스템 커널을 부트합니다.타겟보드 환경 변수는 Flash와 같은 다양한 저장 방식을 지원합니다.CRC32 체크, 전원 자동 감지 기능 등
u-boot의 각 디렉터리 간에도 차원 구조가 있는데 이식 과정에서 우리가 어떤 파일을 수정해야 하는지에 대한 정보를 제공할 수 있다. 아래 그림에서 알 수 있듯이 board, cpu,lib 만 수정하면 된다.xxx 디렉터리에 있는 파일은 이식 과정을 완성할 수 있으며 다른 명령 등을 추가하려면 다른 파일을 수정해야 합니다.
lib_generic common
post net fs disk
dtt nand_spl rtc drivers
board cpu lib_xxx
(2) 설정
이전 u-boot 개요에서 u-boot을 구성할 때 사용한 명령:make 100ask24x0config 명령
100ask24x0_config: unconfig @$(MKCONFIG)$(@: config=)armarm920t 100ask24x0 NULLs3c24x0 이 규칙은: 100ask24x0config: unconfig mkconfig 100ask24x0 armarm920t 100ask24x0 NULLs3c24x0 따라서 구성 프로세스, 루트 디렉토리에 있는 mkconfig 파일을 분석하여 구성 프로세스, 어떤 작업을 했는지 파악할 수 있습니다.
요약 구성의 역할은 다음과 같다. 1. 개발판 이름 BOARDNAME은 $1과 같습니다.
2. 플랫폼/개발판과 관련된 헤더 파일을 만드는 링크는 다음과 같습니다. ln-s asm-$2 asm ln -s arch-$6 asm-$2/arch ln -s proc-armv asm-$2/proc 3, 최상위 Makefile에 포함된 파일include/config를 만듭니다.mk 4, 개발 보드 관련 헤더 파일 만들기 include/config.h
(3) 컴파일, 링크
기왕 컴파일하기 전에 반드시 위의 설정 과정을 거쳐야 한다면 설정 과정은 반드시 컴파일 과정에 어떤 것을 제공해야 한다. 그렇지 않으면 우리는 직접 컴파일하면 된다.그렇다면 상기 설정 과정에서 생성된 파일, 수정된 부분은 어떻게 컴파일 과정에서 나타날까.사실Makefile 파일에는 이 내용이 나와 있습니다.예:
include $(OBJTREE)/include/config.mk // include/config.mk
export ARCH CPU BOARD VENDOR SOC
include $(TOPDIR)/config.mk // config.mk
ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)
all: $(ALL)
$(obj)u-boot.hex: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $< $@
$(obj)u-boot.srec: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
$(obj)u-boot.img: $(obj)u-boot.bin
./tools/mkimage -A $(ARCH) -T firmware -C none \
-a $(TEXT_BASE) -e 0 \
-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
-d $< $@
$(obj)u-boot.dis: $(obj)u-boot
$(OBJDUMP) -d $< > $@
$(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
-Map u-boot.map -o u-boot
컴파일 프로세스 요약: 1. 컴파일 cpu/$(CPU)/start.S.
2. 그리고 플랫폼/개발판과 관련된 모든 디렉터리, 모든 유니버설 디렉터리에 각각의 Makefile을 사용하여 해당하는 라이브러리를 생성한다.
3. 1, 2단계를 생성한다.o、.a 파일은 board/$(BOARDDIR)/config를 따릅니다.mk 파일에 지정된 코드 세그먼트 시작 주소, board/$(BOARDDIR)/U-Boot.lds 링크 스크립트를 연결합니다.
4, 3단계에서 얻은 ELF 형식의 U-Boot은 다음에 Makefile에서 이진 형식인 S-Record 형식으로 변환됩니다.