Chạy bzImage trong QEMU: Không thể gắn kết fs gốc trên khối không xác định (0.0)


8

Tôi biên dịch kernel bằng cách làm make menuconfigmake. Tôi đã cố chạy bzImage trong qemu, bằng cách thực hiện qemu -kernel bzImagenhưng nó không hoạt động với thông báo lỗi:

Unable to mount root fs on unknown-block(0.0)

Lỗi nhân Linux

Làm thế nào tôi có thể sửa chữa nó? Làm cách nào tôi có thể chạy bzImage trong qemu?


5
Nhân khởi động tốt, nhưng nó không thể tìm thấy hệ thống tập tin gốc. Những đĩa nào bạn đã gắn trong VM? Loại hệ thống tập tin nào là hệ thống tập tin gốc, loại đĩa nào? Có phải tất cả các trình điều khiển cần thiết được biên dịch trong kernel (quên một trong các trình điều khiển là một lỗi phổ biến)?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles Tôi không gắn kết một hệ thống tập tin. Sau khi biên dịch, tôi đi thẳng vào tệp có bzImage (../arch/x86/boot) và thực hiện lệnh "qemu -kernel bzImage". đó là khi tôi gặp lỗi
Coder404

Câu trả lời:


11

Nó đã làm việc ra. Nhân khởi động tốt. Lỗi là:

Không thể gắn kết fs gốc trên khối không xác định (0.0)

Nhân đang tìm kiếm một hệ thống tập tin gốc. Bạn cần cung cấp một cái. Bạn không thể tương tác với kernel mà không chạy các tiến trình trên nó và quá trình ban đầu phải được tải từ đâu đó: khi kernel khởi động, nó sẽ gắn một hệ thống tập tin (hệ thống tập tin gốc) vào thư mục /, sau đó chạy chương trình /sbin/init. Chương trình init thường phụ trách chạy các kịch bản khởi động và khởi động các dịch vụ bao gồm các chương trình cho phép người dùng đăng nhập.

Bạn phải chắc chắn rằng kernel có thể gắn kết hệ thống tập tin gốc. Nó phải có trình điều khiển cho loại hệ thống tập tin và cho tất cả các lớp liên quan đến thiết bị khối (bộ điều khiển đĩa (bộ điều hợp SCSI / SATA / IDE / USB /,), loại phân vùng, v.v.).

Linux cung cấp một khả năng bổ sung, đó là tải một hệ thống tệp ban đầu vào RAM được sử dụng trong quá trình khởi động để xác định vị trí và gắn kết hệ thống tệp gốc. Hệ thống tệp ban đầu này có thể chứa các mô đun xử lý loại thiết bị và hệ thống tệp của hệ thống tệp gốc. Có hai cơ chế hơi khác nhau: initrd và initramfs.


Cảm ơn câu trả lời! Tôi có thể tạo một hệ thống tập tin ảo để khởi động không? Nếu vậy làm thế nào tôi sẽ làm điều đó?
Coder404

@ Coder404 Bạn có nghĩa là một hệ thống tập tin ảo để sử dụng làm hệ thống tập tin gốc? Làm cho nó một ổ đĩa ram.
Gilles 'SO- ngừng trở nên xấu xa'

Tôi muốn sử dụng một hệ thống tệp ảo làm hệ thống tệp gốc cho kernel mà tôi đang xây dựng trong QEMU. Làm thế nào tôi có thể làm cho hệ thống tập tin ảo?
Coder404

1

Mặc dù các sytem tệp sẽ được biên dịch một mình kernel, một sytem tệp ban đầu phải được tạo sẽ có trong RAM để chạy kernel. Để thực hiện hệ thống tập tin ram inital này, mkinitrd được sử dụng. Trong ubfox mkinitramfs được sử dụng thay vì đó

cd ~ / linux / linux-2.6.32.59 / arch / i386 / boot

mkinitramfs -o initrd.img-2.6.32.59

sau đó chạy kernel trên qemu

qemu-system-i386 -kernel bzImage -initrd initrd.img-2.6.32.59 -m 512M

-initrd đại diện cho hệ thống tập tin ram ban đầu

bạn có thể tìm thấy hệ thống tệp ram trong /boot/initramfs-linux.img

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.