2013-05-01 1 views
7

최근 임베디드 시스템과 임베디드 리눅스에 대해 공부하기 시작했습니다. 임베디드 시스템에서 운영 체제는 플래시 또는 ROM에 저장된다는 것을 알고 있습니다. 켜져 있으면 부트 로더가 운영 체제를 주 메모리에로드하고 "플래시 또는 ROM"이 SD 카드 인 Raspberry Pi를로드합니다.Raspberry Pi의 부트 로더는 어떻게 작동합니까?

나는 라스베리 파이를 찾고 있었기 때문에 하나를 연습하기를 원했기 때문에 나는 라즈베리 파이를 "부팅하는"개념에 대해 혼란스러워했습니다. 내 질문은 어떤 부트 로더가 Raspberry Pi를 사용하며 어떻게 동작 하는가? (커널 시작 전에 어떤 프로세스가 발생합니까? head.o? main.c? (커널 시작)

+0

잘 대답 : http : //raspberrypi.stackexchange.com/a/10490/34554 – opyate

+0

이 질문은 http://raspberrypi.stackexchange.com에 속해 있으며 (http://raspberrypi.stackexchange.com/questions/10489/how-does-raspberry-pi-boot) –

답변

13

이 프로세스는 설명되지 않았으므로 그물에서 찾는데 문제가 없었어야합니다.

라즈베리 파이에는 GPU와 ARM 프로세서, 두 개의 별도 프로세서가 있습니다. 먼저 GPU가 나오고, 칩 롬 또는 하드웨어를 통해 sd 카드를 읽고 bootcode.bin이라는 첫 번째 부팅 파일을 찾는 것으로 가정합니다. 그 GPU 부트 로더는 우리가 염려하는 한 문서화되지 않았고, 칩을 한 지점으로 가져오고 start.elf 또 다른 GPU 프로그램을로드합니다. 그 gpu 프로그램은 칩을 불러 와서 (ddr init) 마침내 ARM 응용 프로그램 (arm bootloader가 아니라 리눅스에서와 같은 응용 프로그램) 인 kernel.img를로드하고 램에 직접로드하여 일반 부트 로더가 할 일을 수행합니다 리눅스를 부팅하기 위해 팔을 준비하고 (일반적으로 거의 아무것도 아님) 팔을 장화하십시오.

전통적인 부트 로더는 프로세서가 하나 뿐이고 응용 프로그램/운영 체제도 실행하는 프로세서입니다. 이름은 redboot 및 uboot와 같지만 운영 체제 자체가 지나치게 복잡 해졌습니다. 리눅스를 부팅하고 숫양에 몇 개의 ATAG를 설치하고 몇 개의 레지스터를 설정하는 것은 거의 필요하지 않습니다. (물론 당신이 시스템/램 등을 가져 왔고 너무 많은 코드를 가지고 있지만, 어렵거나 어렵습니다. 예를 들어 ddr을위한 코드), 최신 리눅스는 설치하기에 더 많은 것들이 있지만 너무 많지는 않습니다.

라즈베리 파이 시작 기능은 이동식 비 휘발성 저장 장치 (sd 카드)의 기능뿐만 아니라 단순함이 우아합니다. ROM을 꺼내어 지우는 사전 부트 로더 날짜로 되돌아갑니다 , 그 고통의 일부가 있지만 그 주위에 방법이 있습니다. 지금까지 제 3 자의 복잡한 (uboot 등) 부트 로더를 사용할 수 있습니다. 이동식 플래시를 사용하면 부 풀린 부트 로더가 필요 없다는 것을 의미합니다. 깨진 응용 프로그램으로 시스템을 브릭킹하는 것에 대해 걱정할 필요가 없으며 간단히 플래시를 제거하고 변경하여 복구 할 수 있습니다. 부트 로더는 언더필 제거를 피하면서 프로그래밍이나 솔더링 부분이있는 보드상의 소켓을 사용하여 플래시 및 솔더를 솔더링하지 않도록하는 것을 피할 수 없었습니다.

현재 kernel.img (0x00000000에로드 된 한 지점)은 0x8000으로로드됩니다. 그리고 그것이 여러분이 알아야 할 모든 것입니다. 부트 로더와 함께 사용하는 일반적인 커널 이미지입니다. 그런 다음 바이너리의 시작 부분과 시작 지점으로 주소 0x8000에 연결하면 원하는 모든 베어 메탈 또는 기타 프로그램/응용 프로그램을 작성할 수 있습니다. 예외를 사용하려면 예외 테이블을 어떻게 든 작성해야합니다 (여러 가지 방법이 있습니다). 대안으로 레거시 모드 설정이 있습니다. config.txt 파일을 사용하여 구성 할 수 있으며 rpi 초기와 같이 kernel.img를 0x0000으로로드합니다. 개인적으로 나는 현재 기본값 인 0x8000으로 가고, 다른 베어 메탈 사람들은 다른 경로를 사용한다 ...

나는 매우 간단한 xmodem 부트 로더와 jtag 핀을 설정하여 jtag를 사용할 수있다. 귀하의 응용 프로그램을 개발할 때 SD 카드 춤을 수백에서 수천 번 씩). 네트워크가 작동 할 때까지 USB를 사용하는 것도 있습니다.

관련 문제