Tôi đang sử dụng máy tính, Dell OptiPlex 9010, đi kèm với phần mềm UEFI, nhưng không hỗ trợ khởi động từ các thiết bị NVMe PCI-Express.
Tôi đã giải quyết vấn đề này bằng cách sử dụng DUET để tạo phân vùng khởi động EFI trên thanh USB, có trình điều khiển NVMe mà nó tải, sau đó thực hiện chương trình khởi động EFI của hệ điều hành của tôi.
Các lệnh để làm điều này hiện đang được nhập bằng tay. Đây là quá trình:
- Máy tính bị tắt.
- Lắp thanh USB DUET của tôi vào cổng USB (tôi luôn luôn cắm nó vào)
- Bật máy tính
- (UEFI được cấu hình để luôn khởi động từ thanh USB đó trước và bỏ qua các bộ tải khởi động trong các ổ đĩa khác mà tôi đã cắm)
- Thanh USB DUET tải vỏ EFI (
EFI Shell version 2.31 [4.653]
) - (Các
map
lệnh hiển thị thanh USB DUET được tự động gắn tạifs0:
) - Tôi tải trình điều khiển NVMe:
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
- Tôi kích hoạt làm mới ánh xạ âm lượng với
map -r
, lệnh này hoàn thành thành công mà không có bất kỳ vấn đề. - (Khối lượng NVMe của tôi hiện được liệt kê, đôi khi là
fs1:
nhưng đôi khi cũng nhưfs0:
) - Tôi khởi động vào Windows bằng cách chạy:
fs1:\EFI\Boot\Bootx64.efi
- Màn hình khởi động của Windows xuất hiện và máy tính tiếp tục khởi động Windows
Tôi đã cố gắng tự động hóa điều này bằng cách đặt các lệnh bên trong một startup.nsh
tập lệnh (tương đương EFI của DOS ' autoexec.bat
).
Kịch bản của tôi là thế này:
echo Step 1
load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
echo Step 2
map -r
echo Step 3
fs0:
echo Step 4
fs0:\EFI\Boot\Bootx64.efi
echo Step 5
(Kịch bản này sử dụng fs0:
thay vì fs1:
bởi vì khi startup.nsh
chạy, ổ NVMe của tôi được ánh xạ lại fs0:
, nhưng khi tôi chạy các lệnh tương tác thay vì nó được ánh xạ tới fs1:
. Tôi không biết tại sao hoặc làm thế nào điều này xảy ra).
Khi tôi khởi động và để shell thực thi startup.nsh
Tôi nhận được kết quả này:
startup.nsh> Step 1
startup.nsh> load fs0:\EFI\Drivers\NvmExpressDxe-64.efi
load: Image fs0:\EFI\Drivers\NvmExpressDxe-64.efi loaded at D7C3F000 - Success
startup.nsh> Step 2
startup.nsh> map -r
Device mapping table
fs0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
fs1 :PciRoot(0x0)/Pci(0x1c,0x4)/...
blk0 :PciRoot(0x0)/Pci(0x1c,0x4)/...
...
Shell: Cannot read from file - No Media
Shell> _
Vậy khi nào map -r
được thực hiện từ bên trong startup.nsh
nó chạy, nhưng sau đó không thành công với lỗi "Không thể đọc từ tệp - Không có phương tiện" và sau đó nó hủy bỏ việc thực thi phần còn lại của tập lệnh (vì không có echo Step 3
đầu ra), tuy nhiên nếu tôi nhập bằng tay vào fs0:\EFI\Boot\Bootx64.efi
lệnh sau đó Windows tải tốt.
Tôi đã xem tài liệu của EFI Shell Commands và tôi không thấy bất kỳ lệnh nào như try
hoặc là on error resume next
hoặc là on error goto :label
- vì vậy kịch bản cam chịu thất bại.