Sử dụng UEFI Shell để khôi phục cấu hình khởi động


1

Tôi đang sử dụng một bảng nhúng hỗ trợ UEFI. Nó là một bo mạch mới và đi kèm với BIOS Megatrends của Mỹ và vỏ UEFI (Tôi quen với việc xử lý bộ nạp khởi động hơn và không phải là BIOS PC trên bảng nhúng).

Các chi tiết của hội đồng quản trị không quá quan trọng.

Điều quan trọng là trong các điều kiện nhất định (trong phần mềm trong khi ghi vào không gian PCI một cách không chính xác), chúng ta có thể chuyển khu vực khởi động trong Flash trên bo mạch.

Vì phần cứng này sẽ là một phần cứng TUYỆT VỜI, không có tùy chọn nào để đi ra ngoài đất liền, gắn vào USB và phản xạ lại thứ này.

Tôi muốn viết một kịch bản để làm cho BIOS Shell làm điều này. Nếu máy bị hos và chúng tôi đã làm hỏng bộ khởi động trên hệ thống được triển khai, tôi muốn tự động chạy một chuỗi khôi phục. Là loại điều này có thể? Tôi có thể làm điều đó với vỏ UEFI không? Đây có phải là có thể làm được không?

Bây giờ tôi hiểu UEFI được tạo ra để cung cấp khởi động 'an toàn', tôi có thể đang làm ngược lại với những gì nó dự định làm!


Dù sao tôi cũng không thấy việc này. Điều thú vị hơn là thực tế là chỉ cần truy cập vào không gian PCI có thể làm hỏng khu vực khởi động.
Ramhound

Vâng tôi biết ... đó là một trường hợp sử dụng - khu vực khởi động đã bị hỏng trong nhiều tình huống khác nhau, điều này đã làm tăng sự chú ý. Như vậy tự hỏi liệu có cách nào để khôi phục hệ thống ... một số loại khôi phục hệ thống nhúng. Tôi sẽ cần phải có một hình ảnh tốt và ghi đè lên MBR bằng cách nào đó và cách duy nhất tôi có thể nghĩ là làm cho bios khởi động kịch bản này bằng cách nào đó.
Xofo

Tôi không thấy một cách để làm điều đó thông qua một kết nối từ xa sẽ không luôn luôn xảy ra. Mà sẽ không thực sự làm việc tốt.
Ramhound

Tôi thực sự không cần một mạng, ngoài khả năng nếu tôi muốn gửi lệnh RESTORE bằng cách nào đó (một vấn đề khác) hoặc để có một tập lệnh cho biết nếu sau 3 lần khởi động thất bại, hãy khôi phục. Những suy nghĩ khác - Tôi nghĩ điều tôi muốn là bằng cách nào đó có được Bios để khôi phục khu vực khởi động từ một hình ảnh trên thiết bị lưu trữ dự phòng (có thể là một đèn flash khác). Có thể một cách khác là chỉ định một thiết bị có thể khởi động khác khiến thiết bị đầu tiên thất bại ... nhưng tôi vẫn muốn thực hiện khôi phục trên thiết bị đầu tiên ...
Xofo

Luke - Không có gì nhiều khi tôi viết vào không gian PCI một cách không chính xác, nó nhiều hơn để tôi tìm ra cách phá vỡ hệ thống và tôi muốn ngăn chặn điều đó. Vấn đề là (1) Ghi vào thiết bị PCI không có ở đó (2) Ghi vào Flash khi bảo vệ ghi phần cứng ở đó ... Tôi không hy vọng một trong hai điều này sẽ làm hỏng khu vực khởi động của Flash, nhưng nó đã làm. Do đó, khi hệ thống tìm kiếm thiết bị có thể khởi động tiếp theo (không có) và vỏ EFI xuất hiện (khi chúng tôi cắm vào màn hình ... vâng, nó có HDMI (hữu ích để gỡ lỗi, nhưng không được sử dụng ở trạng thái triển khai).
Xofo

Câu trả lời:


2

EFI không sử dụng khu vực khởi động của đĩa. Vì vậy, tôi nghi ngờ rằng bạn hiểu sai những gì đang xảy ra với hệ thống của bạn. Của tôi phỏng đoán là bạn thực sự làm hỏng các mục NVRAM giữ thứ tự khởi động cho thiết bị. Cách dễ nhất để giải quyết vấn đề này là không sử dụng các mục đó và thay vào đó hãy đặt tên cho trình tải khởi động EFI của bạn EFI/BOOT/bootx64.efi (hay nói chung hơn là boot{arch}.efi, Ở đâu {arch} là một mã kiến ​​trúc; x64 là mã kiến ​​trúc cho x86-64). Nếu bạn không muốn làm điều này vì một số lý do, nếu vỏ EFI của bạn là một phiên bản 2 vỏ, bạn có thể sử dụng bcfg lệnh trong tập lệnh shell EFI để thực hiện công việc. Lệnh này được ghi nhận ở các phạm vi khác nhau ở nhiều nơi, chẳng hạn như wiki Arch Linux Trang web của Intel. Thật không may, vỏ EFI phiên bản 1 cũ hơn không hỗ trợ bcfg lệnh, vì vậy tùy chọn này sẽ không hoạt động với nó, mặc dù có thể trích xuất mã có liên quan từ Mã nguồn TianoCore và tạo độc lập bcfg lệnh mà bạn có thể sử dụng với một vỏ cũ hơn.

Nếu bạn thực sự cần ghi vào MBR, thì viết ứng dụng EFI bằng C có thể là lựa chọn tốt hơn so với cố gắng thực hiện trong vỏ EFI. Có rất nhiều tài liệu lập trình EFI ngoài kia, nhưng hầu hết giống như các trang của Unix - nó giả định rằng bạn đã biết chủ đề và chỉ cần kiểm tra chi tiết. Tôi đã viết một giới thiệu hướng dẫn ngắn gọn, nhưng nó rất cơ bản và không bao gồm I / O đĩa. (Bạn có thể sử dụng mã đó và mã nguồn để gptsync, được bao gồm trong các phiên bản cặp đôi cuối cùng của rEFInd, mặc dù, để tìm hiểu cách đọc và ghi MBR của đĩa.)

Nếu tôi hiểu chính xác, bất cứ điều gì bạn làm (trừ khi sử dụng tên tệp dự phòng là đủ), bạn cần phải điều chỉnh nó phù hợp với trình tự khởi động bình thường. Điều này có thể xảy ra với chương trình shell EFI được khởi chạy làm mặc định hoặc là chương trình nhị phân; nhưng bạn sẽ phải chắc chắn rằng chương trình tùy chỉnh của bạn kết thúc bằng cách khởi chạy trình tải khởi động "thực" hoặc trình tải khởi động "thực" khởi chạy sau chương trình mới.


Điều này chủ yếu là hữu ích. Một vài làm rõ và một số thông tin.
Xofo

Nó có một AMT Bios. Thông thường các bo mạch này có UBoot hoặc VxWorks Bootloader (không phải PC Bios). Những gì tôi làm là viết bộ tải khởi động (VxWorks) vào flash bên trong, sắp xếp lại thứ tự khởi động trong bios để trỏ đến nó và sau đó chạy VxWorks. Vâng tất cả điều này hoạt động tốt - không có vấn đề. Tuy nhiên, có những lúc (chỉ là một ví dụ) khi chúng tôi cố gắng truy cập qua phần mềm thẻ PMC mà chúng tôi quên cắm và ZAP, hệ thống bị treo. Sau đó, khi khởi động lại, bộ tải khởi động VxWorks bị hỏng. Tôi muốn phục hồi khi tôi triển khai điều này chỉ trong trường hợp. Cảm ơn.
Xofo

Vì vậy, tôi muốn sử dụng EFI để RESTORE bộ tải khởi động VxWorks trong trường hợp bộ tải khởi động bị hỏng. Tôi cần một failafe cho trường hợp xấu nhất như vậy. Tôi nghĩ rằng bạn đã cho tôi một số ý tưởng.
Xofo

Cảm ơn bạn đã chỉ ra ông Rod Smith ... Tôi nghĩ rằng tôi có đủ để khám phá vấn đề này và cố gắng tìm cách giải quyết!
Xofo

Xem lại điều này 2 năm sau, tôi được khuyến khích để thấy rằng câu hỏi kỳ lạ này đã tạo ra hơn 3000 lượt xem.
Xofo
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.