linux学习笔记:07-QEMU IMX6ULL搭建

贫穷就去奋斗,有目标就去追逐,成长的路上,终要向稚嫩的自己告别

host平台  	:Ubuntu 16.04
qemu        :100ask-qemu
gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf
本文参考韦东山老师制作的qemu虚拟开发板,记录自己的学习

文章目录

  • QEMU的使用
    • 1、安装源
    • 2、安装qemu
    • 3、运行qemu
  • 使用QEMU进行嵌入式Linux开发
    • 1、下载源码
    • 2、更新内核和设备树
    • 3、更新根文件系统
    • 4、配置NFS
    • 5、qemu通过nfs访问ubuntu
    • 6、更新qemu
  • 参考 :

QEMU的使用

1、安装源

在使用apt install时,在被ubuntu下的国外源白摧残下,在师兄的一提醒下,更换了国内apt源,我终于起飞了,不再受国外龟速安装折磨。更新源请看:Ubuntu16.04 几个国内更新源以及注意点

2、安装qemu

  • 安装kvm,加速qemu运行
  sudo apt-get update 
  sudo apt-get install qemu qemu-kvm libvirt-bin bridge-utils virt-manager
  • 安装git,方便下载qemu系统镜像
  sudo apt-get install git
  • 安装qemu系统镜像(此镜像适用ubuntu-16.04开发环境)
  cd /home/zgjias/jias/qemu
  git  clone  https://git.dev.tencent.com/weidongshan/ubuntu 16.04_imx6ul_qemu_system.git

镜像目录结构及说明如下,红框中的文件,在后续的开发过程中要进行替换。
linux学习笔记:07-QEMU IMX6ULL搭建_第1张图片

3、运行qemu

  • 进入qemu安装路径
  cd /home/zgjias/jias/qemu/ubuntu-16.04_imx6ul_qemu_system-release
  • 首次运行需要安装SDL环境(注意:再次下载无需再重复安装,会报错!)
    用脚本自动解压安装
  ./install_sdl.sh // 提示输入用户密码,等待安装完成
如果遇到一依赖关系报错,输入sudo apt-get install -f修复依赖关系
  • 运行带GUI的imx6ul模拟器(注意:启动后便进入了qemu的终端,而下面的操作仍然是在ubuntu终端进行的,需要再开一个终端进行下面的操作。)
  ./qemu-imx6ull-gui.sh // 启动后,登录名是root,无需密码
  要想退出qemu,则在qemu终端 按下 `ctrl+a `然后松开  再按` x` 即可退出

更多的qemu具体操作案例,前往参考韦老师的百问网

使用QEMU进行嵌入式Linux开发

完整的嵌入式Linux系统包含:bootloader、Linux内核、设备树、根文件系统。QEMU可以略过bootloader而直接启动内核,这给开发带来了便利。

1、下载源码

  • 设置git邮箱账号和用户名
  git config --global user.email "you\@example.com"
  git config --global user.name "Your Name"
 初次使用GIT时,需要配置邮箱帐号和用户名,可以随意指定。
  • 下载源码到/home/zgjias目录(家目录)
    • 考虑到代码仓库过多,特使用repo工具管理代码。先用git clone下载repo工具,再用repo工具下载源码:
  cd /home/zgjias
  git clone https://git.dev.tencent.com/codebug8/repo.git
  mkdir -p 100ask_imx6ull-qemu && cd 100ask_imx6ull-qemu
  ../repo/repo init -u https://dev.tencent.com/u/weidongshan/p/manifests/git -b linux-sdk -m imx6ull/100ask-imx6ull_qemu_release_v1.0.xml --no-repo-verify
  ../repo/repo sync -j4 
  • 如果一切正常,你在/home/zgjias目录下创建了一个100ask_imx6ull-qemu目录,里有如下内容:
    • 其中交叉编译工具,就在其中的ToolChain目录下,接下来配置交叉编译工具需要用到! linux学习笔记:07-QEMU IMX6ULL搭建_第2张图片

2、更新内核和设备树

  • 设置交叉编译工具链
    • 在终端输入vi ~/.bashrc
    • 在文件的末尾加上下列代码,然后重启即可生效!
   export ARCH=arm
   export CROSS_COMPILE=arm-linux-gnueabihf-
   export PATH=$PATH:/home/clay/100ask_imx6ull-qemu/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
上述在.bashrc中设置交叉编译工具链参数是永久生效的,若要仅对当前终端生效,直接在终端中敲入上述三行代码即可!
  • 编译内核及设备树
    下载了源码,设置好工具链后,即可编译:
   cd /home/zgjias/100ask_imx6ull-qemu/linux-4.9.88
   make mrproper
   make 100ask_imx6ull_qemu_defconfig
   make zImage -j4  //编译zImage内核镜像,其中N参数可以根据CPU个数,来加速编译系统。
   make dtbs  //编译设备树文件
编译内核时可能会因为缺少 lzop 报错,安装lzop即可解决:sudo apt-get install lzop
  • 更新内核和设备树
    • 编译成功后,可在./arch/arm/boot/zImage目录下得到内核文件,在./arch/arm/boot/dts/100ask_imx6ull_qemu.dtb得到设备树文件
    • 用上述2个文件去替换qemu中的zImage100ask_imx6ull_qemu.dtb即可达到更新内核和设备树的目的。
      • qemu的内核和设备树文件在其安装目录下的./imx6ull-system-image文件夹下

3、更新根文件系统

  • 进入根文件系统所在目录
  cd /home/zgjias/jias/qemu/ubuntu-16.04_imx6ul_qemu_system-release/imx6ull-system-image
  • 挂载根文件系统
  sudo mount -o loop rootfs.img /mnt
  • 更新根文件系统
    • 挂载成功后可以通过/mnt目录访问根文件系统,进而也可以对其中的内容进行修改
  • 修改完毕后,取消挂载
  sudo umount /mnt

4、配置NFS

  • 启动qemu虚拟开发板(注意:启动后便进入了qemu的终端,而下面的操作仍然是在ubuntu终端进行的,需要再开一个终端进行下面的操作。)
  ./qemu-imx6ull-gui.sh
  • 在Ubuntu安装、配置NFS服务
  mkdir NFS
  sudo apt-get install nfs-kernel-server
  • 打开配置文件
  sudo vim /etc/exports
  • 在文件末尾,添加类似以下的内容
    • 下面的例子里允许开发板通过NFS访问Ubuntu/home/zgjias目录
  /home/zgjias/NFS *(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
  • 重启NFS服务
  sudo /etc/init.d/nfs-kernel-server restart
  • Ubuntu上通过NFS挂载自己,测试NFS是否可用。(注意:测试完毕后要进行卸载)
  sudo mount -t nfs -o nolock,vers=3 127.0.0.1:/home/zgjias /mnt
  • 输入ls /mnt,看看是否和/home/zgjias下的内容一致,一致则说明挂载成功!

5、qemu通过nfs访问ubuntu

  需要注意的是,以下配置qemu的NFS,应该在qemu打开的模拟板子终端输入命令
  • 开发板获取IP地址
    • 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,可以进行如下设置:
  ifconfig eth0 10.0.2.15
  • 挂载主机NFS目录
  • QEMU模拟的imx6ull开发板,可以NFS挂载访问192.168.1.102(Ubuntu主机)
  mount -t nfs -o nolock,vers=3 192.168.1.102:/home/zgjias/NFS /mnt
  • 如果一切正常,在开发板上就可以通过/mnt目录访问Ubuntu的/home/zgjias/jias/qemu/NFS目录了。

6、更新qemu

之后需要更新qemu。新版本可以在新建的目录下,执行下列命令,即可替换求版本。

 git  clone  https://git.dev.tencent.com/weidongshan/ubuntu-16.04_imx6ul_qemu_system.git

参考 :

  • 百问网
  • ReCclay

你可能感兴趣的:(linux)