上面介绍用QEMU模拟Raspberry
Pi的秘技,采纳了这种办法后纵然未有开垦板也能展开测试。

1,编写翻译内核
按 linux-2.6.30 内核配置 版本5 编写翻译内核
http://www.linuxidc.com/Linux/2011-12/49118.htm

干什么会有那篇小说

早在二零一一年的时候,跟当时同事一齐议论,做Linux系统开拓正处在整个Linux开垦中间层,未有上层的C/C++业务和数据库的付出经历,也尚未底层的根本和驱动开荒经历,到底路该怎么走……基于对Linux系统开荒的知情和水源的乐趣,感到选取Linux内核开采更适合自身。于是到Taobao上买了块三星(Samsung)s3c2440(arm
9)开垦板,学起内核开拓。未有过多短时间,机缘巧合,正式参预了铺面的基石开拓部。就这么跟基础和arm打上交道了。 

从没想到这一做便是3年了,arm芯片只有在合作社本事利用,回到家里就不可能访问了。二〇一八年(二〇一四)初叶认为做内核久了,应该向基础社区交付patch,提高人气和影响力。但在集团付给patch不便利,于是在家里通过qemu情势搭建于ARM
A9的运作条件,实行开垦和测试申明,一口气提交了一点个patch并被社区接受了:

9c986661638c69772f5479c4715061239ec61b29

c2459d35f5b8de077fde859b8c96a23f309b9ab2

20cb6abfe0062693183eb2a85f7c73792e96407f

207a6cb06990c298d0eac982e053d370e216d93d

279f487e0b471577e2b3c134e2ff9af939129d0f 

不久前在梳理Linux内存机制,无论是《深切通晓Linux内核》如故《深刻通晓内核架构》这两本红宝书都无法告诉您种种细节的时候,就须求查阅代码细节,修改代码,甚致做行为解析。此时须求修改代码输出调节和测试音讯,以帮忙更浓厚体会代码的逻辑。那该是qemu派登台的时候。

深远领悟Linux内核(第三版)(英文版+中文版) 
下载见
http://www.linuxidc.com/Linux/2011-08/41228.htm

事实上小编前前后后搭建qemu+arm的运行情形已当先5次了,每一回都要花上多多时辰。碰巧后天有同事见状本身再也搭建,他如搭宝贝,告诉作者必然要将搭建qemu的法门告诉她。 

于是,如若你想买个开拓板来做arm +
linux嵌入式开采,完全能够动用qemu进行开荒。可能您像小编同一,对根本机制关怀,而不爱戴于具体的外设器件,最多是关注arm架构相关的职能,也得以运用qemu进行开辟。 

一句话:搭建qemu+arm意况,用于做基础开垦和效用深入分析调节和测试。 

澳门金沙国际 1

2,用Qemu 启动Linux
/usr/local/qemu/bin/qemu -kernel ./linux-2.6.30/arch/i386/boot/bzImage
-hda ./1248179541.img -boot c -append “root=/dev/sda kgdboc=ttyS0,115200
kgdbwait” -net nic,vlan=0 -net
tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup -serial tcp::4321,server
-alt-grab

搭建情状

我一切搭建进程都以在记录本上拓展的,Ubuntu
12.04系统;要是是Fodera意况,搭建进度或然略有不一样,但关键步骤是不变的。 

qemu模拟得最佳的arm芯片,要数ARM公司的vexpress
A9开辟板了,本文的搭建进度都以环绕这几个开垦板实行的。当然,倘让你想搭其余开垦板,也简单,只要qemu和根本对它有成熟的支撑就够了。 

上面是step by
step的搭建进度,建议未尝特地央求的朋友,依照下在面包车型大巴手续操作。或然先遵照上面包车型地铁步骤成功搭建vexpress运维条件之后,再依据本人的急需开始展览更换。 

付出景况

a,/usr/local/qemu/bin/qemu  : qemu 程序,上面为参数
b,-kernel ./linux-2.6.30/arch/i386/boot/bzImage  :  钦定内核
c,-hda ./1248179541.img :内定磁盘文件
d,-boot c :qemu 运行参数
e,-append “root=/dev/sda kgdboc=ttyS0,115200 kgdbwait” :
内核运转参数
f,-net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=/etc/qemu-ifup
:网络接口参数
g,-serial tcp::4321,server :串口参数
h,-alt-grab :使用ctrl + Shift + Alt 作为热键

下载Linux内核

下载内核有二种方法,一种是用git直接下载内核代码树,方便后边的木本开荒。另一种是直接到基本社区下载对应版本的源码包。笔者使用第一种办法,但背后开掘主线上3.18版本和后边版本的代码,使用这种搭建方法运营不起来。如今未查验难题的根因。即使读者想飞快搭建成功,提出选取3.16本子的基业实行搭建。 

方法一:使用git

git
clonegit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 

格局二:直接下载3.16源代码包

wget
 

测试用的Host OS处境是 Debian 7.2 Wheezy amd64.

3,启动GDB
gdb vmlinux

安装arm的穿插编写翻译工具链

或是做嵌入式开辟的相恋的人,对交叉编译工具链不生分。即使你订制八个接力编写翻译工具链,提出您使用crosstool-ng开源软件来构建。但在此间提出直接安装arm的时断时续编写翻译工具链:

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

 Guest OS是, 对Raspberry Pi举行优化后的 Debian Raspbian (二零一三-09-15) .

设定Porter率
用QEMU模拟树莓派Raspberry,kgdb调节和测试内核。set remotebaud 115200

编译Linux内核

生成vexpress开采板子的config文件:

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
vexpress_defconfig

编译:

澳门金沙国际 ,make CROSS_COMPILE=arm-linux-gnueabi-
ARCH=arm

转换的基本镱像位于arch/arm/boot/zImage,
后续qemu运维时必要使用该镜像。 

二〇一四/7/31 追加: Debian 8 jessie amd64, QEMU 2.0.0, Raspbian (二〇一四-06-20)
也用一样的步骤确认过动作.

总是到调节和测试系统
target remote localhost:4321

下载和设置qemu模拟器

实在Ubuntu
12.04有qemu的安装包,但由于版本相当低,对vexpress开垦板帮助不团结,建议下载高版本的qemu:

wget
 

计划qemu前,需求安装多少个软件包:

sudo apt-get install zlib1g-dev

sudo apt-get install libglib2.0-0

sudo apt-get install libglib2.0-dev 

布署qemu,支持模拟arm架构下的全体单板:

./configure –target-list=arm-softmmu
–audio-drv-list= 

编写翻译和设置:

make

make install 

安装QEMU

当调节和测试系统就绪时,会有如下音讯
Remote debugging using localhost:4321
Malformed response to offset query, QC0000000000000001

测试qemu和基本能不能够运转成功 

qemu已经安装好了,内核也编写翻译成功了,到此地最佳是测试一下,编写翻译出来的根本是或不是OK,可能qemu对vexpress单板支���是或不是够自身。

运营命令异常的粗略:

qemu-system-arm -M vexpress-a9 -m 512M -kernel
/home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic -append
“console=ttyAMA0” 

假定看到内核运转进程中的打字与印刷,表明前的搭建是打响的。 

此地差非常少介绍下qemu命令的参数:

-M vexpress-a9
模拟vexpress-a9单板,你能够运用-M
?参数来获得该qemu版本辅助的具备单板

-m 512M 单板运行物理内部存款和储蓄器512M

-kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage 
告诉qemu单板运维内核镜像路线

-nographic 不采取图形化分界面,只利用串口

-append
“console=ttyAMA0” 内核运维参数,这里告诉内核vexpress单板运转,串口设施是哪位tty。 

注意:

自家每一趟搭建,都忘了基石运转参数中的console=参数应该填上哪个tty,因为差别单板串口驱动类型不尽一样,创制的tty设备名当然也是分歧的。这vexpress单板的tty设备名是哪些吧?
其实这些值能够从变化的.config文件CONFIG_CONSOLE宏找到。

假定搭建此外单板,供给注意内核运维参数的console=参数值,同样地,可从调换的.config文件中找到。 

先安装QEMU.

再一次连接到调节和测试系统
target remote localhost:4321

成立根文件系统

到这里是还是不是马到功成了呢?
其实在上头的测试中,你会意识基本报panic,因为根本找不到根文件系统,无法启init进度。 

根文件系统要思索四个地方:

  1. 根文件系统的源委

    倘让你看过《Linux From
Scratch》,相信您会对这一步产生恐惧感,但借使直接致力嵌入式开拓,就能够放下心来。根文件系统正是轻易得不能够再轻巧的多少个命令集和态动态而已。为啥Linux
From
Scratch会有那么复杂,是因为它要创设出叁个Linux发生版。但在嵌入式领域,差不离具备的事物,都以mini版本,根文件系统也不例外。

   本文制本的根文件系统 =
busybox(包罗基础的Linux命令)  + 运营库 + 多少个字符设备

  1. 根文件系统放在何地

   
其实重视于每个开垦板协助的存款和储蓄设备,能够停放Nor
Flash上,也足以放手SDXC卡,以至外界磁盘上。最要紧的一些是你要理解明了开辟板有啥样存款和储蓄设备。

   
本文直接运用SDXC存储卡做为存款和储蓄空间,文件格式为ext3格式 

sudo aptitude install qemu

4,让系统运转实现(不计划调节和测试运转进度的话)
continue

下载、编译和安装busybox

 wget
 

make defconfig

make
CROSS_COMPILE=arm-linux-gnueabi-

make install 

安装完结后,会在busybox目录下转移_install目录,该目录下的主次便是单板运转所急需的吩咐。

 

施行上边包车型地铁通令来检查须求的CPU是或不是被扶助了. 纵然arm1176 被展现就OK.

5,让系统陷入调节和测试
在指标种类上输入
echo g > /proc/sysrq-trigge

变异根目录结构

先在Ubuntu主机意况下,产生目录结构,里面存放的公文和目录与单板上运营所急需的目录结构一模一样,然后再打包成镜像(在开拓板看来便是SD内部存储器卡),这一个有的时候的目录结构称为根目录

 

1.
 开立rootfs目录(根目录),根文件系统内的文件全体停放这里 

sudo mkdir rootfs 

  1. 拷贝busybox命令到根目录下 

sudo cp busybox-1.20.2/_install/* -r
rootfs/ 

3.
从工具链中拷贝运营库到lib目录下 

sudo cp -P /usr/arm-linux-gnueabi/lib/*
rootfs/lib/ 

  1. 始建4个tty端终设备

sudo mknodrootfs/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 

 arm1176 未曾被代表的话, 大概是重新编写翻译QEMU, 也许是寻找其余的Binary.

=======================
使用qemu gdb-stub使用:

制作根文件系统镜像

  1. 改换32M尺寸的镜像 

 dd if=/dev/zero of=a9rootfs.ext3 bs=1M
count=32 

  1. 格式化成ext3文件系统 

mkfs.ext3 a9rootfs.ext3 

  1.  将文件拷贝到镜像中 

sudo mkdir tmpfs

sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o
loop

 cp -r rootfs/*  tmpfs/

sudo umount tmpfs 

qemu-system-arm -cpu’?’ | grep arm1176

A Qemu debug memo 0) 安装qemu  sudo apt-get install qemu qtemu1)
创设rootfs imgqemu-img create rootfs.img 5G mkfs.ext3 -b 2048 rootfs.img
sudo mount -o loop rootfs.img /mnt2)
创制根文件系统未有?在虚拟机内设置二个精简的Ubuntu算了….3)启动qemu 
(-S 让qemu停止,并等待gdb的链接)qemu -kernel
export/common_pc-bzImage-WR2.0zz_cgl -hda rootfs.img -append
“root=/dev/hda” -S4) 在qemu窗口输入ctrl+alt+2  切换成qemu
调整台输入gdbserver 64435) 运转gdbgdb
common_pc-vmlinux-symbols-WR2.0zz_cgl>target remote 
127.0.0.1:6443> b start_kernel> c   6)tips—比方设置了运营b
fork, 在起步的时候能够c 50, 代表忽略50各类break point.  —Ctrl+C
就可以结束内核运维, bt能够看来方今运作的函数

系统运转运行

做到上述全数手续之后,就足以运转qemu来效仿vexpress开采板了,命令参数如下:

qemu-system-arm -M vexpress-a9 -m 512M -kernel
/home/ivan/qemu/linux/arch/arm/boot/zImage -nographic -append “root=/dev/mmcblk0 
console=ttyAMA0
-sd
a9rootfs.ext3**
 **

从基本运营打字与印刷,到命令行提醒符出现,动人心弦的天天出现了……

印象的下载

澳门金沙国际 2

写在前面包车型客车话

透过上边的手续,搭建出来四个小小的qemu+arm开荒情状,你能够上面包车型大巴根底上修修改改内核,或许扩充部分测试程序在单板上运营,以至采取单板的flash设备。

在此,你能够做纯arm架构的水源开荒,可能与架构毫无干系的根本开垦,也得以做单板相关的驱动开辟。

Linux入门求学课程:虚拟机体验之QEMU篇 
http://www.linuxidc.com/Linux/2015-03/114461.htm

Ubuntu 12.04之找不到Qemu命令
http://www.linuxidc.com/Linux/2012-11/73419.htm

Arch Linux上安装QEMU+EFI BIOS
http://www.linuxidc.com/Linux/2013-02/79560.htm

QEMU的翻译框架及调节和测试工具
http://www.linuxidc.com/Linux/2012-09/71211.htm

QEMU 代码分析:BIOS 的加载进度
http://www.linuxidc.com/Linux/2014-12/110472.htm

QEMU
的详细介绍
:请点这里
QEMU
的下载地址
:请点这里

本文恒久更新链接地址:http://www.linuxidc.com/Linux/2015-07/119764.htm

澳门金沙国际 3

创办合适的目录, 从 下载 Raspbian
影像并张开.

在同一个索引下从
下载内核影像文件.

率先次运营

进行上面包车型客车下令, 第三遍运行qemu.

qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb
-no-reboot -serial stdio -append”root=/dev/sda2 panic=1 rootfstype=ext4
rw init=/bin/bash”-hda 2013-09-25-wheezy-raspbian.img

编集/etc/ld.so.preload.

nano/etc/ld.so.preload

正如所示, 注释掉第一行并保留, 关闭文件.

#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so

上面包车型大巴手续可选。 QEMU 模拟器上磁盘是认作 /dev/sda , 不过出于实机上是认作
/dev/mmcblk0 所以要设定对应的符号链接。

 创造/etc/udev/rules.d/90-qemu.rules 并追加以下记录.

/etc/udev/rules.d/90-qemu.rules

KERNEL==”sda”, SYMLINK+=”mmcblk0″

KERNEL==”sda?”, SYMLINK+=”mmcblk0p%n”

KERNEL==”sda2″, SYMLINK+=”root”

结束。

exit

起动

初阶下边包车型客车吩咐。

qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb
-no-reboot -serial stdio -append”root=/dev/sda2 panic=1 rootfstype=ext4
rw”-hda 2013-09-25-wheezy-raspbian.img

用用户名: pi, 密码: raspberry 登入, 那样就会起动 X.

澳门金沙国际 4

有关选取

关于QEMU 起动时候的精选的验证整理了一下.

-kernel kernel-qemu

行使下载的内核影象 kernel-qemu.

-cpu arm1176

仿照ARM1176 CPU. Raspberry Pi 板上搭载了 Broadcom BCM2835,
那么些管理器用的是ARM1176JZ-F.

-m 256

RAM的深浅是256MB. 设定成比256MB大的值板子好像无法运维.

-M versatilepb

设定模拟的费用板类型. versatilepb 是 ARM Versatile Platform Board

-no-reboot

不重启退出.

-serial stdio

重定向Guest 的串口到Host的科公输盘入输出.

-append “root=/dev/sda2 panic=1 rootfstype=ext4 rw”

根本的吩咐行.

-hda 2013-09-25-wheezy-raspbian.img

Harddisk 0 使用 2013-09-25-wheezy-raspbian.img.

其他

就用那么的影象的话磁盘的闲暇体积相比少, 依照须求能够必要扩张磁盘的大小.
详细情形请参照 Raspberry Pi
のイメージファイルを拡張する.

参考

QEMU – Emulating Raspberry Pi the easy way (Linux or Windows!)
(http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/)

  • BCM2835
    (http://ja.broadcom.com/products/BCM2835) 

Raspberry Pi 山抛子派上安装韦斯顿
http://www.linuxidc.com/Linux/2013-06/86685.htm

用于Raspberry Pi 的Linux 操作系统已经可用
http://www.linuxidc.com/Linux/2012-03/56058.htm

Raspberry Pi(马林派)试用小记
http://www.linuxidc.com/Linux/2013-10/91008.htm

Raspberry Pi(大麦泡派)的安装、配置IP及软件源等入门
http://www.linuxidc.com/Linux/2013-10/91009.htm 

Ubuntu
12.04之找不到Qemu命令
http://www.linuxidc.com/Linux/2012-11/73419.htm

Arch Linux上安装QEMU+EFI BIOS
http://www.linuxidc.com/Linux/2013-02/79560.htm

QEMU的翻译框架及调节和测试工具
http://www.linuxidc.com/Linux/2012-09/71211.htm

QEMU
的详细介绍
:请点这里
QEMU
的下载地址
:请点这里

正文永远更新链接地址:http://www.linuxidc.com/Linux/2014-08/105511.htm

澳门金沙国际 5

相关文章