“100ask imx6ul qemu”的版本间的差异

来自百问网嵌入式Linux wiki
第43行: 第43行:
  
 
==操作示例==
 
==操作示例==
*获取IP地址
+
'''获取IP地址'''<br>
QEMU运行时,主机即给Ubuntu的IP是10.0.2.2
+
:QEMU运行时,主机即给Ubuntu的IP是10.0.2.2
 
  ifconfig eth0 10.0.2.15
 
  ifconfig eth0 10.0.2.15
*挂载主机nfs目录
+
'''挂载主机nfs目录'''
QEMU模拟的开发板,可以去访问10.0.2.2,比如使用NFS挂载:
+
:QEMU模拟的开发板,可以去访问10.0.2.2,比如使用NFS挂载:
 
  mount -t nfs -o nolock,vers=3 10.0.2.2:/home/book/nfs_rootfs /mnt
 
  mount -t nfs -o nolock,vers=3 10.0.2.2:/home/book/nfs_rootfs /mnt
*测试lcd显示
+
'''测试lcd显示'''
**画同心圆
+
*画同心圆
 
  myfb-test  /dev/fb0
 
  myfb-test  /dev/fb0
**测试LCD
+
*测试LCD
 
  fb-test  
 
  fb-test  
**显示文字
+
*显示文字
 
  show_font  
 
  show_font  
*编写并测试led驱动
+
'''编写并测试led驱动'''
**安装编译好的led模块驱动
+
*安装编译好的led模块驱动
 
  insmod 100ask_led.ko
 
  insmod 100ask_led.ko
::*打开并关闭led显示
+
*打开并关闭led显示
 
  ledtest  /dev/100ask_led0  on
 
  ledtest  /dev/100ask_led0  on
 
  ledtest  /dev/100ask_led0  off
 
  ledtest  /dev/100ask_led0  off
*编写并测试i2c驱动
+
'''编写并测试i2c驱动'''
. 不需要写I2C驱动,可以通过用户态使用内核里自带的I2C接口访问外设:
+
:不需要写I2C驱动,可以通过用户态使用内核里自带的I2C接口访问外设:<br>
假设AT24C02接在IMX6UL的I2C0总线上,
+
:假设AT24C02接在IMX6UL的I2C0总线上,AT24C02的地址是0x50,<br>
AT24C02的地址是0x50,
+
:可以执行下面的命令写AT24C02的0地址,读其0地址:<br>
可以执行下面的命令写AT24C02的0地址,读其0地址:
+
i2c_usr_test  /dev/i2c-0  0x50  w 0  0x12
i2c_usr_test  /dev/i2c-0  0x50  w 0  0x12
+
i2c_usr_test  /dev/i2c-0  0x50  r 0
i2c_usr_test  /dev/i2c-0  0x50  r 0
 
  
 
=高级玩法=
 
=高级玩法=

2019年11月1日 (五) 11:13的版本

qemu简介

QEMU(Quick EMUlator的缩写)是执行硬件虚拟化的免费开源模拟器。
它通过动态二进制转换来模拟计算机的处理器,并为计算机提供一组不同的硬件和设备模型,从而使其能够运行各种来宾操作系统。
它还可以与KVM一起使用,以接近自然的速度运行虚拟机(通过利用诸如IntelVT-x之类的硬件扩展)。QEMU还可以对用户级进程进行仿真,从而允许针对一种架构编译的应用程序可以在另一种架构上运行。

快速使用

准备工作

  • 必须
    • 一台可以上网的windows电脑
    • 一个可以正常使用Ubuntu虚拟机系统
  • 可选
    • MobaXterm_Portable_v12.0.zip
    • 安装kvm加速qemu运行,在终端下执行如下命令
$ sudo apt update
$ sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager

获取镜像

点击如下链接下载

下载完成后上传到Ubuntu虚拟机中,并解压缩,解压缩后执行如下命令

运行qemu系统

打开终端,在解压后的当前目录下执行如下命令

qemu-system-arm -M mcimx6ul-evk    -m 512M -kernel zImage \
-dtb   -display sdl -serial mon:stdio \
-drive  file=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

等待运行

参数讲解

-M mcimx6ul-evk 指定需要模拟的单板型号。
-m 512M 指定模拟使用的内存大小。
-kernel zImage指定使用的内核镜像文件。
-dtb 指定使用的设备树文件。
-display sdl指定使用那种显示输出。
-serial mon:stdio指定串口信息输出。
-drive file=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指定使用NAT共享主机网络方式上网。

操作示例

获取IP地址

QEMU运行时,主机即给Ubuntu的IP是10.0.2.2
ifconfig eth0 10.0.2.15

挂载主机nfs目录

QEMU模拟的开发板,可以去访问10.0.2.2,比如使用NFS挂载:
mount -t nfs -o nolock,vers=3 10.0.2.2:/home/book/nfs_rootfs /mnt

测试lcd显示

  • 画同心圆
myfb-test  /dev/fb0
  • 测试LCD
fb-test 
  • 显示文字
show_font 

编写并测试led驱动

  • 安装编译好的led模块驱动
insmod 100ask_led.ko
  • 打开并关闭led显示
ledtest  /dev/100ask_led0  on
ledtest  /dev/100ask_led0  off

编写并测试i2c驱动

不需要写I2C驱动,可以通过用户态使用内核里自带的I2C接口访问外设:
假设AT24C02接在IMX6UL的I2C0总线上,AT24C02的地址是0x50,
可以执行下面的命令写AT24C02的0地址,读其0地址:
i2c_usr_test   /dev/i2c-0  0x50  w 0  0x12
i2c_usr_test   /dev/i2c-0  0x50  r 0

高级玩法

获取源码

类别 国内coding仓库 国外github仓库
linux kernel https://git.dev.tencent.com/weidongshan/qemu_imx6ull_kernel.git https://github.com/100askTeam/qemu_imx6ull_kernel.git
qemu 源码
buildroot

编译运行源码

制作文件系统

$ dd if=/dev/zero of=rootfs.img bs=1M count=300
$ mkfs.ext4 rootfs.img   
$ mkdir ./tmp
$ sudo mount -o loop rootfs.img  ./tmp

拷贝源码到挂载的tmp目录下,等待拷贝完成

执行 sync 同步更新

$ umount ./tmp

kgdb调试内核源码

编译内核镜像

等待编译生成的 vmlinux 带符号表的文件,以及zImage 和设备树文件

运行qemu

qemu-system-arm -M mcimx6ul-evk    -m 512M -kernel zImage \
-dtb   -display sdl -serial mon:stdio \
-drive  file=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

运行gdb程序调试

$ arm-linux-gnueabihf-gdb -tui vmlinux

连接到qemu模拟的系统

(gdb) target remote localhost:1234

其它相关

QQ交流群
100ask imx6ul qemu board.png
imx6ul-qemu交流群

QQ群号:542662930

Roc-rk3399-pc wiki HomeLocation.png
roc-rk3399-pc开发板交流群

QQ群号893369799

Firefly-rk3288 wiki HomeLocation.png
firefly rk3288开发板讨论群

QQ群号664397968

100ask-am335x wiki HomeLocation.png
100ask am335x开发板交流群

QQ群号904101325

Fire-imx6ull pro HomeLocation.png
野火imx6ull-pro开发板交流群

QQ群号:738136869