REFERENCE
Author: Wen Pingbo
利用
qemu
模拟嵌入式系统制作全过程
by Pingbo Wen of
TinyLab.org
2013/08/31
这篇文章,将介绍如何用
qemu
来搭建一个基于
ARM
的嵌入式
linux
系统。通过该文章,你可以学习到如何配置
kernel
,如何
交叉编译
kernel
,如何配置
busybox
并编译,如何制作
initramfs
,如何制作根文件系统,如何定制自己的
uboot
,如何通过
uboot
向
kernel
传递参数等。开始干活!
零、环境搭建
在实现我们的目标之前,我们需要搭建自己的工作环境。在这里,假设你的主机上已经有
gcc
本地编译环境,并运行
Ubuntu
12.10
。但是这并不影响在其他的
linux
平台上进行,只要修改一下对应的命令就可以了。
首先,我们需要下载一个
ARM
交叉工具链。你可以在网上下载源码自己编译,也可以下载已经编译好的工具链。在工具链
中有基本的
ARM
编译工具,比如:
gcc, gdb, addr2line, nm, objcopy, objdump
等。可能你会问,这些工具本机不是已经
有了么?如果不出意外,我想你的主机应该是
x86
架构的。不同的架构,有不同的指令集,你不能拿一个
x86
的执行文件放
到一个
ARM
机器上执行。所以我们需要一个能够在
x86
架构上生成
ARM
可执行程序的
GCC
编译器。有很多预先编译好的
ARM
工具链,这里使用的是
CodeSourcery[1]
。更多关于
toolchain
的信息可以在
elinux.org
找到
[2]
。下载下来后,直接解
压,放到某个目录,然后配置一下
PATH
环境变量,这里是这样配置的:
1
export PATH=~/arm-
2013.05/bin:$PATH
配置完
ARM
交叉工具链后,我们需要下载一些源码,并安装一些软件。命令如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# install qemu
sudo apt-
get install qemu qemu-
kvm qemu-
kvm-
extras qemu-
user qemu-
system
# install mkimage tool
sudo apt-
get install uboot-
mkimage
# install git
sudo apt-
get install git
# prepare related directory
mkdir -
pv ~/armsource/{kernel,uboot,ramfs,busybox}
# download latest kernel stable code to kernel dir
git clone http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-
stable.git ~/armsource/kernel
# download latest u-
boot code to uboot dir
git clone git://git.denx.de/u-
boot.git ~/armsource/uboot
# download latest busybox code to busybox dir
git clone git://busybox.net/busybox.git ~/armsource/busybox