Mức độ hack của mâm xôi pi


35

Tôi đã làm việc với các hệ thống nhúng (chủ yếu là bộ điều khiển vi mô) trong khoảng 3 năm. Tôi muốn biết bao nhiêu RPi của nguồn mở thực sự ?? Tôi biết arduino cung cấp cho chúng tôi chi tiết đầy đủ về phần cứng / phần mềm, v.v ... Nhưng còn RPi thì sao? Điều này rất quan trọng vì nhóm của tôi và tôi muốn làm như sau với raspberry pi [dự án này dự định sử dụng RPi chính xác như arduino => không có hệ điều hành]:

  1. Viết lại bộ tải khởi động chính (ROM) để khởi động từ flash chứ không phải thẻ SD bên ngoài.
  2. Có bộ tải khởi động thứ cấp trong đèn flash trên bo mạch, điều này kích hoạt cổng usb của pi và lắng nghe nó. Nó phải chấp nhận mã nhị phân (mà nó sẽ nhận được từ PC của tôi) và lưu nó vào flash. sau đó bắt đầu thực hiện nó
  3. Phát triển trình điều khiển thiết bị của chúng ta để xử lý các giao thức truyền thông.
  4. Phát triển môi trường tải lên và gỡ lỗi của riêng chúng tôi cho PI, cùng với việc triển khai tùy chỉnh C nhúng cho ARM (cần thiết để kiểm soát GPIO, v.v.).
  5. Thực hiện hệ điều hành riêng của chúng tôi cho các hệ thống nhúng nếu có thể.

Điều này có thể với Pi mâm xôi? Nếu không:
-> Mục tiêu nào trong năm mục tiêu của tôi là không thể với raspberry pi. Tôi phải thực hiện những thay đổi nào cho dự án của mình nếu tôi phải làm việc với PI?
-> Những bảng khác có trên thị trường sẽ cho phép tôi hoàn thành chính xác những gì tôi muốn?

Câu trả lời:


76

Một số nền tảng

Điều quan trọng nhất bạn nên biết là RaspberryPi là một con quái vật kỳ lạ trong đó ARM CPUCPU không phải là CPU chính - nó chỉ là một bộ đồng xử lý cho VideoCore GPU. Khi RaspberryPi khởi động, một blob GPU được đọc từ thẻ SD đến bộ đệm L2 và được thực thi. Mã này sau đó đưa lên tất cả các thiết bị ngoại vi quan trọng (RAM, đồng hồ, v.v.) và bắt đầu ARM CPU. Sau đó, bộ tải khởi động giai đoạn 2 hoặc một số hệ điều hành có thể được chạy trên đó ARM CPU.

GPU blob không chỉ là một bộ tải khởi động. Đó thực sự là một hệ điều hành (Video Core OS). Một số yếu tố quan trọng của hệ thống không thể truy cập trực tiếp bằng CPU ARM và nó phải liên lạc với GPU(sử dụng mailboxhệ thống nhắn tin) để sử dụng chúng. Có một phần tài liệu về điều này có sẵn. Bây giờ Video Core OS( VCOS) được nhân viên Broadcom mở rộng theo thời gian để kích hoạt các tính năng cần thiết cho Linuxkernel RISC OShoặc đôi khi là một số HĐH sở thích. Không có tài liệu tốt về điều này tuy nhiên, bạn sẽ phải khai thác trong RaspberryPi forum,githubvà có thể những nơi khác để tìm thông tin về điều này. Nhưng nó ở đó .. ở đâu đó. Và có một vài người viết mã kim loại trần hoặc thậm chí các hệ điều hành của họ trên RaspberryPi để giúp bạn. Và dĩ nhiên, rất nhiều mã nguồn mở - hạt nhân Linux của RasbperryPi's chẳng hạn.

VideoCore là độc quyền, không có tài liệu chính thức và công cụ phát triển. Vì vậy, trừ khi bạn muốn nỗ lực nhiều, bạn không thể viết lại VCOSbằng mã của riêng bạn. Tuy nhiên, có một số nỗ lực để thiết kế đảo ngược Video Core, bạn có thể tìm thấy một số thông tin ở đây .

Một vấn đề khác là USBngăn xếp của Synopsys là độc quyền và một lần nữa không có tài liệu nào cho nó và dường như ngay cả với tài liệu cũng khó thực hiện nó một cách đáng tin cậy. Nhưng một lần nữa, mã có sẵn (nhân Linux, u-boot, CSUD ). Việc sử dụng các khả năng đồ họa nâng cao Video Corecũng có thể khó khăn - có một số mã nguồn mở cho các thư viện đồ họa, nhưng nó chỉ dành cho ARMphụ.

Điều đó đang được nói, có thể làm cho RISC OScổng từ thông tin có sẵn (đối với tôi không hoàn toàn rõ ràng nếu họ chỉ sử dụng thông tin có thể truy cập công khai), một số người đang viết lại (độc lập với Broadcom) nhân Linux cho tuyến chính, ở đó là một FreeBSDcổng, 'U-boot` và các cổng khác. Vì vậy, chắc chắn có thể viết hệ điều hành của riêng bạn. Nó không dễ dàng như nó có thể được.

Mục tiêu của bạn

Số 1

Theo như tôi biết, không có cách nào mà SoC có thể bắt đầu theo một cách khác ngoài cách được mô tả. Vì vậy, bootloader giai đoạn đầu tiên phải được bật SD card. Và nó phải là một GPUnhị phân, không phải là ARMnhị phân mà là một vấn đề khác. Và không có đèn flash trên tàu trong RaspberryPi cũng là một vấn đề.

Số 2

Vấn đề chính là không có trên tàu flashtrên RaspberryPi. Bạn có thể thêm một cái và nó có thể được kích hoạt trong bộ tải khởi động của bạn (cái này phải là bộ nạp khởi động giai đoạn 2 rồi). Tuy nhiên, việc viết trình điều khiển USB có thể có vấn đề.

Số 3, 4, 5

Đây không phải là một vấn đề. Hầu hết các thiết bị ngoại vi (ít nhất là những thiết bị có thể truy cập được ARM) được ghi lại ở đây . Bộ tải khởi động hiện tại làm cho việc này thậm chí còn dễ dàng hơn vì bạn đã cấu hình SoC hoàn toàn. Bạn có thể xem ở đâyở đây cho một số mã và tài liệu.

Lựa chọn thay thế

Tôi không biết bất kỳ bảng nào khác tốt như RaspberryPi, vì vậy thật khó để đề xuất một cái gì đó nhưng bạn có thể xem một số dự án trưởng thành như Beagleboard / Beaglebone / Pandaboard dựa trên OMAP hoặc bạn có thể theo dõi sự phát triển của một số bảng mới như Allwinner Bảng mạch hoặc PCduino . Tất cả phụ thuộc vào chính xác những gì bạn muốn thực hiện.


3
Tôi muốn +100 câu trả lời này. Làm tốt.
orithena

@maligree lol, đừng lo lắng - nó đã được thực hiện! :)
xxmbabanexx

1
+1 cho Bizablebone vì nó là nguồn mở 100% và bạn có khả năng "hô hấp" phần cứng và tạo bảng mạch của riêng bạn
portforwardpodcast

5

Để cập nhật câu trả lời tuyệt vời của Krzysztof, Broadcom cuối cùng đã phát hành công khai một số mã, được cấp phép là BSD 3 khoản, để hỗ trợ việc tạo trình điều khiển GPU nguồn mở. Nỗ lực "rpi-open-firmware" để thay thế blob firmware Raspberry Pi VPU bắt đầu vào năm 2016: https://github.com/christinaa/rpi-open-firmware . Xem thêm tại https://news.ycombinator.com/item?id=11703842

Có một số bảng thay thế được mô tả ngắn gọn và được liên kết từ RaspberryPi - Debian Wiki , bao gồm ODROID-C1, Cubieboard, Banana Pi, OLimexuxinno Wifi và OlinuxIno Mini, EOMA68 và Beaglebone màu đen.


Cá nhân, tôi nghĩ rằng các giải pháp thay thế không tuyệt vời lắm, rất nhiều bảng ODROID thực thi kiểm tra chữ ký trên bộ tải khởi động và ngăn bạn chạy mã của riêng bạn trên chúng. Họ TI OMAP3 tồn tại chế độ bảo mật trước khi gọi mã của bạn cũng giới hạn những gì bạn có thể làm với nó. VPU trên RPi thực sự khá đẹp, tôi nghĩ đó là thứ mang lại lợi thế cho các bảng khác và bây giờ chúng tôi có một công cụ tốt cho nó, mọi thứ đang rất tốt.
Kristina Brooks

1

Thực sự có khá nhiều thứ bạn có thể làm với bộ tải khởi động U-boot với Raspberry Pi. Về cơ bản, bạn chỉ cần để GPU tải bộ đồng xử lý ARM SoC của bạn với hình ảnh U-boot là "HĐH".

Tôi thấy bài viết này là hữu ích như một ví dụ. Tôi chưa làm điều đó (nhưng), nhưng tôi dự định. Tôi tình cờ tìm thấy câu hỏi của bạn trong khi tôi đang tìm cách tự làm điều này, và sau đó tôi tìm thấy bài báo và có vẻ như nó có thể hữu ích cho những người khác đang tìm kiếm tương tự.

một bài viết khác chứa các hướng dẫn mở rộng hơn để xây dựng hình ảnh U-boot.


1
Đây là loại câu trả lời có thể hữu ích ngay từ đầu, nhưng sau một vài năm liên kết ngừng hoạt động và không có một gợi ý nào về nội dung của chúng. Xem xét ít nhất là cho biết nhánh U-boot nào và trình biên dịch nào bạn đã sử dụng.
Dmitry Grigoryev

Cảm ơn Dmitry. Tôi sẽ quay lại vấn đề này sớm và sửa chữa nó khi tôi có thời gian.
Alan Mimms
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.