用QEMU構建嵌入式LINUX系統

2021-10-09 23:59:37 字數 4254 閱讀 9566

table of contents

qemu –從源頭建造

arm工具鏈

linux核心

構建檔案系統

通過nfs使用根檔案系統

配置qemu tap網路

建立執行指令碼

推薦閱讀:《在centos上進行虛擬化:qemu、xen、kvm、libvirt、ovirt》

qemu是一套由法布里斯·貝拉(fabrice bellard)所編寫的以gpl許可證分發原始碼的模擬處理器,在gnu/linux平台上使用廣泛。bochs,pearpc等與其類似,但不具備其許多特性,比如高速度及跨平台的特性,通過kqemu這個閉源的加速器,qemu能模擬至接近真實電腦的速度。

目前,0.9.1及之前版本的qemu可以使用kqemu加速器。在qemu1.0之後的版本,都無法使用kqemu,主要利用qemu-kvm加速模組,並且加速效果以及穩定性明顯好於kqemu。

在我的嵌入式linux課程中,我使用qemu來模擬linux系統。qemu模擬許多電路板,包括硬體,中斷,網路等。

在本教程中,我將介紹構建包括核心,檔案系統和應用程式的完整系統的步驟。

# wget 

# tar xvjf qemu-2.11.0.tar.xz

# cd qemu-2.11.0

# ./configure

最後一步檢查您的系統是否滿足所有qemu要求。如果收到錯誤訊息,則需要安裝缺少的軟體包。我正在使用ubuntu,很容易安裝缺少的部件,例如,我收到以下訊息:

error: glib-2.22 gthread-2.0 is required to compile qemu
搜尋google後,安裝所需的軟體包

# sudo apt-get install libglib2.0-dev zlib1g-dev
# sudo apt-get install libpixman-1-dev

# sudo apt-get install libsdl2*

現在再次執行configure並檢查是否報告了sdl支援

執行make

# make

# sudo make install

要檢查qemu是否正確安裝,請執行

# qemu-system-arm -m ?
將位置新增到path環境變數中:

# export path=/home/developer/armsystem/toolchain/gcc-arm-none-eabi-7-2017-q4-major
編輯核心makefile(第253行)

arch		?= arm

cross_compile ?= arm-none-eabi-

設定配置檔案

# make vexpress_defconfig
執行make

# make -j4
現在,我們可以使用以下命令檢查qemu中的核心:

# qemu-system-arm -m vexpress-a15 -m 512 -kernel arch/arm/boot/zimage -dtb arch/arm/boot/dts/vex
系統將啟動但由於我們尚未構建檔案系統而崩潰

我們可以使用許多任務具來構建嵌入式linux檔案系統。一些例子是buildroot,openwrt,yocto

在本教程中,我們將使用buildroot,因為它是最簡單的工具

開啟配置選單:

# make menuconfig
在目標選項上,選擇目標體系結構– arm

我們將使用sourcery工具鏈,因為它具有一些ide外掛程式。

儲存配置並構建它

# make
構建成功完成後,您可以在以下位置找到新的工具鏈:

~/armsystem/fs/buildroot-2017.02.8/output/host/usr/bin
將其新增到path變數,更改核心makefile並再次構建

arch		?= arm

cross_compile ?= arm-none-linux-gnueabi-

生成的檔案系統位於buildroot / output / target中,但我們尚不能使用

使用嵌入式板的最好方法是通過nfs(在主機上)掛載目標檔案系統來實現,我們需要做一些設定:

安裝nfs伺服器

# sudo apt install nfs-kernel-server
/home/developer/armsystem/outfs *(rw,sync,no_root_squash)
重新啟動nfs伺服器

# sudo /etc/init.d/nfs-kernel-server restart

[ ok ] restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.

qemu可以使用tap / tunnel模式將私有網路與ubuntu結合使用。要進行設定,請建立檔案/ etc / qemu-ifup:

#!/bin/bash

exec /sbin/ifconfig $1 192.168.0.1

向檔案新增執行許可權(chmod a + x / etc / qemu-ifup)

建立根檔案系統資料夾

複製生成的檔案〜/ armsystem / outfs

# cp -r -d [buildroot]/output/target/* ~/armsystem/outfs
現在,使用root使用者新增以下裝置檔案

# sudo mknod ./dev/console c 5 1

# sudo mknod ./dev/zero c 1 5

# sudo mknod ./dev/null c 1 3

# sudo mknod ./dev/tty1 c 4 1

如果要自動生成裝置檔案,請配置udev。使用buildroot非常容易:

從系統配置選單中選擇/ dev管理(使用devtmpfs + eudev動態)

然後從「目標軟體包」>「硬體處理」選單中,選擇「 eudev」

編譯buildroot,您將看到udev在init上執行:

在〜/ armsystem中建立指令碼– run_qemu

qemu-system-arm -m vexpress-a15 -net tap -net nic -m 512 -kernel kernel/linux-4.14.10/arc
新增執行許可權並使用sudo對其進行測試(它將啟動新的網路裝置)

而已!!!

現在我們可以編寫乙個測試應用程式,在qemu中編譯並執行:

Buildroot構建嵌入式系統

2 配置buildroot 將原始碼包複製到 opt目錄下,並解壓 2.1 進入target options 將target architecture配置為arm littlt endian 將target architecture variant配置為cortex a9,將target abi配置...

嵌入式 linux 編譯

第二次換了編譯環境編譯時又提示 make 3 drivers video console vgacon.o 錯誤 1 在網上搜尋結果 根據資訊的大概意思是關於vga的支援問題,在這裡我直接把關於vga的配置選項去掉不選,即 在執行 make menuconfig 配置時 不選vga 驅動。devic...

linux嵌入式開發

我的環境 主機 ubuntu 64位 開發板 mini2440 6 makefile檔案修改 在 opt friendlyarm mini2440 linux 2.6.29下執行 sudo vi.makefile 搜尋arm linux得到乙個結果 cross compile?arm linux 然...