完整的记录了qemu搭建arm开发环境的过程:
以下内容转载:
作者:海枫
来源:优快云
原文:https://blog.youkuaiyun.com/linyt/article/details/42504975
本文记录用ubuntu16.04搭建qemu的过程:
参考出处:https://blog.youkuaiyun.com/linyt/article/details/42504975
第一步到www.kernel.org上下载linux源码,我用的是最新的5.1的内核
第二步 安装arm的交叉编译工具链
sudo apt-get install gcc-arm-linux-gnueabi
第三步编译内核:
生成vexpress开发板子的config文件:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
期间会出现如下错误:
/bin/sh: 1: bison: not found scripts/Makefile.lib:217: recipe for target 'scripts/kconfig/zconf.tab.c' failed make[2]: ***
[scripts/kconfig/zconf.tab.c] Error 127 Makefile:514: recipe for target 'silentoldconfig' failed
百度后得知:
安装sudo apt-get install bison
继续执行上面的make 命令
又出现如下错误:
scripts/Makefile.lib:194: recipe for target 'scripts/kconfig/lexer.lex.c' failed
make[1]: *** [scripts/kconfig/lexer.lex.c] Error 127
Makefile:552: recipe for target 'vexpress_defconfig' failed
make: *** [vexpress_defconfig] Error 2
需要安装:
sudo apt-get install flex
至此,上面的make crose_compile命令完成
下面开始编译
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
第四步:安装qemu,一是命令安装,而是直接下载源码安装,下面用的是命令安装
sudo apt-get install 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"
这里简单介绍下qemu命令的参数:-M vexpress-a9 模拟vexpress-a9单板,
你可以使用-M ?参数来获取该qemu版本支持的所有单板-m 512M 单板运行物理内存512M-kernel /path/to/kernel/dir/arch/arm/boot/zImage
告诉qemu单板运行内核镜像路径-nographic 不使用图形化界面,只使用串口-append "console=ttyAMA0" 内核启动参数,这里告诉内核vexpress单板运行,
串口设备是那个tty。
注意:我每次搭建,都忘了内核启动参数中的console=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也是不相同的。
那vexpress单板的tty设备名是哪个呢? 其实这个值可以从生成的.config文件CONFIG_CONSOLE宏找到。如果搭建其它单板,需要注意内核启动参数的console=参数值,
同样地,可从生成的.config文件中找到。
---------------------
作者:海枫
来源:优快云
原文:https://blog.youkuaiyun.com/linyt/article/details/42504975
版权声明:本文为博主原创文章,转载请附上博文链接!
因为没有根文件系统,所以内核无法启动,报如下错误:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.1.7 #1
Hardware name: ARM-Versatile Express
[<801106cc>] (unwind_backtrace) from [<8010c66c>] (show_stack+0x10/0x14)
[<8010c66c>] (show_stack) from [<80719d20>] (dump_stack+0x84/0x98)
[<80719d20>] (dump_stack) from [<80120824>] (panic+0x110/0x2cc)
[<80120824>] (panic) from [<80a0165c>] (mount_block_root+0x1d0/0x2bc)
[<80a0165c>] (mount_block_root) from [<80a01890>] (mount_root+0x148/0x164)
[<80a01890>] (mount_root) from [<80a019fc>] (prepare_namespace+0x150/0x198)
[<80a019fc>] (prepare_namespace) from [<80732660>] (kernel_init+0x8/0x114)
[<80732660>] (kernel_init) from [<801010e8>] (ret_from_fork+0x14/0x2c)
Exception stack(0x9e4a1fb0 to 0x9e4a1ff8)
1fa0: 00000000 00000000 00000000 00000000
1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
1fe0: 00000000 00000000 00000000 00000000 00000013 00000000
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
本文制本的根文件系统 = busybox(包含基础的Linux命令) + 运行库 + 几个字符设备2. 根文件系统放在哪里
其实依赖于每个开发板支持的存储设备,可以放到Nor Flash上,也可以放到SD卡,甚至外部磁盘上。
最关键的一点是你要清楚知道开发板有什么存储设备。 本文直接使用SD卡做为存储空间,文件格式为ext3格式
---------------------
作者:海枫
来源:优快云
原文:https://blog.youkuaiyun.com/linyt/article/details/42504975
版权声明:本文为博主原创文章,转载请附上博文链接!
第五步制作根文件系统
5.1,先下载busybox
wget http://www.busybox.net/downloads/busybox-1.20.2.tar.bz2
编译之前要修改一下
在inlcude/libbb.h里加入一行:#include "sys/resource.h"
否则会报错,
然后编译busybox:
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
形成根目录结构先在Ubuntu主机环境下,形成目录结构,里面存放的文件和目录与单板上运行所需要的目录结构完全一样,
然后再打包成镜像(在开发板看来就是SD卡),这个临时的目录结构称为根目录
1. 创建rootfs目录(根目录),
根文件系统内的文件全部放到这里mkdir -p rootfs/{dev,etc/init.d,lib}
2. 拷贝busybox命令到根目录下sudo cp busybox-1.20.2/_install/* -r rootfs/
3. 从工具链中拷贝运行库到lib目录下sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
4. 创建4个tty端终设备
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
制作根文件系统镜像
1. 生成32M大小的镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
2. 格式化成ext3文件系统mkfs.ext3 a9rootfs.ext3
3.将文件拷贝到镜像中
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
系统启动运行完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,
命令参数如下: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 "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
---------------------