ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

QEMU 调试imx6ull 环境搭建

2021-03-14 16:58:35  阅读:778  来源: 互联网

标签:gnueabihf QEMU system linux imx6ull qemu arm 调试


日常记录,根据韦东山资源配置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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有