ubantu下用qemu搭建arm+linux運行環境

来源:http://www.cnblogs.com/hxwater/archive/2017/09/15/7529108.html
-Advertisement-
Play Games

ubantu下用qemu搭建arm+linux運行環境 概述 模擬的單板為vexpress a9,內核為cortex a9;安裝完qemu可用以下命令查看支持的機器: 或`qemu system arm M help` 沒有支持ST公司的板子,有支持arm9,arm11,cortex m3,cort ...


ubantu下用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這些架構其他公司的板子,不過好多都已經停產了。
我的ubantu版本為16.04,64位。
可以上網搜索相關博客,我參考的主要博客是從零使用qemu模擬器搭建arm運行環境ARM Versatile Express Emulation On Qemu From Scratch: Part 1

提示:1.在輸入linux命令時,一定要註意當前目錄和你命令中出現的文件的路徑關係;
若提示找不到文件,則優先檢查是不是路徑錯誤
2.若提示許可權不夠,加上sudoenter後,輸入你的用戶密碼即可

搭建步驟:

安裝arm的交叉編譯工具鏈

打開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即表明安裝成功。

安裝qemu

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

編譯linux內核

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 rootfspath是你自己放_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可看到所製作的文件

運行hello world

在用戶目錄下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!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原創文章,轉載請註明出處:http://www.cnblogs.com/weix-l/p/7521278.html; 若有錯誤,請評論指出,謝謝! 1. 聚合函數(Aggregate Function) MySQL(5.7 ) 官方文檔中給出的聚合函數列表(圖片)如下: 詳情點擊https://de ...
  • 昨天,一個大新聞爆出,MongoDB資料庫叕被攻擊了。就在上周末,三個黑客團夥劫持了MongoDB逾26000多台伺服器,其中規模最大的一組超過22000台。 “MongoDB啟示錄”再臨? 此次攻擊由安全專家Dylan Katz和Victor Gevers發現,被他們稱為是“MongoDB啟示錄” ...
  • 狀態名 作用域 詳細解釋 Aborted_clients Global 由於客戶端沒有正確關閉連接導致客戶端終止而中斷的連接數 Aborted_connects Global 試圖連接到MySQL伺服器而失敗的連接數 Binlog_cache_disk_use Global 使用臨時二進位日誌緩存但 ...
  • 需求: 如果表欄位的值為 0 則將其修改為1 ,如果表欄位的值為 1 則將其修改為 0。 方法一 方法二 方法三 ...
  • 一工廠的SQL Server資料庫伺服器上的YourSQLDba_LogBackups作業做事務日誌備份時,突然出現異常,異常的錯誤信息指向.NET Framework,出現這個問題時,一般我估計是該伺服器自動應用了.NET Framework的一些補丁導致,因為以前也碰到過這類錯誤,於是去檢查服務 ...
  • 通過servlet,jsp,mysql實現用戶顯示,功能模塊和後臺數據三個模塊分離 ...
  • 本文轉自:http://www.sqlines.com/oracle-to-sql-server/months_between In Oracle, MONTHS_BETWEEN(date1, date2) function returns the number of months between ...
  • 以Deepin為例,只需一條命令即可: sudo apt-get install curl libcurl3 libcurl3-dev php5-curl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...