ubuntu 16.04 + linux 5.0

完整的记录了qemu搭建arm开发环境的过程:

以下内容转载:

作者:海枫 
来源:CSDN 
原文:https://blog.csdn.net/linyt/article/details/42504975 

 


本文记录用ubuntu16.04搭建qemu的过程:

参考出处:https://blog.csdn.net/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文件中找到。
--------------------- 
作者:海枫 
来源:CSDN 
原文:https://blog.csdn.net/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格式
--------------------- 
作者:海枫 
来源:CSDN 
原文:https://blog.csdn.net/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
--------------------- 
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值