1. 程式人生 > >使用Qemu模擬Cortex-A9執行U-boot和Linux

使用Qemu模擬Cortex-A9執行U-boot和Linux

/****************************************************************************/
 *
 *                  (c)    光明工作室  2017-2037  COPYRIGHT
 *
 *   光明工作室團隊成員大部分來自全國著名985、211工程院校。具有豐富的工程實踐經驗,
 *本工作室熱忱歡迎大家的光臨。工作室長期承接嵌入式開發、PCB設計、演算法模擬等軟硬體設計。
 *
 *
 *1)基於C8051、AVR、MSP430微控制器開發。
 *2)基於STM32F103、STM32F407等ARM處理器開發。(IIC、SPI、485、WIFI等相關設計)
 *3)基於C6678、DM388等DSP處理器開發。(視訊、網路、通訊協議相關設計)
 *4)基於QT、C#軟體開發。
 *5)基於OPENCV、OPENGL影象處理演算法開發。(基於LINUX、WINDOWS、MATLAB等)
 *6)無人機飛控、地面站程式開發。(大疆、PIX、 qgroundcontrol、missionplanner、MAVLINK)
 *7) ROS機器人作業系統下相關開發。
 *8)LINUX、UCOSII、VXWORKS作業系統開發。
 *
 *
 *                                                 聯絡方式:
 *                                                 QQ:2468851091 call:18163325140
 *                                                 Email:
[email protected]
 * / ****************************************************************************/                  

  我的開發環境: Ubuntu-12.04 所有軟體包為最新

  1. 安裝GNU工具鏈

  sudo apt-get install gcc-arm-linux-gnueabi

  sudo apt-get install g++-arm-linux-gnueabi
  安裝完成後會在 /usr/arm-linux-gnueabi/ 目錄下生成庫檔案、標頭檔案等。 我安裝的GCC版本為:
  arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

  Copyright (C) 2011 Free Software Foundation, Inc.

  2. 安裝Qemu模擬器
  sudo apt-get install qemu qemu-
system
qemu-utils

  這時應該已經可以執行qemu-system-arm命令了, 其版本為:
  qemu-system-arm --version

  QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2), Copyright (c) 2003-2008 Fabrice Bellard

  3. 編譯和執行U-boot:
  到 ftp://ftp.denx.de/pub/u-boot/ 下載最新版本的U-Boot原始碼, 我用的目前最新版本 u-boot-2012.04.tar.bz2
  解壓後進入原始碼目錄,在Makefile裡面增加兩行:

  ARCH ?= arm
  CROSS_COMPILE ?= arm-linux-gnueabi-
  其實就是告訴它使用ARM編譯器來編譯。

  make ca9x4_ct_vxp_config
  make
  這裡配置目標板為 Cortex-A9x4 vexpress. 之所以選這個配置可以從 boards.cfg檔案裡看到, vexpress是
ARM公司
使用Cortext-A9的一個開發板,相關的程式碼在 board/armltd/vexpress/ 目錄,配置檔案為include/configs/ca9x4_ct_vxp.h。 而且關鍵的是Qemu裡面已經支援這個板卡。

  編譯完成後會生成u-boot檔案
  執行:
  qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot
  或者
  qemu-system-arm -M vexpress-a9 -m 256M -serial stdio -kernel u-boot
  發現,如果沒有指定-nographics, 則必須要加-serial stdio才會有列印。

  引數-m 256M為指定記憶體大小。-M 指定板卡的名稱, 支援的板卡可以用-M ?檢視, 如下:
  #qemu-system-arm -M ?
  Supported machines are:
  beagle Beagle board (OMAP3530)
  beaglexm Beagle board XM (OMAP3630)
  ............
  versatilepb ARM Versatile/PB (ARM926EJ-S)
  versatileab ARM Versatile/AB (ARM926EJ-S)
  vexpress-a9 ARM Versatile Express for Cortex-A9
  vexpress-a15 ARM Versatile Express for Cortex-A15
  正常執行的結果:

  qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

  U-Boot 2012.04 (Jul 08 2012 - 00:14:08)

  DRAM: 256 MiB
  WARNING: Caches not enabled
  Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB
  ## Unknown flash on Bank 2 - Size = 0x00000000 = 0 MB
  *** failed ***
  MMC: MMC: 0
  *** Warning - bad CRC, using default environment

  In: serial
  Out: serial
  Err: serial
  Net: smc911x-0
  Hit any key to stop autoboot: 0
  VExpress#
  VExpress# printenv
  baudrate=38400
  bootcmd=run bootflash;
  bootdelay=2
  bootflash=run flashargs; cp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}; bootm ${kernel_addr} ${ramdisk_addr_r}
  console=ttyAMA0,38400n8
  。。。。。
  注意:如果在檢測Flash failed後停止執行,是因為在 arch/arm/lib/board.c裡面 board_init_r()函式裡檢測Flash失敗後呼叫了hang(), 暫時先把hang()去掉就可以執行下去了。

  4. 編譯和執行Linux核心:
  到http://www.kernel.org/下載最新的Linux核心原始碼,我下載的是linux-3.4.4.tar.bz2. 解壓後修改Makefile, ARCH = arm, CROSS_COMPILE=arm-linux-gnueabi-

  make vexpress_defconfig
  (可以到 arch/arm/configs/ 目錄看到所有自帶的配置檔案, 我們使用vexpress板卡預設的配置檔案)
  然後 make menuconfig --> System Type 把 Enable the L2x0 outer cache controller 取消, 否則Qemu會起不來, 暫時還不知道為什麼。
  然後就可以make了。 最後會生成 arch/arm/boot/zImage 檔案, 這就是我們需要的核心映像。

  5. 製作根檔案系統
  這部分網上有非常多的介紹,就不細說了。 大概流程是:先建立標準的Linux目錄結構, 到http://www.busybox.net/上下載最新的Busybox原始碼編譯安裝到剛才建立的目錄,
  拷貝ARM的庫檔案到相應目錄,在etc/目錄建立若干必須的啟動指令碼和配置檔案。 下面說一下怎麼生成一個ext3格式的檔案系統映像:

  dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32 //建立一個32M的空檔案
  mkfs.ext3 a9rootfs.ext3 //格式化為EXT3
  sudo mount -t ext3 a9rootfs.ext3 a9rootdir/ -o loop //掛載到a9rootdir目錄
  cp path/to/your/rootfs/* a9rootdir/ -Rf //拷貝檔案到該目錄,相對於放到a9rootfs.ext3裡面
  sudo umount a9rootdir/
  至此a9rootfs.ex3 就包含了我們建立的根檔案系統內容, 並且是ext3格式。

  6. 使用Qemu執行Linux:

  qemu-system-arm -kernel zImage -serial stdio -M vexpress-a9 -append "root=/dev/mmcblk0 console=ttyAMA0 console=tty0" -sd a9rootfs.ext3
  Qemu可以模擬SD卡, 我們把a9rootfs.ext3作為一個SD裝置,對應的裝置檔案即為 /dev/mmcblk0, 以它作為根檔案系統啟動。 ttyAMA0: Serial console; tty0: Framebuffer Console. 最後放一張啟動後的圖片:

相關推薦

使用Qemu模擬Cortex-A9執行U-bootLinux

/****************************************************************************/  *  *                  (c)    光明工作室  2017-2037  COPYRIGHT

qemu模擬vexpress-a9u-boot引導 linux

brctl data ket netd pre dong busybox 網絡 vsftpd 前言 本文講述使用 qemu 來模擬 vexpress-a9 開發板 ,同時介紹使用 u-boot 引導 linux 的流程。整個坐下來對 qemu 和 u-boot 以及嵌入式

編譯U-bootLinux核心的步驟詳解

1、準備材料 linux核心和uboot的原始碼包—- 6818GEC.tar.gz 環境:VMware12.0 Ubuntu16.04(64位) (1)先將 6818GEC.tar.gz 放在Ubuntu的共享目錄下,然後將 68

2-STM32開發板(Cortex-M3)exynos4412(Cortex-A9)之間的區別聯絡

一、ARM的簡介——what?? part1:ARM代表什麼?     1)ARM是"Advanced RISC Machine"的縮寫,最早的ARM處理器誕生於80年代的英國,目前總部在英國劍橋     2)ARM公司自己並不生產或者銷售晶片,它採用技術授權模式,通過出

Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心

Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心 標籤(空格分隔): Qemu ARM Linux 在上文《Qemu搭建ARM vexpress開發環境(一)》中已經簡單講述了通過Qemu模擬直接啟動Linux核心,並掛在SD卡根檔案系統的方法,這種方法是直接啟動

u-bootLinux核心視訊顯示介面引數配置及傳遞方案

http://blog.chinaunix.net/uid-20543672-id-3244213.html 分類: LINUX2012-06-15 11:48:54 一、一般視訊顯示介面初始化所需要的引數 眾所周知,顯示器顯示的是二維的,處理器將視訊資料通過顯示介面行、地傳送到顯示器,每行

Java執行window命令linux命令

這裡強調一點,命令中用到的jdk還有其他一些需要配置的軟體的環境變數一定要配置成全域性的,外部可以讀取的,否則java根本無法執行命令。比如linux需要配置在 /etc/profile,用source /etc/profile可以即時生效。 下面是程式碼: packag

修改u-bootLinux除錯串列埠以及檔案系統顯示終端串列埠

轉載:http://bbs.ednchina.com/BLOG_ARTICLE_3003157.HTM 1.背景         近期一個專案,使用TI Cortex-A8的晶片AM3517作為主控開發。前期使用北京瑞泰公司的ICETEK-AM3517-KB核心板搭建

嵌入式 修改u-bootLinux除錯串列埠以及檔案系統顯示終端串列埠

1.背景         近期一個專案,使用TI Cortex-A8的晶片AM3517作為主控開發。前期使用北京瑞泰公司的ICETEK-AM3517-KB核心板搭建開發環境。在自己做底板布板的時候的時候塗個佈線方便,改用UART1作為除錯串列埠,而原來瑞泰給的開發包,已

u-boot啟動Linux核心分析

一、uImage的結構 通過前面分析u-boot的啟動流程,我們可以知道,u-boot啟動核心的命令是bootcmd=nand read.jffs 0x30007FC0  kernel:bootm 0

U-BOOT啟動linux的過程

 一、概述   linux核心映象常見到的有兩種形式,zImage和uImage。這兩種檔案的格式稍有差別,所以啟動這兩種格式的核心映象也會有所不同。目前,uboot只支援啟動uImage型別的映象,對zImage還不支援(但是可以移植,TQ2440就是這樣做的)。 二、uImage和zImage 1、z

java執行cmd命令linux命令

一:window下執行cmd指定 程式例子: /*該方法實現檔案自動複製功能。利用系統命令將指定檔名從源路徑複製到目的路徑      * 如果目的路徑不存在時,自動建立目的路徑      * */ public static boolean copyFile(Stri

u-boot 引導linux核心

./mkimage -n 'Cortex-A9' -A arm -O linux -T kernel -C none -a 0x60003000 -e 0x60003000 -d ../../extra_folder/zImage uImage

基於QEMU的ARM Cortex-A9開發板Vexpress-ca9的Linux核心的編譯執行

Author: KARL-Duj BAT QQ: 30933706 2011 Q群: 37******* 2012 Q群: 20******* 2013 Q群: 58******* 2014 Q群: 39******* 2015 Q

qemu 模擬-arm-mini2440開發板-啟動u-boot,kernelnfs檔案系統

qemu 本文介紹瞭如何編譯u-boot、linux kernel,然後用qemu啟動u-boot和linux kernel,達到與開發板上一樣的學習效果! 雖然已經買了2440開發板,但是在實際學習開發過程中,還是覺得不方便,既然這樣,那就用qemu模擬2440開發板,

u-boot、kernelfilesystem 執行過程分析

標題:   Uboot -kerne-root 啟動流程 內容:   ※uboot啟動流程   ※Kernel啟動流程   ※Root啟動流程   ※構建根檔案系統   /********************************* *u-boot

u-boot執行下載執行程式“Helloworld”

        雖然自2012年9月開始就做嵌入式了,但感覺自己一直在打醬油,首先玩的loongson的平臺的片子(玩過的人都懂的),其次是公司招我進去的目標只是為了驗證公司做的硬體是沒問題的,整個方案基本就是按開發板做的,所以自己基本沒有什麼可以改,最多就是做幾個IIC的

一步步教你如何在Ubuntu虛擬機器中安裝QEMU模擬模擬arm 開發環境(一)uImage u-boot

初次接觸qemu是因為工作的需要,有時候下了班,可能需要在家研究一些東西,因為博主用到arm環境,這時候博主比較小氣,不願花錢買開發板,當然博主在這裡給大家的建議是,如果要真正學懂arm構架的相關知識,還是單獨買一塊arm的開發板,慢慢摸索吧,畢竟這才是最好的學習方法,如果

【imx6ul】U-Boot 2016.03執行過程分析-ARM Cortex-A7

uboot組織架構正在朝著linux架構方向發展,不同版本稍有不同,一下以U-Boot 2016.03為例。分析入口:以u-boot.lds(其決定了各個段的排布方式)開始:1、u-boot.lds://設定輸出檔案大小端格式 OUTPUT_FORMAT("elf32-lit

CentOS 7 利用qemu模擬ARM vexpress A9開發板

ogr install 進入 復制 不同 .html ini 依賴 roo 聽說qemu用於仿真arm很不錯,今日就來試了一把。由於剛剛開始,了解的並不多。本文僅僅記錄Qemu裝載Linux kernel和busybox根文件系統的過程。後續將會深入了解仿真的其他內容。 先