失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > arm 开发环境搭建-基于QEMU和Docker

arm 开发环境搭建-基于QEMU和Docker

时间:2020-02-22 04:13:09

相关推荐

arm 开发环境搭建-基于QEMU和Docker

又花了半天的时间终于搞完了,实现了半自动化搭建环境.废话少说,开始了!!

主要思路:在Docker容器中交叉编译linux-3.16,busybox-1.20.2.在主机中制作根目录并搭建QEMU模拟硬件运行环境.

Docker镜像制作脚本Dockerfile如下:

FROM ubuntu:16.04WORKDIR /root/RUN apt-get update && apt-get install bc xz-utils bzip2 wget make gcc gcc-4.9-arm-linux-gnueabi vim -yADD busybox-1.20.2.tar.bz2 ./ADD linux-3.16.tar.xz ./COPY compile.sh mkvm.sh ./

由脚本可知需要在buid content(Dockerfile文件所在的目录)中准备四个文件(下载连接 busybox,linux):

## 源文件busybox-1.20.2.tar.bz2 linux-3.16.tar.xz## shell 脚本compile.sh // 编译源文件mkvm.sh // 从编译完成的文件中收集QEMU运行所需要的文件,并打包成vm.tar.bz2

#!/bin/bash# fileName: compile.sh# Date: Sun 17 Jun 05:12:05 PM CST# Author: light# link arm-gcc[ ! -f /usr/bin/arm-linux-gnueabi-gcc ] && ln -s /usr/bin/arm-linux-gnueabi-gcc-4.9 /usr/bin/arm-linux-gnueabi-gcc# compile busyboxcd /root/busybox-1.20.2/[ ! -f include/.libbb.h ] && cp include/libbb.h include/.libbb.hsed '43i #include<sys/resource.h>' include/.libbb.h > include/libbb.h # why? 请参考我的文章 交叉编译busyboxmake defconfigmake CROSS_COMPILE=arm-linux-gnueabi-make install CROSS_COMPILE=arm-linux-gnueabi-# compile kernelcd /root/linux-3.16/make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfigmake CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

#!/bin/bash# fileName: mkvm.sh# Date: Sun 17 Jun 05:13:40 PM CST# Author: light# collect files to rootfs/cd /root/mkdir -p vm/rootfs/{proc,etc/init.d,sys,tmp,root,var,mnt,lib,dev}cp busybox-1.20.2/_install/* vm/rootfs/ -rcp busybox-1.20.2/examples/bootfloppy/etc/* vm/rootfs/etc/ -rcp /usr/arm-linux-gnueabi/lib/* vm/rootfs/lib/ -Pr dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32mkfs.ext3 a9rootfs.ext3mv a9rootfs.ext3 vm/a9rootfs.ext3cp linux-3.16/arch/arm/boot/dts/vexpress-v2p-ca9.dtb vm/ cp linux-3.16/arch/arm/boot/zImage vm/ # generate boot.sh mkrootfs.shcat > vm/boot.sh << EOFqemu-system-arm -M vexpress-a9 -m 512M -kernel ./zImage -dtb ./vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3EOFcat > vm/mkrootfs.sh << EOFsudo mknod ./rootfs/dev/tty1 c 4 1sudo mknod ./rootfs/dev/tty2 c 4 2sudo mknod ./rootfs/dev/tty3 c 4 3sudo mknod ./rootfs/dev/tty4 c 4 4mkdir tmpfssudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loopsudo cp rootfs/* tmpfs/ -rsudo umount tmpfs/EOF# tartar cjf vm.tar.bz2 vm/ rm -fr vm

此时build content中有五个文件:

light@light-Inspiron-3559 ~/Docker/arm $ lsbusybox-1.20.2.tar.bz2 compile.sh Dockerfile linux-3.16.tar.xz mkvm.sh

build一下,"镜子"就做好了:

light@light-Inspiron-3559 ~/Docker/arm $ docker build -t arm-compil ./light@light-Inspiron-3559 ~/Docker/arm $ docker images | grep armarm-compile latest 1bb5ddf21eca About an hour ago 929MB

足足有1G....^.^```

构建容器:

light@light-Inspiron-3559 ~/Docker/arm $ docker run --name arm -ti arm-compil /bin/bash

编译源文件:

root@5845a78f3cc9:~# bash compile.sh

从编译完成的文件中收集QEMU运行所需要的文件,并打包成vm.tar.bz2:

root@5845a78f3cc9:~# bash mkvm.sh 32+0 records in32+0 records out33554432 bytes (34 MB, 32 MiB) copied, 0.01 s, 1.7 GB/smke2fs 1.42.13 (17-May-)Discarding device blocks: done Creating filesystem with 32768 1k blocks and 8192 inodesFilesystem UUID: 821b2aaf-7ce0-498b-b5f4-8d47824d68ecSuperblock backups stored on blocks: 8193, 24577Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): doneWriting superblocks and filesystem accounting information: doneroot@5845a78f3cc9:~# ls vm.tar.bz2 vm.tar.bz2

从容器中导出文件至host:

light@light-Inspiron-3559 ~/Docker/arm $ docker cp arm:/root/vm.tar.bz2 ./light@light-Inspiron-3559 ~/Docker/arm $ ls vm.tar.bz2 vm.tar.bz2

解包,切换文件,构建根文件:

light@light-Inspiron-3559 ~/Docker/arm $ tar xjf vm.tar.bz2 ; cd vmlight@light-Inspiron-3559 ~/Docker/arm/vm $ bash mkrootfs.sh [sudo] password for light:

启动:

light@light-Inspiron-3559 ~/Docker/arm/vm $ bash boot.sh

/ # cat /proc/cpuinfo processor: 0model name: ARMv7 Processor rev 0 (v7l)Features: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpd32 CPU implementer: 0x41CPU architecture: 7CPU variant: 0x0CPU part: 0xc09CPU revision: 0Hardware: ARM-Versatile ExpressRevision: 0000Serial: 0000000000000000/ #

相关文件已上传至github.

参考文章:

从零使用qemu模拟器搭建arm运行环境

使用qemu模拟器搭建arm运行环境

================================================

修改排版问题Sun Jun 17 19:22:32 CST

================================================

添加相关文件github连接Sun Jun 17 19:52:55 CST

如果觉得《arm 开发环境搭建-基于QEMU和Docker》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。