라즈베리 파이의 해킹 수준


35

저는 약 3 년 동안 임베디드 시스템 (대부분 마이크로 컨트롤러)을 사용해 왔습니다. 실제로 오픈 소스의 RPi가 얼마나되는지 알고 싶습니까? arduino가 하드웨어 / 소프트웨어 등에 대한 완전한 세부 정보를 제공한다는 것을 알고 있습니다. 그러나 RPi는 어떻습니까? 이것은 우리 팀 이후로 중요하며 라즈베리 파이로 다음을 수행하고 싶습니다.

  1. 외부 SD 카드가 아닌 플래시에서 부팅하도록 기본 부트 로더 (ROM)를 다시 작성하십시오.
  2. 온보드 플래시에 보조 부트 로더가 있으면 pi의 USB 포트가 활성화되고 청취됩니다. 이진 코드 (내 PC에서 가져 오는 코드)를 수락하고 플래시에 저장해야합니다. 나중에 실행을 시작하십시오.
  3. 통신 프로토콜을 처리하기 위해 자체 장치 드라이버를 개발하십시오.
  4. ARM 용 임베디드 C의 맞춤형 구현 (GPIO 등을 제어하는 ​​데 필요함)과 함께 PI 용 자체 업 로더 및 디버그 환경을 개발하십시오.
  5. 가능한 경우 임베디드 시스템을위한 자체 OS를 구현하십시오.

라즈베리 파이로 가능합니까? 그렇지 않은 경우 :
-> 라즈베리 파이로는 불가능한 다섯 가지 목표 중 하나입니다. PI로 작업해야하는 경우 프로젝트를 어떻게 변경해야합니까?
-> 시장에 내가 원하는 것을 정확하게 달성 할 수있는 다른 보드가 있습니까?

답변:


76

일부 배경

당신이 알아야 할 가장 중요한 것은 RaspberryPi가 ARM CPU메인 CPU가 아닌 이상한 짐승 이라는 것 VideoCore GPU입니다. RaspberryPi가 시작되면 GPU Blob을 SD 카드에서 L2 캐시로 읽고 실행합니다. 그런 다음이 코드는 모든 중요한 주변 장치 (RAM, 시계 등)를 표시하고를 시작합니다 ARM CPU. 그런 다음 2 단계 부트 로더 또는 일부 운영 체제 자체를 실행할 수 있습니다 ARM CPU.

GPU Blob은 부트 로더가 아닙니다. 실제로는 운영 체제 (Video Core OS) 자체입니다. 시스템의 일부 중요한 요소는 ARM CPU에서 직접 액세스 할 수 없으며이를 GPU사용하려면 ( mailbox메시징 시스템을 사용하여) 통신 해야합니다. 이에 대한 부분적인 문서 가 있습니다. 이제 Broadcom 직원은 커널 ( 또는 때로는 일부 취미 OS)에 필요한 기능을 사용할 수 있도록 Video Core OS( VCOS)를 수시로 확장 합니다. 그러나 이것에 대한 좋은 문서는 없습니다 .LinuxRISC OSRaspberryPi forumgithub그리고 아마도 이것에 관한 정보를 찾을 수있는 다른 장소들. 그러나 거기에 .. 어딘가에. 그리고 RaspberryPi에서 자체 베어 메탈 코드 또는 OS를 작성하여 도움을주는 사람들도 있습니다. 물론 많은 오픈 소스 코드-RasbperryPi의 Linux 커널 등이 있습니다.

VideoCore는 독점적이며 공식 문서 및 개발 도구가 없습니다. 따라서 많은 노력을 기울이지 않으면 VCOS자신의 코드로 다시 작성할 수 없습니다 . 그러나 비디오 코어를 리버스 엔지니어링하려는 노력이 있지만 여기에서 몇 가지 정보를 찾을 수 있습니다 .

또 다른 문제는 USBSynopsys 의 스택이 독점적이며 다시 설명 할 문서가 없으며 문서를 사용해도 안정적으로 구현하기가 어렵다는 것입니다. 그러나 코드를 다시 사용할 수 있습니다 (Linux 커널, u-boot, CSUD ). 의 고급 그래픽 기능을 사용하는 Video Core것도 어려울 수 있습니다 . 그래픽 라이브러리를위한 오픈 소스 코드 가 있지만 이는 ARM편입니다.

RISC OS, 정보 에서 포트 를 사용 가능하게 만들 수 있었지만 (공개적으로 액세스 가능한 정보 만 사용하는 경우 완전히 명확하지는 않지만) 일부 사람들은 Mainline을 위해 Linux 커널을 (Broadcom과 독립적으로) 재 작성하고 있습니다. A는 FreeBSD포트, 'U-boot` 등. 따라서 자신의 OS를 작성할 수 있습니다. 가능한 한 쉽지는 않습니다.

당신의 목표

1 번

내가 아는 한, SoC가 설명 된 것과 다른 방식으로 시작할 수있는 방법은 없습니다. 따라서 1 단계 부트 로더가 켜져 있어야합니다 SD card. 또 다른 문제인 이진이 GPU아니라 이진 이어야합니다 ARM. 그리고 RaspberryPi에는 온보드 플래시가 없으며 이는 또한 문제입니다.

2 번

주요 문제는 flashRaspberryPi에 온보드가 없다는 것입니다 . 하나를 추가하면 부트 로더에서 활성화 될 수 있습니다 (이미 2 단계 부트 로더 여야 함). 그러나 USB 드라이버 작성은 문제가 될 수 있습니다.

3, 4, 5 번

이것은 큰 문제가되지 않습니다. 대부분의 주변 장치 (적어도에 액세스 할 수있는 주변 장치 ARM)가 여기 에 문서화되어 있습니다 . 기존 부트 로더를 사용하면 SoC를 완전히 구성 할 수 있으므로이 작업이 훨씬 쉬워집니다. 당신은 볼 수 여기여기에 일부 코드 및 문서에 대한.

대안

나는 RaspberryPi만큼 좋은 다른 보드를 모르기 때문에 무언가를 추천하기는 어렵지만 OMAP 기반 Beagleboard / Beaglebone / Pandaboard 와 같은 성숙한 프로젝트를 보거나 Allwinner 기반과 같은 새로운 보드의 개발을 따를 수 있습니다 Cubieboard 또는 PCduino . 그것은 모두 정확히 당신이 달성하고자하는 것에 달려 있습니다.


3
이 답변을 +100하고 싶습니다. 잘 했어.
orithena

@maligree lol, 걱정하지 마십시오-이미 완료되었습니다! :)
xxmbabanexx

1
Beablebone +1는 100 % 오픈 소스이기 때문에 당신은 하드웨어 '리 스핀 "할 수있는 능력을 가지고 자신의 회로 기판을 할
portforwardpodcast

5

Krzysztof의 훌륭한 답변을 업데이트하기 위해 Broadcom은 마침내 오픈 소스 GPU 드라이버를 만드는 데 도움이되는 3-Clause BSD로 라이센스 된 일부 코드를 공개했습니다. 다음 "RPI-오픈 펌웨어"노력은 2016 년 시작 라즈베리 파이 VPU 펌웨어 덩어리 교체 https://github.com/christinaa/rpi-open-firmware을 . https://news.ycombinator.com/item?id=11703842 에서 자세히 알아보십시오.

ODROID-C1, Cubieboard, Banana Pi, Olimex의 OLinuxIno Wifi 및 OlinuxIno Mini, EOMA68 및 Beaglebone black을 포함하여 RaspberryPi-Debian Wiki 에서 간략하게 설명하고 연결된 여러 가지 대체 보드가 있습니다.


개인적으로 대안이 그리 좋지 않다고 생각합니다. 많은 ODROID 보드가 부트 로더에서 서명 검사를 시행하고 자신의 코드를 실행하지 못하게합니다. TI OMAP3 제품군은 코드를 호출하기 전에 보안 모드를 유지하므로 코드로 수행 할 수있는 작업이 제한됩니다. RPi의 VPU는 실제로 매우 훌륭합니다. 다른 보드보다 우위에 있다고 생각합니다. 이제 멋진 툴체인이 생겼으며 상황이 좋아 보입니다.
Kristina Brooks

1

실제로 Raspberry Pi를 사용하는 U-boot 부트 로더로 할 수있는 작업이 많이 있습니다. 기본적으로 GPU는 U- 부트 이미지를 "OS"로하여 ARM 보조 프로세서 SoC를로드하게합니다.

이 기사 가 예제로 도움 되었다는 것을 알았습니다 . 나는 (아직) 그것을하지 않았지만, 나는 계획하고있다. 나는 이것을 직접 할 수있는 방법을 찾고있는 동안 귀하의 질문을 찾았습니다. 그리고 기사를 찾았고 비슷한 것을 찾는 다른 사람들에게 도움이 될 것 같습니다.

거기에 다른 기사 U 자 부트 이미지를 구축하기위한 더 광범위한 지침이 포함되어 있습니다.


1
이것은 처음에는 유용 ​​할 수있는 일종의 답변이지만 몇 년 후에는 링크가 작동을 멈추고 그 내용이 무엇인지에 대한 힌트가 하나도 없습니다. 최소한 어떤 U-boot 브랜치와 어떤 컴파일러를 사용했는지 말하십시오.
Dmitry Grigoryev

감사합니다 Dmitry. 나는 곧 이것으로 돌아와서 시간이 있으면 고칠 것이다.
Alan Mimms
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.