一.Qemu镜像下载
准备环境 vmware ubuntu18.04 git工具
下载镜像文件

root@ubuntu:/home/mf/Desktop# git  clone  https://e.coding.net/weidongshan/ubuntu-18.04_imx6ul_qemu_system.git

成功后可以得到一个名为“ubuntu-18.04_imx6ul_qemu_system”的目录,里面有以下内容:


二.运行QEMU系统
1.首次运行需要安装SDL环境

root@ubuntu:/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system# ./install_sdl.sh           // 提示输入用户密码,等待安装完成

2.运行带GUI的imx6ul模拟器–模拟百问网imx6ul-qemu开发板

root@ubuntu:/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system# ./qemu-imx6ull-gui.sh  // 启动后,登录名是root,无需密码

输入以上命令启动开发板,进入如下界面,在login处输入用户名:root

成功进入到qemu模拟的imx6ul开发板的界面,如下:

三.获取源码
1.先用git clone下载repo工具,再用repo工具下载源码(repo工具管理代码)
(1)下载repo工具

root@ubuntu:~# git clone https://e.coding.net/codebug8/repo.git

(2)repo命令克隆由 -u 参数提供的 manifest Git 库 -b的linux-sdk分支 -m的imx6ull/100ask-imx6ull_qemu_release_v1.0.xml这个文件

root@ubuntu:~#  ../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

(3)下载最新本地工作文件,更新成功,这本地文件和repository 中的代码是一样的。这里指定更新-j4这个project

root@ubuntu:~#../repo/repo sync -j4

如果一切正常,你在/root目录下创建了一个100ask_imx6ull-qemu目录,里有如下内容:

2.配置交叉编译环境
设置交叉编译工具主要是设置PATH, ARCH和CROSS_COMPILE三个环境变量
如需永久修改,请修改用户配置文件。在Ubuntu系统下,修改如下:

root@ubuntu:~# vi  ~/.bashrc

在行尾添加或修改:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/root/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin

使环境变量生效

root@ubuntu:~#source ~/.bashrc

四.编译内核和设备树

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make mrproper
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make 100ask_imx6ull_qemu_defconfig
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make zImage //编译zImage内核镜像
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make 100ask_imx6ull_qemu.dtb //编译设备树

编译内核如果出现如下报错

解决方法如下,然后在重新编译内核

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#sudo apt-get install lzop
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#apt --fix-broken install

查看生成的内核和设备树的位置

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# find -name zImage
./arch/arm/boot/zImage
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# find -name 100ask_imx6ull_qemu.dtb
./arch/arm/boot/dts/100ask_imx6ull_qemu.dtb

四.修改源码,添加新的驱动
准备环境vscode通过ssh服务连接虚拟机,方便代码的修改
举例:添加新的gpio的驱动,操作如下:
(1)在/root/100ask_imx6ull-qemu/linux-4.9.88/drivers/char路径下面添加驱动文件user_gpio.c和驱动头文件user_gpio.h
user_gpio文件是驱动操控gpio的所有的接口函数的实现
(2)修改/root/100ask_imx6ull-qemu/linux-4.9.88/drivers/char路径下的Makefile文件
在Makefile文件的结尾添加

obj-$(CONFIG_USER_GPIO)      += user_gpio.o


(3)修改/root/100ask_imx6ull-qemu/linux-4.9.88/drivers/char目录下的Kconfig文件
添加如下内容

config USER_GPIOtristate "Support users to use GPIO"default yhelpUsers can set up or get GPIO by character device

(4)修改设备树文件,本项目使用到的设备树100ask_imx6ull_qemu.dtb和其中引用到的imx6ull.dtsi
在100ask_imx6ull_qemu.dtb中添加如下代码

user_gpio {compatible = "user_gpio";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpio>;input {trigger {label = "Trigger Button";gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;wakeup-source;linux,code = <1>;};in1 {label = "in 1";gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;wakeup-source;linux,code = <2>;};in2 {label = "in 2";gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;wakeup-source;linux,code = <3>;};};output {5v {label = "5v";gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;};24v {label = "24v";gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;};output1 {label = "output1";gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;};output2 {label = "output2";gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;};output3 {label = "output3";gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;};output4 {label = "output4";gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;};};};
pinctrl_gpio: gpios_grp {fsl,pins = <MX6UL_PAD_GPIO1_IO00__GPIO1_IO00   0x80000000   MX6UL_PAD_GPIO1_IO01__GPIO1_IO01   0x80000000   MX6UL_PAD_GPIO1_IO04__GPIO1_IO04  0x80000000MX6UL_PAD_GPIO1_IO05__GPIO1_IO05  0x80000000MX6UL_PAD_GPIO1_IO06__GPIO1_IO06   0x80000000MX6UL_PAD_GPIO1_IO07__GPIO1_IO07   0x80000000MX6UL_PAD_GPIO1_IO08__GPIO1_IO08   0x80000000MX6UL_PAD_GPIO1_IO09__GPIO1_IO09   0x80000000    MX6UL_PAD_BOOT_MODE0__GPIO5_IO10  0x80000000>;};

关于gpio口管脚的说明,由于没有有效的硬件原理图,所有的gpio是在头文件/root/100ask_imx6ull-qemu/linux-4.9.88/arch/arm/boot/dts/imx6ul-pinfunc.h中选取没有用到的gpio口和引脚
根据排除status = "disabled"找出其余的所有已经占用的gpio口(status = "okay"和没有赋值的默认的,都是已经占用的gpio)
(5)将user_gpio.c编译到模块user_gpio.ko修改/root/100ask_imx6ull-qemu/linux-4.9.88目录下的.config文件

CONFIG_USER_GPIO=m

(6)编译

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make zImage //编译zImage内核镜像
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make 100ask_imx6ull_qemu.dtb //编译设备树
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88#make modules //编译模块

查看生成的模块的目录,内核和设备树的目录如上

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# find -name user_gpio.ko
./drivers/char/user_gpio.ko

(7)将新编译出来的新内核和设备树拷贝到模拟开发板的镜像目录/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image下

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# cp ./arch/arm/boot/zImage /home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image
root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# cp ./arch/arm/boot/dts/100ask_imx6ull_qemu.dtb /home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image

五.模拟开发板加载新内核和设备树
(1)搭建ubuntu的nfs环境
ubuntu主机启动nfs
sudo apt-get install nfs-kernel-server
修改/etc/exports,添加类似以下的内容—允许开发板通过NFS访问Ubuntu的/home/mf/pemu_fv100目录

/home/mf/pemu_fv100 *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)

ubuntu主机 重启nfs
sudo /etc/init.d/nfs-kernel-server restart
ubuntu主机 测试nfs
可以在Ubuntu上通过NFS挂载自己,验证一下NFS可用:
在/home/mf/pemu_fv100目录下新建一个test.c文件在 /mnt下可以看到,挂在成功
sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/mf/pemu_fv100 /mnt
ls /mnt
(2)模拟开发板配置网络
QEMU运行时,Ubuntu是Host即宿主机,QEMU给它分配的IP是10.0.2.2。
QEMU模拟的imx6ull板子是Guest即客户机,它会自动获取IP,也可以自己设置。
Guest可以通过10.0.2.2访问Host,Host不能访问Guest。
Guest中可以使用ifconfig命令查看IP,如果没有IP,可以如下设置:

[root@qemu_imx6ul:~]#ifconfig eth0 10.0.2.15
[root@qemu_imx6ul:~]#mount -t nfs -o nolock,vers=3 10.0.2.2:/home/mf/pemu_fv100 /mnt

如果一切正常,在开发板上就可以通过/mnt目录访问Ubuntu的/home/mf/pemu_fv100目录了
(3)将测试脚本可执行文件user_gpio_test放在ubuntu的/home/mf/pemu_fv100目录下,在模拟开发板的/mnt目录下就可以访问啦

六.模拟开发板加载新的文件系统
因为我们将新添加的驱动编译成了user_gpio.ko模块,我们现在需要将这个文件添加到模拟开发板的镜像目录下/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image的rootfs.img这个根文件系统中
(1)挂在rootfs.img到设备的/mnt目录下,ubuntu下执行下面的命令:

root@ubuntu:/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image#sudo  mount  -o  loop  rootfs.img  /mnt
root@ubuntu:/home/mf/Desktop/ubuntu-18.04_imx6ul_qemu_system/imx6ull-system-image# cd /mnt
root@ubuntu:/mnt# ls
bin   dev  fat   lib    linuxrc  mnt  proc  run    sbin  tmp  var
boot  etc  home  lib32  media    opt  root  samba  sys   usr

这时候可以在模拟开发板的/mnt目录下操作根文件系统

(2)将新编译出来的驱动模块user_gpio.ko拷贝到/mnt下面去

root@ubuntu:~/100ask_imx6ull-qemu/linux-4.9.88# cp ./drivers/char/user_gpio.ko /mnt/mnt

操作完毕一定要取消挂载,不然启动内核会因为根文件系统挂死

root@ubuntu:/# sudo  umount  /mnt

(3)进入模拟开发板的/mnt目录加载新驱动

[root@qemu_imx6ul:/mnt]# ls
user_gpio.ko
[root@qemu_imx6ul:/mnt]# insmod user_gpio.ko
[root@qemu_imx6ul:/mnt]#lsmod   //查看加载情况

一切正常

七.测试新驱动模块–user_gpio.ko
(1)测试脚本编译

root@ubuntu:/home/mf/pemu_fv100#arm-linux-gnueabihf-gcc user_gpio_test.c -o user_gpio_test

(2)在模拟开发板的/mnt目录下执行user_gpio_test

[root@qemu_imx6ul:/mnt]#./user_gpio_test

基于Qemu搭建imx6l模拟开发板环境+添加驱动+驱动测试相关推荐

  1. 学内核之二:基于QEMU搭建Linux内核运行调试环境

    目录 一 接续上文 二 编译根文件系统 三 构建完善根文件系统 四 内核中指定根文件系统 五 带根文件系统启动内核 一 接续上文 在上一篇文章中,我们展示了通过QEMU仿真软件来运行Linux内核的过 ...

  2. 基于QEMU的ARM Cortex-A9开发板Vexpress-ca9的Linux内核的编译和运行

    宿主机:Ubuntu16.04 x64(Linux内核4.4.0) 交叉编译工具链:gcc-arm-linux-gnueabi arm-linux-gcc:4.4.3 QEMU:2.5.0 Linux ...

  3. QEMU imx6ul开发板环境搭建

    QEMU imx6ul开发板环境搭建 文章目录 QEMU imx6ul开发板环境搭建 0. 前言 1. 基本环境 2. 安装KVM 3. 下载开发板的QEMU镜像文件 4. 运行QEMU系统 4.1 ...

  4. Linux利器:QEMU!用它模拟开发板能替代真开发板?

    不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我! QEMU,搞嵌入式开发的一定不陌生,最近各大群里都讨论疯了,说它是Linux利器一点也不夸张.它是一款知名的而且开源的模拟器(官网 ...

  5. c语言模拟32u4单片机,一种基于Atmega32u4的教学型Arduino开发板的制作方法

    本实用新型涉及一种教学型Arduino开发板,具体是基于Atmega32u4芯片的教学型Arduino开发板. 背景技术: 近些年来,互联网和物联网高速发展,在推动社会生产力快速发展的同时,也对我们的 ...

  6. 【 RA4M2开发板环境搭建之串口下载1】

    [ RA4M2开发板环境搭建1] 1. 前言 1.1 活动来源 1.2 开发环境 1.3 RA4M2开发板 2. MDK环境准备 2.1 keil 5下载安装 2.2 安装RA4M2的软件支持包 2. ...

  7. 超级便宜的鸿蒙开发板环境搭建-编译-烧录

    超级便宜的鸿蒙开发板环境搭建-编译-烧录 1.下载代码.编译工具和烧写工具 打开https://gitee.com/hihopeorg/Neptune-HarmonyOS-IOT下载代码 打开http ...

  8. (二)海思3519av100开发:开发板环境搭建

    海思文档+nfsAxe+SecureCRT 8.1破解版资源网盘链接提取码:pzxg 2 开发板环境设置 本文省去kernel.uboot.文件系统烧写步骤,详见海思文档. 工具:开发板.usb转串口 ...

  9. 龙芯linux开发板,龙芯1b开发板环境及系统搭建

    建立交叉编译环境 交叉编译工具包:gcc-4.3-ls232-softfloat.tar.gz 1.解压到/opt文件夹 sudo tar zxvf gcc-4.3-ls232-softfloat.t ...

最新文章

  1. RIP 数据包类型 路由中毒
  2. javaScript字符串应用
  3. matlab按某一列排序
  4. Mysql 的一些基本用法
  5. shell中的括号(小括号,中括号,大括号/花括号)
  6. 提升逻辑!APP数据可视化界面设计灵感
  7. ASP.NET AJAX 首部曲 - 迈向解密之路
  8. 【技巧】LeetCode 86. Partition List
  9. Nginx伪静态配置和常用Rewrite伪静态规则
  10. java 产生无重复的随机数,Java程序生成无重复的随机数
  11. 深圳移动 神州行(大众卡/轻松卡/幸福卡)套餐资费(含香港日套餐)信息及使用方法
  12. 如何恢复Windows默认共享
  13. 金融与python-基于Python的金融分析与风险管理
  14. 知名云计算厂商云宏加入龙蜥社区,共同打造信息安全坚实“地基”
  15. Cisco Packet Tracer 超网(CIDR)设置实验
  16. C++的4种智能指针剖析使用
  17. OpenStack 2014 用户调查解析——中国部署规模仅次于美国
  18. ThinkPHP5.0商城项目目录搭建(菜鸟)
  19. 域名系统中的本地域名服务器根域名服务器,本地域名服务器 根域名服务器区别...
  20. 【map】百度地图离线化V1.3

热门文章

  1. PHP案例001会议管理系统
  2. 猿玖科技程序员-猿勇强
  3. 30个适合女生玩的可爱网站
  4. 工作积累最常用的shell脚本编程基础,一文扫盲流程控制语句
  5. 每周推荐短视频:GDP 增速放缓,对于企业意味着什么?
  6. pycharm专业版远程调试开发
  7. Shell脚本之数组
  8. php solr docker搭建,深入浅出Docker技术- 基于Docker Solr集群的搭建
  9. Web日志安全分析系统实践
  10. Python虚拟机的函数机制