Trình mô phỏng Raspberry Pi trên Linux với QEMU

Hiện nay việc sở hữu một board mạch Raspberry Pi đã không là quá khó đối với mọi người. Thế nhưng đôi khi bạn cần phải giả lập hệ thống của Raspberry Pi trên máy tính (linux) của bạn bởi những lý do sau:

  • Bạn cần dev và test cho một software trước khi chạy trên board
  • Bạn cần một môi trường giả lập để làm quen trước khi sắm cho mình một board thực sự
  • Bạn cần test tương tác giữa nhiều hệ thống

Nội dung bài viết này sẽ hướng dẫn cách cài đặt hệ thống giả lập Raspberry Pi trên máy tính linux

Chuẩn bị bản image của Raspberry Pi

Việc đầu tiên là bạn cần phải có hệ điều hành có thể chạy trên Raspberry Pi. Ở đây chúng ta sẽ dùng Raspbian phiên bản Jessie (mới nhất ở thời điểm bài viết này), bạn có thể download ở đây (nên sử dụng bản full thay vì bản lite).

File image sau khi download và giải nén sẽ có tên tương tự như 2016-03-18-raspbian-jessie.img

Cài đặt QEMU

QEMU hay Quick Emulator là một phần mềm mã nguồn mở giúp giả lập được nhiều loại processor khác nhau trong đó có chip ARM của Raspberry Pi.

Để cài đặt QEMU bạn gõ lệnh sau:

sudo apt-get update
sudo apt-get install qemu-system-arm

Sau khi cài đặt QEMU, chúng ta kiểm tra phiên bản hiện tại bằng lệnh:

qemu-system-arm --version

Và thế là QEMU đã được cài đặt thành công:

Tải về Kernel cho QEMU-Ready Raspberry Pi

Cơ bản để hoạt động được QEMU cần một Kernel tương ứng với kiến trúc của Raspberry Pi, thế nên chúng ta cần phải tải về kernel này tại đây, hoặc gõ lệnh:

wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.1.13-jessie

Thiết lập hệ thống giả lập

Bạn cần có file image của Raspberry Pi và kernel cho QEMU (hướng dẫn bên trên):

Trước khi chạy QEMU chúng ta cần phải làm thêm một số bước/

Mục đích chính là thay đổi file /etc/ld.so.preload/mnt/etc/fstab và tạo thêm một file/etc/udev/rules.d/90–qemu.rules, những file này nằm trong image của Raspberry Pi (file .img).

Giả sử chúng ta đang đứng ở vị trí chứa file img trong terminal.

fdisk -l 2016-03-18-raspbian-jessie.img

Dòng lệnh bên trên sẽ in thông tin phân vùng của file img (bạn nhớ chú ý đổi tên phần in đậm nếu tên file của bạn khác với ví dụ). Chúng ta sẽ thấy thông tin như sau:

Phân vùng chúng ta cần mount là phân vùng thứ 2 bắt đầu ở block 131072 (lệnh mount sẽ dùng kích thước 131072*512=67108864. Bây giờ chúng ta sẽ mount:

#Tao mot thu muc ten mnt
mkdir mnt
#mount file img vao thu mục mnt
sudo mount -v -o offset=67108864 -t ext4 2016-03-18-raspbian-jessie.img ./mnt

Sau lệnh trên thư mục mnt bây giờ là nội dung của file img. Chúng ta sẽ sửa file bên trong thư mục mnt.

a. Sửa file gedit ./etc/ld.so.preload bằng cách gõ lệnh

sudo gedit mnt/etc/ld.so.preload

Editor hiện lên, bạn comment như hình sau:

Save và close file vừa sửa bên trên.

b. Tạo file sudo /etc/udev/rules.d/90-qemu.rules với lệnh

sudo gedit mnt/etc/udev/rules.d/90-qemu.rules

Editor hiện lên, điền nội dung sau vào:

KERNEL=="sda", SYMLINK+="mmcblk0"
KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
KERNEL=="sda2", SYMLINK+="root"

Giống như hình sau:

90-qemu.rules (mnt) - gedit_007

Save và close file vừa sửa bên trên.

c. Sửa file mnt/etc/fstab, gõ lệnh

sudo gedit mnt/etc/fstab

Comment nội dung của file như sau:

proc            /proc           proc    defaults          0       0
#/dev/mmcblk0p1  /boot           vfat    defaults          0       2
#/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

Save và close file vừa sửa bên trên.

Chạy Raspbian trên QEMU

Chạy lệnh sau để khởi đọng QEMU với kernel và image của Raspberry pi (thay thế phần in đậm tương ứng với đường dấn thực đến file của bạn):

qemu-system-arm -kernel <strong>kernel-qemu-4.1.13-jessie</strong> -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda <strong>2016-03-18-raspbian-jessie.img</strong>

QEMU sẽ khởi động thành công giả lập!

 

Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
4 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

ROBOT HAI BÁNH TỰ CÂN BẰNG - 2 WHEEL SELF BALANCING ROBOT

Hôm nay mình xin chia sẻ với các bạn cách làm một robot tự cân bằng trên hai bánh xe bằng Arduino từ xe đồ chơi bị hỏng của thằng nhóc ở nhà. Tất nhiên, hai động cơ và hai bánh xe chưa bị hỏng nhé. laugh. Để robot tự cân bằng trên hai bánh xe thì chuyển động của nó tương tự như việc giữ thăng bằng một cây gậy trên ngón tay. Điều này chắc các bạn cũng đã từng thử trước đây.

lên
16 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Intel Edison là gì? Cùng bắt đầu với tôi nào.

Mới có cơ hội được vọc Intel Edison từ chị gái nên hôm nay mình tranh thủ viết bài review về nó để các bạn cùng có cái nhìn chung về board Intel Edison này. Tiếc là mình đang không có máy ảnh + điện thoại trong tay nên sẽ dùng ảnh trên mạng để trình bày nhé. Mình sẽ hướng dẫn các bạn bắt đầu với mạch này từ những bước đơn giản đầu tiên. Hy vọng qua bài viết này, newbie sẽ có cái nhìn toàn diện hơn với Intel Edison.

lên
15 thành viên đã đánh giá bài viết này hữu ích.

Software Serial - Giao tiếp giữa Arduino và nhiều mạch Serial khác - Truyền tải trung gian giữa một mạch khác qua giao tiếp Serial

Có thể nói Serial là một trong những phương thức giao tiếp đơn giản nhất trong môi trường Serial. Vì bạn chỉ cần 2 dây và cách thức truyền dữ liệu của nó lại giống hệt stream trong các ngôn ngữ lập trình. Nhưng thật đáng tiết, con Arduino Uno chỉ có duy nhất một cổng Serial được phần cứng hỗ trợ sẵn (Mega thì 3). Vì vậy, nếu bạn muốn giao tiếp với nhiều module Serial thì đó là một chuyện không thể. Và đó chính là lý do vì sao thư viện Software Serial ra đời. Hôm nay, chúng ta sẽ tìm cách giao tiếp giữa 2 mạch Arduino thông qua Serial và một ví dụ về chuyển tiếp giá trị của một module giao tiếp qua Serial với thư viện này.

lên
25 thành viên đã đánh giá bài viết này hữu ích.