2016年10月12日 星期三

[QEMU] 在 Ubuntu 平台執行 ARM 平台的某個執行檔

本篇提供一個簡單的qemu執行範例,可以直接執行嵌入式系統(ARM)的執行檔,並說明如何結合基本的檔案輸入輸出,以及如何使用gdb進行除錯。

安裝 qemu
$ sudo apt-get install qemu-user



執行 qemu,
1. 先確認檔案格式
$ file my_test
/home/albert/my_test: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, BuildID[sha1]=a017880574a1519533f83cd5370d287a31ca4989, not stripped 
2. 需指定正確的 linker,以及可能用到的 library path
$ qemu-arm lib/ld-linux-armhf.so.3 --library-path lib:usr/lib ~/web-project/my_test


若程式執行時需要讀檔,可直接使用 ubuntu 內對應的路徑,比方說程式會讀取嵌入式系統中的 /mnt/nand/xml 內的 1.xml,使用 qemu 便會讀取 ubuntu 下的對應路徑,作法如下:
$ sudo mkdir -p /mnt/nand/xml
$ sudo cp 1.xml  /mnt/nand/xml
$ sudo chmod 755 /mnt/nand/xml

同樣的,若需要寫檔,也是同樣作法,假設需要將log寫入到 /mnt/nand/log
$ sudo chmod 755 /mnt/nand/log

若要進行 gdb 除錯,可以在執行 qemu 時,一併執行 gdbserver,作法如下:
$ qemu-arm -g 2345 lib/ld-linux-armhf.so.3 --library-path lib:usr/lib ~/web-project/my_test

接著可以執行 gdb
$ gdb
(gdb) target remote localhost:2345
(gdb) symbol-file /home/albert/my_test
(gdb) continue


參考資料:
  1. http://wiki.qemu.org/