2021-08-26

Ubuntu 18.04 使用qemu搭建arm linux 开发环境

1.虚拟机安装Ubuntu:virtual box + ubuntu-18.04.5-desktop-amd64.ios 文件

虚拟机:下载地址
Ubuntu :下载地址
虚拟机安装Ubuntu教程:参考文章

2.必要工具

make 安装: sudo apt install make
vim 安装: sudo apt-get install vim
git 安装: sudo apt-get install git
ARM-Linux-GCC 交叉编译工具:
sudo apt-get install gcc-arm-linux-gnueabi

3.qemu安装:

自动安装: sudo apt-get install qemu
版本查看: qemu-img -V
2021-08-26_第1张图片支持开发板查看: qemu-system-arm -M help
此次以 vexpress-a9 为例
2021-08-26_第2张图片

3.linux 内核编译

[Linux-4.9.279下载地址]
1.解压
2.解压后,在linux-4.9.279目录下修改makefile
:vi Makefile
2021-08-26_第3张图片
3.按 i 修改交叉编译器配置(ARCH 和 CROSS_COMPILE),修改后的内容如下:
2021-08-26_第4张图片
完成后 esc,输入 :wq保存

4.配置对应的开发板,在linux-4.9.279目录下:make vexpress_defconfig
完成后,在linux-4.9.279目录下:ll,可以看到生成的.config文件。

5.编译zImage,在linux-4.9.279目录下:make zImage -j6

6.编译内核模块,在linux-4.9.279目录下:make modules -j4

7.编译dtbs文件,在linux-4.9.279目录下:make dtbs

4.qemu启动测试

linux-4.9.279目录下输入命令(注意修改路径):

qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/zhou/linux-4.9.279/arch/arm/boot/zImage -dtb /home/zhou/linux-4.9.279/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

出现以下打印:
pulseaudio: set_sink_input_volume() failed
pulseaudio: Reason: Invalid argument
pulseaudio: set_sink_input_mute() failed
pulseaudio: Reason: Invalid argument
Booting Linux on physical CPU 0x0
Linux version 4.9.279 (zhou@zhou-VirtualBox) (gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) ) #1 SMP Thu Aug 12 12:27:30 CST 2021
CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d
…直接跳转到结尾…
[end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]

说明内核编译成功,由于没有根文件系统,所以内核报错。

5.关闭qemu

1.打开新的终端,输入命令:ps -a
2.找到 qemu-system-arm 的 PID , 并输入命令 kill 相应的PID,终端显示 qemu-system-arm: terminating on signal 15 from pid 9064 (bash),即完成关闭qemu。

2021-08-26_第5张图片

6.制作根文件系统

1.下载busybox,并解压。版本:1.32.0
下载地址
2.修改Makefile中 CROSS_COMPILE 和 ARCH 内容。在busybox-1.32.0目录下
:vi Makefile
修改后的内容如下:

CROSS_COMPILE ?= arm-linux-gnueabi-
ARCH ?= arm

3.配置busybox。在busybox-1.32.0目录下:make defconfig
4.编译: make -j4
5.安装: make install。安装成功提示:

You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly.

6.回到home目录,
新建rootfs: mkdir rootfs
rootfs目录下: mkdir lib

拷贝busybox命令:sudo cp busybox-1.32.0/_install/* -r rootfs/
拷贝交叉编译器命令:sudo cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib/
rootfs目录下: mkdir dev
dev目录下
sudo mknod -m 666 tty1 c 4 1
sudo mknod -m 666 tty2 c 4 2
sudo mknod -m 666 tty3 c 4 3
sudo mknod -m 666 tty4 c 4 4
sudo mknod -m 666 console c 5 1
sudo mknod -m 666 null c 1 3

7.制作SD卡根文件系统
1.生成SD卡镜像:home 目录下: dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
2.格式化: mkfs.ext3 rootfs.ext3
3.挂载SD卡: mount -t ext3 rootfs.ext3 /mnt/ -o loop
4.复制rootf到SD: cp -r rootfs/* /mnt
5.卸载SD: umount /mnt

8.新建脚本,再次启动qemu(注意修改路径)

qemu-system-arm
-M vexpress-a9
-m 512M
-kernel /home/zhou/linux-4.9.279/arch/arm/boot/zImage
-dtb /home/zhou/linux-4.9.279/arch/arm/boot/dts/vexpress-v2p-ca9.dtb
-nographic
-append “root=/dev/mmcblk0 rw console=ttyAMA0”
-sd /home/zhou/rootfs.ext3

打印以下内容即为成功
Please press Enter to activate this console.

你可能感兴趣的:(ubuntu,linux,qemu)