Raspberry Pi sử dụng BIOS gì?


29

Tôi muốn tìm hiểu về BIOS trên bo mạch chủ Raspberry Pi. BIOS được gọi là gì? Nó có một tên cụ thể hay nó chỉ được gọi là BIOS trên Raspberry Pi?


2
BIOS lưu trữ một số phần mềm để điều khiển PC của bạn trước khi khởi động (ví dụ - thiết lập ổ cứng, bộ nhớ, v.v.). Pi không sử dụng "BIOS" như trong PC. Nó chỉ khởi tạo chip Broadcom (CPU, Cache, GPU) bằng phần mềm được viết cho chip đó và chuyển thẳng đến Hệ điều hành. Hệ điều hành sau đó phát hiện phần cứng và ram được báo cáo bởi Broadcom. Điều này làm cho việc khởi động thực sự nhanh chóng nhưng chỉ Broadcom biết cách gỡ lỗi hoặc "thiết lập" các thuộc tính một cách nhanh chóng.
Piotr Kula

Câu trả lời:


32

Phần sụn là mã độc quyền nguồn đóng được lập trình vào bộ xử lý SoC (System on a Chip), không thể sửa đổi. Khi bật nguồn, phần sụn sẽ khởi động bộ tải khởi động trên thẻ SD. Tôi không tin rằng bất kỳ dịch vụ nào khác được cung cấp thông qua phần mềm SoC, vì vậy nó không thực sự là một "BIOS" (Hệ thống đầu vào / đầu ra cơ bản) mỗi lần. Sau thời điểm này, mọi thứ khác đến từ thẻ SD.

Theo phần mềm của wiki , thứ tự khởi động như sau:

  1. Bộ tải khởi động giai đoạn đầu tiên - Điều này được sử dụng để gắn phân vùng khởi động FAT32 trên thẻ SD để có thể truy cập bộ tải khởi động giai đoạn thứ hai. Nó được lập trình vào chính SoC trong quá trình sản xuất RPi và người dùng không thể lập trình lại.
  2. Bộ tải khởi động giai đoạn hai (bootcode.bin) - Cái này được sử dụng để lấy phần sụn GPU từ thẻ SD, lập trình phần sụn, sau đó khởi động GPU.
  3. Phần sụn GPU (start.elf) - Sau khi được tải, điều này cho phép GPU khởi động CPU. Một tệp bổ sung, fixup.dat, được sử dụng để định cấu hình phân vùng SDRAM giữa GPU và CPU. Tại thời điểm này, CPU được giải phóng khỏi thiết lập lại và thực thi được chuyển qua.
  4. Mã người dùng - Đây có thể là một trong bất kỳ số nhị phân nào. Theo mặc định, nó là kernel Linux (thường được đặt tên là kernel.img), nhưng nó cũng có thể là một bộ tải khởi động khác (ví dụ: U-Boot) hoặc ứng dụng xương trần.

7
Tôi chỉ thêm rằng bộ tải khởi động giai đoạn 1 được ghi trên ROM nhỏ bên trong SoC. Như đã đề cập, trách nhiệm duy nhất là tải bootcode.bintừ thẻ SD. Đây là lý do tại sao không thể khởi động RaspberryPi từ phương tiện khác ngoài thẻ SD.
Krzysztof Adamski

@TevoD, câu trả lời hay! Tôi yêu các chi tiết kỹ lưỡng.
Devyn Collier Johnson

16

@TevoD gần như đúng trong những gì anh ấy đã viết trong câu trả lời của mình - RaspberryPi đang sử dụng nhị phân phần sụn nguồn đóng làm bộ tải khởi động. Phiên bản hiện tại có thể được tìm thấy ở đây . Hai tệp tạo ra phần sụn là bootcode.bin(bộ tải khởi động giai đoạn 2) và start.elf(phần sụn "GPU"). Điều thú vị và khá độc đáo với RaspberryPi là nó bắt đầu từ GPU(chip đồ họa) và đây là nơi bootloader thực sự chạy. GPUsau đó khởi động ARM CPUvà chạy kernel Linux.

Sau khi Linux được khởi động, mã trên GPUkhông được tải, tuy nhiên. Thay vào đó, nó chạy hệ điều hành đơn giản của riêng nó, được gọi là VCOS( Video Core Operating System). Nhân Linux giao tiếp với các dịch vụ của mình bằng cách sử dụng đặc biệt mailbox protocolvà sử dụng các ngắt (GPU có thể tạo ra các ngắt ARM). Bạn có thể đọc một số thông tin về giao thức hộp thư được sử dụng framebuffer ở đây . GPU không chỉ chịu trách nhiệm cho những thứ đồ họa - ví dụ, nó còn điều khiển đồng hồ và tạo ra âm thanh. Về vấn đề này, phần sụn GPU có thể được coi là một cái gì đó tương tự như BIOStừ các máy tính PC thông thường. Bạn có thể tìm thêm thông tin về việc đọc trình điều khiển hạt nhân RaspberryPi Linux này.

Bạn cũng có thể tìm thấy một số thông tin trong câu trả lời này .


Điểm tốt. Tôi đã xem xét câu hỏi BIOS để đề cập rõ ràng đến phần sụn trên bo mạch chứ không phải Thẻ SD và thêm thứ tự khởi động để có câu trả lời đầy đủ hơn. Bạn chắc chắn nhận nó từ đó. +1
Tevo D
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.