《LINUX實戰:Ubuntu下用QEMU搭建ARM Linux運行環境》要點:
本文介紹了LINUX實戰:Ubuntu下用QEMU搭建ARM Linux運行環境,希望對您有用。如果有疑問,可以聯系我們。
模擬的單板為vexpress-a9,內核為cortex-a9;安裝完qemu可用以下命令查看支持的機器:qemu-system-arm -M ?
或qemu-system-arm -M help
沒有支持ST公司的板子,有支持arm9,arm11,cortex-m3,cortex-a8,cortex-a9,cortex-a15這些架構其他公司的板子,不外好多都已經停產了.
我的Ubuntu版本為16.04,64位.
提示:1.在輸入linux命令時,一定要注意當前目錄和你命令中出現的文件的路徑關系;
若提示找不到文件,則優先檢查是不是路徑錯誤
2.若提示權限不夠,加上sudo
enter后,輸入你的用戶暗碼即可
搭建步調:
打開ubantu終端,輸入
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc-arm-linux-gnueabi
安裝完后可用以下命令查看是否安裝成功dpkg -l gcc-arm-linux-gnueabi
出現ii gcc-arm-linux- 4:5.3.1-1ubu amd64 GNU C compiler for the armel arch
即注解安裝成功.
sudo apt-get install qemu
查看安裝的版本:qemu-system-arm --version
顯示版本QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.15), Copyright (c) 2003-2008 Fabrice Bellard
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.13.tar.xz
樹立放內核的文件夾
sudo mkdir linux-kernel
sudo chmod 777 linux-kernel
解壓
xz -d linux-4.13.tar.xz
tar xvf linux-4.13.tar
編譯內核
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
生成的內核鐿像位于arch/arm/boot/zImage
測試qemu和內核能否運行勝利
qemu-system-arm -M vexpress-a9 -m 512M -kernel /path/to/kernel/dir/arch/arm/boot/zImage -dtb /path/to/kernel/dir/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
/path/to/kernel/dir/
是內核的編譯目錄
當末行顯示end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
闡明內核正常加載,只是還沒有根文件系統
wget http://www.busybox.net/downloads/busybox-1.27.2.tar.bz2
解壓tar xjf busybox-1.27.2.tar.bz2
在源代碼目次運行
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
安裝完成后,該目錄下生成的_install,即是根本的運行指令
創立rootfs目錄
sudo mkdir rootfs
sudo mkdir rootfs/lib
完善根文件系統,先回到_install的父目次
mkdir _install/pro
mkdir _install/sys
mkdir _install/tmp
mkdir _install/root
mkdir _install/var
mkdir _install/mnt
mkdir _install/Home
mkdir -p _install/etc/init.d
git clone https://github.com/mahadevvinay/Embedded_Linux_Files.git
cp Embedded_Linux_Files/fstab _install/etc
cp Embedded_Linux_Files/inittab _install/etc
cp Embedded_Linux_Files/rcS _install/etc/init.d
更改rcS的權限chmod a+x _install/etc/init.d/rcS
復制完,不必要Embedded_Linux_Files,刪除掉sudo rm -rf Embedded_Linux_Files
拷貝busybox命令sudo cp path/_install/* -r rootfs
path是你本身放_install的路徑
從工具鏈中拷貝運行庫到lib下sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib
注意所有命令中文件若不在當前的文件夾中,都要加上絕對路徑
創建4個tty終端設備
sudo mkdir -p rootfs/dev
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
生成ext3鏡像文件并掛載sudo dd if=/dev/zero of=path/a9rootfs.ext3 bs=1M count=32
path為父目錄路徑,若當前目錄是父目錄則不消
mkfs.ext3 path/a9rootfs.ext3
mkdir tmpfs
sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loop
sudo cp -r path/rootfs/* path/tmpfs
sudo umount path/tmpfs
啟動qemu模擬系統sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3
依照終端最后一行的指示,按下enter鍵,即進入到模擬出的單板的根文件系統,輸入ls
可看到所制作的文件
在用戶目次下vim hello.c
輸入:
#include <stdio.h>
int main()
{
printf("hello world!");
return 0;
}
編譯法式,注意用交叉編譯工具編譯arm-linux-gnueabi-gcc-5 hello.c -o hello
將法式拷到rootfs目錄下執行以下命令:
sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loop
sudo cp -r path/rootfs/* path/tmpfs
sudo umount path/tmpfs
path為你的路徑
啟動qemu模擬系統sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3
依照終端最后一行的指示,按下enter鍵,即進入到模擬出的單板的根文件系統,輸入ls
可看到所制作的文件
輸入./hello
即可看到打印出hello world!
本文永遠更新鏈接地址:
更多LINUX教程,盡在維易PHP學院專欄。歡迎交流《LINUX實戰:Ubuntu下用QEMU搭建ARM Linux運行環境》!
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7047.html