虚拟开发板-Linux环境搭建

  本章介绍使用qemu搭建Linux开发环境
Linux

1.Linux源码下载

Linux Source: https://www.kernel.org/

2.编译过程

1
2
3
4
5
6
7
8
9
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make vexpress_defconfig
#生成zImage
make -j4
#下面这条会生成uImage供uboot使用
make uImage LOADADDR=0x60003000
make modules
make dtbs

3.各种镜像格式介绍

  • vmlinux编译出来的最原始的内核elf文件,未压缩。
  • zImage是vmlinux经过objcopy gzip压缩后的文件, objcopy实现由vmlinux的elf文件拷贝成纯二进制数据文件。
  • bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
  • uImageU-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
  • vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
  • initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。

    3.qemu启动

    1
    qemu-system-arm -nographic  -sd vexpress.img -M vexpress-a9   -m 512M -kernel ./arch/arm/boot/zImage -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -smp 4 -append " earlyprintk console=ttyAMA0"
    在启动文件系统的时候出错,那是因为我们还没有制作根文件系统

    4.生成根文件系统

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    qemu-img create -f raw vexpress.img 100M
    fdisk vexpress.img #在其中进行分区
    sudo losetup /dev/loop0 vexpress.img #将image挂载到loop0上
    sudo partx -u /dev/loop0 #刷新分区
    sudo mkfs.ext3 /dev/loop0p1
    mkdir rootfs
    sudo mount -o loop /dev/loop0p1 ./rootfs #将rootfs挂载到loo0p1


    sudo partx -d /dev/loop0 #卸载
    sudo losetup -d /dev/loop0 #卸载

5.生成根文件系统

5.1编译BusyBox

1
2
3
4
5
6
7
8
9
配置成下面这种方式:

Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
(arm-linux-gnueabihf-) Cross Compiler prefix

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make install # 在 ./_install/下生成文件

出现下面输出说明生成成功

5.2制作根文件系统

拷贝运行库

1
2
3
4
cp -arf _install/* rootfs/
cp -arf arm-linux-gcc/lib/* rootfs
rm lib/*.a
arm-linux-gnueabihf-stripe lib/*

创建文件夹

1
2
3
4
5
6
sudo mkdir -p rootfs/proc/
sudo mkdir -p rootfs/sys/
sudo mkdir -p rootfs/tmp/
sudo mkdir -p rootfs/root/
sudo mkdir -p rootfs/var/
sudo mkdir -p rootfs/mnt/

创建节点

1
2
3
4
5
6
7
sudo mkdir -p rootfs/dev/
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
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3

添加配置文件

1
参考linux启动过程章节

6.启动命令

1
qemu-system-arm -nographic  -sd vexpress.img -M vexpress-a9   -m 512M -kernel ./arch/arm/boot/zImage -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -smp 4 -append "noinitrd root=/dev/mmcblk0p1 rw rootwait earlyprintk console=ttyAMA0" -net nic,vlan=0 -net tap,vlan=0,ifname=tap30,script=no,downscript=no

7.关闭qemu

1
ps -A | grep qemu-system-arm | awk '{print $1}' | xargs sudo kill -9

Linux

8.网络配置

1
2
3
4
sudo apt-get install uml-utilities
sudo apt-get install bridge-utils
sudo tunctl -u root -t tap30 #在主机上创建tap30设备
ifconfig tap30 192.168.111.1 promisc up #启用设备,并设置为混杂模式

再启动脚本中添加如下几行,以使用网络

1
-net nic,vlan=0 -net tap,vlan=0,ifname=tap30,script=no,downscript=no

进入虚拟机后使用

1
ifconfig eth0 192.168.111.2 promisc up #启用设备

版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。

原文地址:https://coderdock.com

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2020 Dock
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信