Tôi đã gặp vấn đề tương tự và cuối cùng tôi đã làm việc này tối qua, trên OS X 10.8.5 với QEMU v2.2.0 , sau khi làm việc bật / tắt trong hai tuần.
Lời nói đầu
Tôi đã được nhắc nhở bởi câu hỏi, tôi có thể lập trình cho Arduino mà không cần có một bảng thực sự không? , để thử sử dụng một trình giả lập thực, chẳng hạn như QEMU , như được đề xuất bởi zmo , trong một bình luận cho câu trả lời của Anindo Ghosh .
Tôi nghĩ rằng tôi sẽ liên hệ kinh nghiệm của tôi ở đây.
Tôi thiết lập tính năng này trên MacBook Pro, chạy 10.8. (Sư tử núi). Tôi nhanh chóng tìm thấy liên kết Cài đặt QEMU trên OS X 1 . Vâng, tôi biết dường như có liên quan đến Pi, nhưng hãy chịu đựng tôi. Sau khi duyệt nhanh, rõ ràng những gì được yêu cầu.
Bước đầu tiên là thiết lập máy Mac với môi trường chính xác. Điều này là bắt buộc, theo thứ tự sau:
- Xcode;
- Công cụ dòng lệnh Xcode;
- homebrew;
- một trình biên dịch, và cuối cùng;
- chính qemu
Chi tiết
Đi sâu vào từng bước chi tiết
- Xcode - Tôi đã sử dụng 5.1, từ trang web của Apple [link?]
- Các công cụ dòng lệnh đã được tải xuống từ bên trong Xcode, từ Công cụ -> Tải xuống.
- Homebrew đã được cài đặt trong terminal, sử dụng lệnh sau
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Có một lần tải xuống thất bại lúc đầu, do mạng điện thoại Thái Lan bị rớt, đòi hỏi phải dọn dẹp lộn xộn. Nhưng chạy lệnh lại hoạt động.
- Sau đó
brew doctor
, lúc đầu phàn nàn rằng tôi có một hệ thống tệp phân biệt chữ hoa chữ thường, đã đưa ra một yêu cầu cho Quartz 2.7.7 , tôi đã cài đặt 2.7.4 rõ ràng. Cái này tôi tải về, khởi động lại, chạy
brew doctor
lại. Nó vẫn còn phàn nàn, nhưng lần này vì tôi đã cài đặt Quartz 2.6.3! Tôi đã từ bỏ tại thời điểm đó và di chuyển trên.
- Chọn bản dựng QEMU cần có hai lệnh này
cd /usr/local/ # Or wherever you installed Homebrew.
git checkout 2b7b4b3 Library/Formula/qemu.rb
- Sau đó cài đặt
gcc
, mà tôi còn lại để chạy khóa học của nó.
brew install https://raw.github.com/Homebrew/homebrew-dupes/master/apple-gcc42.rb
- Sau đó cài đặt
pkg-config
brew install pkg-config
- Và cuối cùng (!) QEMU
brew install qemu --env=std --cc=gcc-4.2
Thật không may , hướng dẫn của trang đó đã làm tôi thất bại vì các liên kết đến zImage
và rootfs
các tệp trên dropbox đã bị giết, do đăng ký quá nhiều, vì vậy tôi phải tìm một phương pháp khác. Tôi quyết định ngủ trên đó, vì bây giờ tôi đang bị kích thích.
Rồi sáng hôm sau, sau một giấc ngủ không sảng khoái, tôi tìm thấy liên kết, QEMU - Giả lập Raspberry Pi một cách dễ dàng (Linux hoặc Windows!) 1 , điều đó cho phép tôi tiếp tục từ nơi tôi rời đi.
- Tải xuống các hình ảnh PI từ trang tải xuống Raspberry PI
- Tải xuống kernel linux (cần có
brew install wget
trước):
wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu
- Xác minh chế độ mô phỏng có sẵn của qemu:
qemu-system-arm -cpu ?
- Khởi động đầu tiên
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda 2013-09-25-wheezy-raspbian.img
Điều này dẫn đến một chu kỳ lỗi SCSI,
ABORT, THIẾT BỊ THIẾT BỊ, THIẾT LẬP XE BUÝT, THIẾT LẬP HOST, sym0: Xe buýt SCSI đã được đặt lại, HOST RESET, thiết bị bị tắt
và v.v., đạp xe qua ID thiết bị SCSI ngày càng tăng, n , ( scsi 0:0:*n*:0
). n = {0, 1, 2 ... 6, 8, 9 ... 15} 7 đã bị bỏ qua vì có lẽ nó là bộ điều khiển máy chủ.
Nó sẽ quay vòng lên tới SCSI ID = 14,
với bảng điều khiển trong cửa sổ QEMU cuối cùng bị sập, tại SCSI ID = 15,
để lại lỗi sau trong thiết bị đầu cuối mà nó được chạy.
snowserv:local user$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda ~/Documents/PI\:Arduino/Lapdock/Raspberry\ PI\ Disk\ Images/2015-02-16-raspbian-wheezy.img
Uncompressing Linux... done, booting the kernel.
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf000f0)
pflash_write: Unimplemented flash cmd sequence (offset 00000000, wcycle 0x0 cmd 0x0 value 0xf0)
snowserv:local user$
Tôi đã thử cùng một lệnh có tiền tố sudo
, nhưng vấn đề tương tự đã xảy ra.
Tôi nghĩ rằng vấn đề là root=/dev/sda2
. Sao chép hình ảnh Raspbian cục bộ không có ích (nó đã nằm trên một phân vùng riêng). Nhìn vào các bình luận trên trang web, một số người đã nhận được các lỗi SCSI tương tự.
Nó dường như là một vấn đề với phiên bản của QEMU. Tôi đã sử dụng 1.1.50
qemu-system-arm --version
Sau một số thao tác và tìm kiếm, tôi đã tìm thấy phiên bản mới hơn, 2.2.0
Tôi đã kiểm tra fce79940eb
git checkout fce79940eb Library/Formula/qemu.rb
Bỏ liên kết phiên bản cũ hơn
brew unlink qemu
Cài đặt phiên bản kiểm tra mới
brew install qemu --env=std --cc=gcc-4.2
Và chạy lệnh khởi động đầu tiên
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda 2013-09-25-wheezy-raspbian.img
lần này dẫn đến dấu nhắc lệnh dự kiến.
Tôi đã chạy qua các chỉnh sửa được đề xuất /etc/ld.so.preload
và /etc/udev/rules.d/90-qemu.rules
, mà không có bất kỳ vấn đề nào phát sinh.
Tuy nhiên, tôi đã không thể halt
, shutdown
hoặc reboot
Pi. Các lỗi nhận được là
init: /run/initctl: No such file or directory
Cuối cùng tôi đã thực hiện khởi động lại khó khăn, bằng cách thoát khỏi ứng dụng QEMU.
Trong nhà ga có rất nhiều
coreaudio: Could not lock voice for audioDeviceIOProc
Reason: Invalid argument
lỗi đăng nhập. Có lẽ từ tiếng bíp thất bại phát sinh từ tắt máy thất bại.
Tôi đã lặp lại lần khởi động đầu tiên, vì google 2 gợi ý rằng init
vấn đề có thể được giải quyết chỉ bằng một lần khởi động cứng, nhưng tôi vẫn gặp lỗi khởi động và lỗi tạm dừng.
Có một cách "tốt hơn" để tắt, mặc dù tôi đã nhận được tiền boa (xem bên dưới) rằng
reboot -f
đã làm việc.
Trong một nỗ lực để mất các init
lỗi, sau khi thêm 3 lần nữa , tôi đã chạy các lệnh sau:
mkfifo /dev/initctl
nhưng, có thể dự đoán, nó không bền và không sửa được máy.
mkfifo /run/initctl
đó là liên tục, nhưng không sửa chữa tắt máy.
Tôi đã gặp henje trên Super User có cùng một vấn đề. Từ tắt máy: / run / initctl: Không có tệp hoặc thư mục như vậy
Thx cho reboot -f
. Mẹo tốt. Sau khi tiếp tục googling, một khởi động lại cứng được cho là để khắc phục vấn đề, nhưng nó đã không. Tôi cũng đã chạy
mkfifo /run/initctl
để dừng lỗi Không có tệp hoặc thư mục như vậy
, nhưng vẫn không tắt hệ thống. Bây giờ tôi nhận được init:
timeout opening/writing control channel /run/initctl
. Tôi đã so sánh cái /run/initctl
vừa tạo, với cái trên RPi đang hoạt động của tôi và chúng trông giống hệt nhau : prw------- 1 root root 0 Jan 1 1970
/run/initctl
.
Tôi đã tiếp tục bất kể và chạy lệnh khởi động thích hợp , giống như lần khởi động đầu tiên, trừ điinit=/bin/bash
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2013-09-25-wheezy-raspbian.img
Nó khởi động, dường như không có vấn đề, vào raspi-config
màn hình. Tôi đã thay đổi tên máy chủ và pi
mật khẩu của người dùng. Sau đó nhấn Kết thúc và đồng ý khởi động lại, QEMU vừa thoát ra, dường như chết, cửa sổ biến mất.
Tôi chạy lại lệnh khởi động thích hợp một lần nữa
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2013-09-25-wheezy-raspbian.img
lại lệnh. Nó khởi động để đăng nhập bảng điều khiển văn bản bình thường. Đăng nhập, chạy startx
, X có thể lên. Ran sudo shutdown-h now
. Hệ thống tắt mà không gặp sự cố, để lại System halted
tin nhắn. Mặc dù CPU vẫn hoạt động ở mức 100% và cửa sổ không đóng. Tôi phải đóng nó bằng tay.
Ran cùng một lệnh khởi động lại, nó khởi động OK. Nó chạy fsck
mỗi lần khởi động, vì vậy tôi không chắc đó có phải là dấu hiệu của việc halt
không hoạt động chính xác hay không, dù sao thì Raspbian có làm điều đó trên mỗi lần khởi động hay không. Tuy nhiên, khi sudo halt
tôi thấy tin nhắn
[ ok ] Unmounting local file systems...done.
Vì vậy, tôi cho rằng nó là OK và bình thường.
Tôi hy vọng rằng câu chuyện này (lan man), sẽ giúp người khác.
1 Có quá nhiều thông tin để cố gắng tóm tắt, trong trường hợp liên kết chết.
2 Theo không thể khởi động lại debian và systemd-sysv, sysvinit: sự cố khởi động lại khi chuyển đổi giữa systemd-sysv và sysvinit
3 Theo tôi có một cờ lỗi "init: / dev / initctl: không có tập tin nào như vậy"