u-boot README
1. 디렉터리 구조
- board 보드의 독립된 파일
- common 하드웨어 아키텍처와 무관한 공통 기능
- cpu cpu 관련 파일
- disk 디스크 파티션 드라이브 관련
- doc 문서
- drivers 공통 장치 구동
- examples 루틴
- fs filesystem 관련 코드
- include 헤더 파일
- lib_xx 구체적인 하드웨어 구조와 관련된 라이브러리 파일
- net 네트워크 섹션 코드
- post 자동 감지
- rtc 실시간 클록 드라이브
- tools s-record 및 이미지 생성 도구
2. 구성 방법
판자와 관련된 구성 옵션은 "include/configs/
구체적인 구성 옵션은 나중에 자세히 살펴보겠습니다.
3. u-boot 컴파일 방법
1) 교차 컴파일링. 만약에arm과 관련된 판을 설정하면, 컴파일링할 때PATH의arm-linux-컴파일러를 자동으로 사용합니다.물론 맨 윗부분 Makefile에서 크로스를 통과할 수도 있고...COMPILE는 크로스오버 컴파일러(예: CROSS)를 지정합니다.COMPILE = arm-linux-
2) 구성, 위에서 설명한 대로 make nameconfig
3) 컴파일, make all
세 개의 파일이 생성됩니다.
u-boot.bin 순수 바이너리 파일
u-boot ELF 형식의 바이너리 파일
u-boot.srec Motorola S-Record 형식
기본 컴파일은 현재 디렉터리에서 다음 두 가지 방법으로build dir를 지정할 수 있습니다
make O=/tmp/builddir/distclean
make O=/tmp/build/ NAME_config
make O=/tmp/build/ all
또는 BUILD 직접 지정DIR 변수
export BUILD_DIR=/tmp/build
make distclean
make NAME_config
make all
4. 만약 u-boot가 당신의 보드를 지원하지 않는다면 u-boot에 추가해서 컴파일해야 합니다.단계는 다음과 같습니다.
1). top Makefile 및 MAKEALL 스크립트에 새 구성 옵션을 추가합니다.
2). board 디렉터리에서 최소한Makefile board가 포함된 자신의 보드의 디렉터리를 만듭니다.c flash.c u-boot.lds 파일
3). 새 include/configs/
4). 만약 당신의 판의 cpu가 u-boot에 지원되지 않는다면, 당신도 cpu 디렉터리에 새 cpu를 만들어야 합니다
5). 정상적인 컴파일 과정
5. 일반적인 u-boot 명령
이 부분은 제가 u-boot 버전을 이식한 후에 u-boot의 자주 사용하는 명령과 환경 파라미터 등을 자세히 보려고 합니다.이쪽은 건너가세요.
6. u-boot 형식에 대한 질문입니다.
위에서 u-boot을 컴파일할 때 3개의 u-boot 이미지 파일을 생성했습니다.
u-boot ELF 형식의 바이너리 파일
u-boot.bin 순수 바이너리 파일
u-boot.srec Motorola S-Record 형식
앞의 두 가지는 이해하기 쉽다.u-boot.srec는 Standalone Programs: 즉 u-boot 환경에서 실행할 수 있는 실행 프로그램입니다.프로그램이 실행된 후에 u-boot로 돌아갑니다.u-boot는 "standalone"프로그램을 동적으로 불러오고 실행하는 것을 지원합니다.이 프로그램들은 u-boot에서 제공하는 입출력 작업을 사용하거나 서비스를 중단할 수 있습니다.소스 코드의 examples/helloworld.c에서 u-boot을 컴파일할 때 자동으로 Hello 로 컴파일됩니다world.srec, 이런 standalone 프로그램.
7.linux 이미지 생성
u-boot는 전통적인 linux 핵 형식, 예를 들어zImage,bzImage를 지원하지 않습니다.uImage라는 형식을 사용합니다.생성 방법은 다음과 같습니다.
1) 표준 ELF 형식의 linux 커널, vmlinux 생성
2) vmlinux를 순수한 이진 형식인 linux로 바꿉니다.bin
3) 압축 바이너리 gzip -9 linux.bin
4) mkimage를 사용하여 linux.bin.gz uImage로 포장
Mkimage –A ppc –O linux –T kernel –C gzip –a 0 –e 0 –n “Linux kernel image” –d linux.bin.gz uImage
8. 학습 과정
README 파일에서 나온 이 코드는 u-boot을 사용하는 과정을 논술하였는데, 그래도 매우 재미있다.
int main(int argc, char *argv[])
{
sighandler_t no_more_time;
signal(SIGALRM, no_more_time);
alarm(PROJECT_DEADLINE - toSec (3 * WEEK));
if (available_money > available_manpower) {
Pay consultant to port U-Boot;
return 0;
}
Download latest U-Boot source;
Subscribe to u-boot mailing list;
if (clueless)
email("Hi, I am new to U-Boot, how do I get started?");
while (learning) {
Read the README file in the top level directory;
Read http://www.denx.de/twiki/bin/view/DULG/Manual;
Read applicable doc/*.README;
Read the source, Luke;
/* find . -name "*.[chS]" | xargs grep -i <keyword> */
}
if (available_money > toLocalCurrency ($2500))
Buy a BDI3000;
else
Add a lot of aggravation and time;
if (a similar board exists) { /* hopefully... */
cp -a board/<similar> board/<myboard>
cp include/configs/<similar>.h include/configs/<myboard>.h
} else {
Create your own board support subdirectory;
Create your own board include/configs/<myboard>.h file;
}
Edit new board/<myboard> files
Edit new include/configs/<myboard>.h
while (!accepted) {
while (!running) {
do {
Add / modify source code;
} until (compiles);
Debug;
if (clueless)
email("Hi, I am having problems...");
}
Send patch file to the U-Boot email list;
if (reasonable critiques)
Incorporate improvements from email list code review;
else
Defend code as written;
}
return 0;
}
void no_more_time (int sig)
{
hire_a_guru();
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.