其他分享
首页 > 其他分享> > QEMU 调试imx6ull 环境搭建

QEMU 调试imx6ull 环境搭建

作者:互联网

日常记录,根据韦东山资源配置qemu,搭建imx6ull仿真环境, 可适当修改调试X86平台内核

1. 数据资源获取

http://wiki.100ask.org/Qemu

git clone https://e.coding.net/codebug8/repo.git
mkdir -p 100ask_imx6ull-qemu && cd 100ask_imx6ull-qemu
../repo/repo init -u https://e.coding.net/weidongshan/manifests.git -b linux-sdk -m imx6ull/100ask-imx6ull_qemu_release_v1.0.xml --no-repo-verify
../repo/repo sync -j4

2.内核编译脚本

#!/bin/sh
# 清除安装残余文件
# make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- 100ask_imx6ull_qemu_defconfig
# 图形化配置
make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- menuconfig
# 编译所有,包括设备树,驱动,内核镜像
make ARCH=arm CROSS_COMPILE=/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- all -j2

3.QEMU 启动 imu6ull 脚本

#!/bin/bash

workdir=$(dirname $0);
	$workdir/qemu/bin/qemu-system-arm -M mcimx6ul-evk    -m 512M -kernel $workdir/imx6ull-system-image/zImage \
		-dtb $workdir/imx6ull-system-image/100ask_imx6ull_qemu.dtb  \
 -nographic -serial mon:stdio \
 -drive  file=$workdir/imx6ull-system-image/rootfs.img,format=raw,id=mysdcard -device sd-card,drive=mysdcard \
 -append "console=ttymxc0,115200 rootfstype=ext4 root=/dev/mmcblk1  rw rootwait init=/sbin/init  loglevel=8" \
 -nic user \
 -S -s
# -M mcimx6ul-evk : 选择芯片板子,百问网自制,若调试X86平台,无需此项
# -m 512M : guest虚拟机预留的内存大小,如果不指定,默认大小是128M
# -kernel $workdir/imx6ull-system-image/zImage :内核镜像文件地址
# -dtb $workdir/imx6ull-system-image/100ask_imx6ull_qemu.dtb  : 设备树地址
# -nographic :启动的是非图形界面的
# -serial mon:stdio : 信号捕获使用,意味^C将传给guest使用。
# -drive  file=$workdir/imx6ull-system-image/rootfs.img,format=raw,id=mysdcard : 添加驱动
# -device sd-card,drive=mysdcard 
# -append "cmdline" :使用“cmdline"作为内核命令行
#  -nic user : 设置客户机所在子网,缺省值是10.0.2.0/24。
# -S : QEMU虚拟机会冻结CPU,直到远程的GDB输入相应控制命令。
# -s : 表示在1234端口接受GDB的调试连接.

4. GDB调试内核启动

# QEMU 启动 imu6ull
>> ./qemu-imx6ull-nogui.sh
qemu-system-arm: warning: nic imx.enet.0 has no peer
qemu-system-arm: warning: nic imx.enet.1 has no peer
# 等待GDB调试

# 另建终端,进入linux内核根目录,编译后会存在vmlinux文件
>> arm-linux-gnueabihf-gdb
# 载入vmlinxu文件
(gdb) file vmlinux
Reading symbols from vmlinux...done.
# 连接远程端口1234
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x80000000 in ?? ()
# 内核启动函数断点
(gdb) b start_kernel 
Breakpoint 1 at 0x80e008dc: file init/main.c, line 486.
# 运行至断点
(gdb) c

# qemu终端显示linux内核打印信息

5.配置NFS服务, qemu运行arm架构程序

5.1 主机安装NFS环境

sudo apt-get install nfs-kernel-server

5.2 修改/etc/exports,文件末尾添加数据共享文件夹

/demo_absolute_path *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
# 共享文件绝对地址 *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

5.3 重启NFS服务器

sudo /etc/init.d/nfs-kernel-server restart

5.4 主机挂载nfs

sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/demo_mount_path  /mnt
ls /mnt

5.5 从机挂载主机nfs目录

QEMU运行时,Ubuntu是Host即宿主机,QEMU给它分配的IP是10.0.2.2。
QEMU模拟的imx6ull板子是Guest即客户机,它会自动获取IP,也可以自己设置。
Guest可以通过10.0.2.2访问Host,Host不能访问Guest。

mount -t nfs -o nolock,vers=3 10.0.2.2:/demo_mount_path /mnt

主机交叉编译文件,放置在/demo_mount_path目录内, 从机在/mnt内运行测试。

标签:gnueabihf,QEMU,system,linux,imx6ull,qemu,arm,调试
来源: https://blog.csdn.net/Jony_T/article/details/114790307