上面是我的微信和QQ群,欢迎新朋友的加入。
这两天需要调调驱动
但是手头没板子,想到装一个qemu跑一下虚拟算了
安装
sudo apt-get update
sudo apt-get install qemu
sudo apt-get install qemu-kvm
sudo apt-get install qemu-system-x86
sudo apt-get install qemu-system-arm
sudo apt install qemu-user
sudo apt install make
sudo apt install gcc
sudo apt install git
sudo apt install flex
sudo apt install bison
sudo apt-get install libncurses5-dev
sudo apt-get install gcc-arm-linux-gnueabi
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
sudo apt-get install gettext
目前GCC版本是
下载linux源码和buildroot源码
https://buildroot.org/download.html
http://www.kernel.org
编译LINUX
用vexpress_defconfig,这个网上用的人多一点
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
修改顶层makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabi-
编译
make
make modules
make dtbs
ls arch/arm/boot/dts/vexpress*
ls arch/arm/boot/
生成镜像文件
在上层目录,创建一个文件夹叫image,用于存放编译出来的镜像文件
写一个脚本用于自动拷贝镜像
#!/bin/bash
cp ../linux-5.12.9/arch/arm/boot/zImage ./
cp ../linux-5.12.9/arch/arm/boot/dts/vexpress-v2p-ca9.dtb ./
再创建一个脚本文件用于启动qemu
qemu-system-arm -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
运行,显示启动失败,这是正确的结果,因为文件系统还没做
编译buildroot
下载地址:https://busybox.net/
进入文件系统目录
make list-defconfigs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- qemu_arm_vexpress_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
直接用现成的配置
编译busybox
buildroot比较大,也可以用一个小点的文件系统
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make menuconfig
配置
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
编译完成
编译完成后,会在_install目录下生成需要的文件
接下来就开始制作根文件系统 -创建根目录rootfs
sudo mkdir rootfs1
-复制busybox命令到根目录下
sudo cp -r busybox-1.27.2/_install/* rootfs/1
-从工具链中复制运行库到lib目录下
sudo mkdir rootfs/lib
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib12
-创建4个tty终端设备(c代表字符设备,4是主设备号,1~4分别是次设备号)
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 412345
-生成镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=321
-格式化生成ext3文件系统
mkfs.ext3 a9rootfs.ext31
成功后显示如下
-将文件复制到镜像中
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
可以制作成脚本
#!/bin/bash
sudo rm -rf rootfs
sudo rm -rf tmpfs
sudo rm -f a9rootfs.ext3
#创建根目录rootfs
sudo mkdir rootfs
#复制busybox命令到根目录下,注意busybox路径!划重点!
sudo cp -r ../busybox-1.33.1/_install/* rootfs/
#从工具链中复制运行库到lib目录下
sudo mkdir rootfs/lib
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib
#创建4个tty终端设备(c代表字符设备,4是主设备号,1 2 3 4分别是次设备号
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
#生成镜像
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
#格式化生成ext3文件系统
mkfs.ext3 a9rootfs.ext3
#将文件复制到镜像中
sudo mkdir tmpfs
sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
启动
修改一下启动QEMU的脚本
#!/bin/bash
qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-nographic \
-append "root=/dev/mmcblk0 console=ttyAMA0 rw init=/linuxrc" \
-sd a9rootfs.ext3
正常启动
退出的方法是CTRL+A,然后按X