Qemu + Linux + Rootfs

1. Ubuntu环境

编译Linux需要在Linux下进行,需要先有一个Ubuntu或者其他的Linux环境,我使用的是64位Ubuntu 16.04

2.下载 Linux 源码.

请访问:  https://www.kernel.org/pub/linux/kernel/v4.x/

选择一个版本,然后保存到本地

我选择 linux-4.1.49.tar.gz

3. 解压Linux源码

$tar xvf linux-4.1.49.tar.gz

4. 编译 

本地PC环境:

Ubuntu 16.04 64位

4.1 编译x86_64版本

$make menuconfig

会提示如下窗口,你可以对kernel进行定制化

Qemu + Linux + Rootfs

你可以点击Exit退出

$make 

最终编译成功,会产生 zImage文件 arm/x86/boot目录下

[email protected]:~/Workspace/project/linux-4.1.49-pc/arch/x86_64/boot$ ls -la
total 8
drwxrwxr-x 2 nap nap 4096 Apr 24 02:43 .
drwxrwxr-x 3 nap nap 4096 Apr 24 02:43 ..
lrwxrwxrwx 1 nap nap   22 Apr 24 02:43 bzImage -> ../../x86/boot/bzImage

[email protected]:~/Workspace/project/linux-4.1.49-pc/arch/x86_64/boot$

x86_64 is same to x86


About how to run this Linux, please see 5.1

4.2 编译arm版本

$export PATH=/home/rueco/workspace/open-source/toolchains/aarch32/bin:$PATH

$export ARCH=arm

$export CROSS_COMPILE=arm-linux-gnueabihf-

$make vexpress_defconfig

$make uImage LOADADDR=0x60003000

$make

前提条件:

你需要安装交叉编译器, 交叉编译器有很多种, 我选择了linaro的交叉编译器

https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/arm-linux-gnueabihf/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf..tar.xz

你需要解压到 /home/reck/workspace/open-source/toolchains/aarch32/bin, 这里假设你的用户名是 rueco, 根据你的用户名进行调整

5 如何运行linux kernel

你可以使用Qemu运行kernel, 你需要首先安装Qemu. 详见我的另一篇关于Qemu使用的文章。

5.1 x86_64

qemu-system-x86_64  -kernel u-boot -m 256M -nographic

5.2 arm

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

无论使用上述哪种方式,你都会遇到下面的错误:


至此, 你应该具有调试Kernel的能力


6 如何构建文件系统