Tập lệnh trước khi hệ điều hành bắt đầu


1

Tôi cần chạy một kịch bản trước khi hệ điều hành khởi động. Kịch bản đọc một tệp văn bản (trên hệ thống tệp FAT32), nếu kết quả là "A", sau đó khởi chạy OS1, nếu không thì kết quả là "B", sau đó khởi chạy OS2 (hệ điều hành khác). Tôi nghĩ về Grub, nhưng tôi không biết làm thế nào nó có thể được thực hiện. Ngoài ra, tôi có thể sử dụng EFI Shell, nhưng trong phần sụn của máy tính của tôi không có EFI Shell. Làm thế nào tôi có thể làm được? Cảm ơn tất cả.


2
Chào mừng bạn đến với Siêu người dùng! Một câu hỏi thú vị, nhưng bạn đang cố gắng giải quyết vấn đề gì, nếu bạn không phiền tôi hỏi? Nếu đó là một cái gì đó cùng với "khởi động lại trong X / Y khi có sự can thiệp của người dùng / lập trình" thì có thể có những cách làm điều đó phụ thuộc vào thiết lập của bạn :)
bertieb

Khi hệ điều hành đang chạy, nó ghi tệp văn bản vào phân vùng FAT32 (thông qua tập lệnh), tùy thuộc vào sự kiện đã xảy ra hay chưa, giả sử nó ghi "A" hoặc "B" (cờ). Điều này có thể được thực hiện bởi tất cả các hệ điều hành được cài đặt trên máy. Nếu "A" được viết, thì trong lần khởi động lại tiếp theo (hoặc khi đánh lửa lại), OS1 phải khởi động, nếu thay vào đó "B" được viết, thì hệ điều hành khác phải khởi động, nói OS2 (không phải OS2 Warp :-)). Đó là tất cả. Quản lý nhất thiết phải là tiền khởi động
Luciano

1
@Luciano UEFI cung cấp tính năng này ngay lập tức. Với Linux, bạn phải chạy efibootmgr -n <number>(in số bằng cách chạy efibootmgr). Với Windows, bạn phải tự mình tìm ra, tôi chưa sử dụng nó.
gronostaj

Câu trả lời:


1

Bạn có thể tải xuống EFI Shell từ dự án TianoCore . Đây là một bản phát hành nguồn mở dựa trên việc triển khai Intel.

Tải xuống bản nhị phân đó, đặt vào Phân vùng hệ thống EFI và thêm mục khởi động UEFI. Cách dễ nhất để làm điều đó là sử dụng Linux: (với quyền root)

cd /efi/boot
wget https://github.com/tianocore/edk2/raw/master/ShellBinPkg/UefiShell/X64/Shell.efi
efibootmgr -c -p 1 -l shell.efi -L "EFI Shell"

Sau đó đặt tùy chọn khởi động mặc định thông qua giao diện cấu hình UEFI của bạn hoặc sử dụng efibootmgr:

efibootmgr -o $(efibootmgr | grep 'EFI Shell' | sed -r -e 's/^Boot0+//' -e 's/\*.*//')

Rất cám ơn, bây giờ tôi cố gắng. Tên của kịch bản cho tự động bắt đầu?
Luciano

@Luciano h17007.www1.hpe.com/docs/iss/proliant_uefi/UEFI_Edgeline_103117/ trộm
gronostaj

@Luciano .. Đối với đạn UEFI, tên làstartup.nsh
fpmurphy
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.