一、QEMU環(huán)境配置

      網(wǎng)友投稿 1175 2022-05-29

      一、QEMU環(huán)境配置

      ? 1、搭建嵌入式開發(fā)基本環(huán)境

      ? 2、QEMU安裝及A9開發(fā)板配置介紹

      ? 3、編譯、運行Linux內(nèi)核

      ? 4、使用BusyBox制作根文件系統(tǒng)

      ? 5、使用U-boot引導啟動Linux內(nèi)核

      ? 6、掛載NFS文件系統(tǒng)

      ? 7、在虛擬開發(fā)板上開發(fā)應用程序、驅(qū)動示例

      1、搭建嵌入式開發(fā)基本環(huán)境

      ? 1.1、Vmware+Ubuntu16.04

      ? 1.2、Vmwaretools

      ? 1.3、更新軟件源

      ? 1.4、安裝uboot-tools

      ? 1.5、代碼編輯管理工具:Git/vim

      ? 1.6、交叉編譯器:gcc-arm-linux-gnueabi

      ? 1.7、其他

      虛擬機使用vmware player

      推薦使用Ubuntu16.04

      1、Ubuntu16.04是LTS(Long Term Support)長期Support版本

      2、軟件包豐富,可以默認安裝arm-gcc編輯器

      安裝vmware-tools:跟主機之間拷貝文件

      安裝

      1、直接把WMwareTools拷貝出來到桌面吧

      2、然后打開終端解壓 命令:tar -xzvf VMwareTools-10.0.6-3595377.tar.gz

      3、進入解壓后的目錄,執(zhí)行:sudo ./wmware-install.pl 然后就一直回車了。

      ? Ubuntu采用集中式的軟件倉庫機制,將軟件包分類存在軟件倉

      庫中,進行管理。軟件倉庫放置在各種鏡像服務器中,對于用

      戶來說,當使用apt-get install安裝軟件包時,會從這些服務器

      下載軟件包,這些鏡像服務器就是 軟件源(Reposity).

      ? 執(zhí)行apt update,程序分析/etc/apt/source.list

      ? 自動聯(lián)網(wǎng)尋找list中對應的Packages/Sources/Release列表文件,

      如果有更新則重新下載之,存入存入/var/lib/apt/lists/目錄

      ? 然后apt install相應的包,下載到本地并進行安裝

      ? /var/lib/dpkg/available:軟件包的描述信息,軟件源中所有軟

      件包中的信息,包括安裝和未安裝的軟件包

      ? /var/cache/apt/archives:當apt install安裝軟件包的臨時存放路

      ? /etc/apt/sources.list:文件里是軟件源站點,apt install時,

      Ubuntu會從這些站點下載軟件包到本地并進行安裝

      ? /var/lib/apt/lists:使用apt update命令會從/etc/apt/sources.list

      中下載軟件包列表索引,并保存到該目錄

      備份系統(tǒng)本身源文件

      cp /etc/apt/sources.list /etc/apt/sources.list.backup

      1

      修改源文件內(nèi)容,將新的源地址寫入該文件中

      //先安裝vim:apt-get insatll vim vim /etc/apt/sources.list

      1

      2

      保存文件,并刷新配置

      apt update

      1

      ? 工具介紹

      ? 用來生成適應U-boot引導的鏡像文件格式

      $ apt install u-boot-tools

      1

      apt install git apt install tree

      1

      2

      初始化倉庫: git init

      git add name //上傳

      git status //看修改

      git log

      提交:先設置郵箱和名字

      什么是交叉編譯?

      ? 在一種計算機環(huán)境中編譯程序,在另外一種環(huán)境下運行。或者說在一個平臺上編譯生成在另一個平臺上運行的可執(zhí)行代碼。

      什么是ABI和EABI

      ? ABI: 二進制應用程序接口(Application Binary Interface (ABI) for the ARM Architecture) 在計算機中,應用二進制接口描述了應用程序(或者其他類型)和操作系統(tǒng)之間或其他應用程序的低級接口. 涵蓋了數(shù)據(jù)類型的大小、布局和對齊,調(diào)用約定

      ? EABI: 嵌入式ABI

      嵌入式應用二進制接口指定了文件格式、數(shù)據(jù)類型、寄存器使用、堆積組織優(yōu)化和在一個嵌入式軟件中的參數(shù)的標準約定。

      ? Arm-none-gnueabi-linux比arm-linux-gcc要好,在可移植性、兼容性上面

      ? 早期u-boot和Linux編譯可能使用的都不是一個arm-linux-gcc版本

      安裝

      ? $ apt install gcc-arm-linux-gnueabi

      ? $ apt install g++-arm-linux-gnueabi

      1、curses庫–libncurses5-dev–游標移動及屏幕的顯示

      2、我們在ubuntu上編譯程序,不是說有了gcc就行了,需要先apt-get install build-essential,

      這個包提供了很多編譯相關的軟件包,里面有:

      dpkg-dev fakeroot g++ g++-4.6 libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libdpkg-perl libstdc++6-4.6-dev libtimedate-perl

      1

      2

      一、QEMU環(huán)境配置

      3

      3、(工具鏈:一般由編譯器、連接器、解釋器和調(diào)試器組成)

      gcc-arm-none-eabi是GNU項目下的軟件,是一個面向裸機arm的編譯器

      2、QEMU安裝及A9開發(fā)板配置介紹

      ? $ apt install qemu

      ? 首先安裝QEMU編譯依賴的包

      – apt install zlib1g-dev – apt install libglib2.0-0 libglib2.0-dev – apt install libsdl1.2-dev – apt install libpixman-1-dev libfdt-dev

      1

      2

      3

      4

      ? 下載QEMU源碼:git clone git://git.qemu-project.org/qemu.git

      git branch -a

      分支 git checkout remotes/origin/stable-2.8 -b stable-2.8

      標簽 git tag

      ? 切換到一個穩(wěn)定版本:git checkout v2.7.0

      ? 編譯配置:./configure –target-list=arm-softmmu –audio-drv-list=

      ? 編譯安裝:make ; make install

      查看qemu 支持的開發(fā)板子

      qemu-system-arm -M help

      1

      3、編譯、運行Linux內(nèi)核

      – www.kernel.org

      – git clone

      git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/

      ? ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

      ? 編譯內(nèi)核、模塊、dtb文件

      ? makevexpressdefconfig;makezImage?

      m

      a

      k

      e

      v

      e

      x

      p

      r

      e

      s

      s

      d

      e

      f

      c

      o

      n

      f

      i

      g

      ;

      m

      a

      k

      e

      z

      I

      m

      a

      g

      e

      ?

      make modules; make dtbs

      qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append “console=ttyAMA0”

      qemu-system-arm -nographic -M vexpress-a9 -m 1024M -kernel arch/arm/boot/zImage -append “rdinit=/linuxrc console=ttyAMA0 loglevel=8” -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb

      4、使用busybox制作根文件系統(tǒng)

      ? 文件系統(tǒng)

      ? 對存儲設備上的數(shù)據(jù)進行組織的機制

      ? Linux的哲學:一切皆文件

      ? 用戶與操作系統(tǒng)進行交互的主要工具:文件系統(tǒng)調(diào)用

      ? 用戶和底層存儲的接口

      ? Linux內(nèi)核啟動后第一個掛載的文件系統(tǒng)

      ? 主要由基本的shell命令、各種庫、字符設備、配置腳本組成

      ? 提供了根目錄/

      ? RFS可以放在:nor/nand flash、SD卡、磁盤、網(wǎng)絡空間上

      ? 下載源代碼:http://www.busybox.net/downloads/

      ? 修改Makefile:ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

      ? 配置:make defconfig ; make menuconfig

      ? 編譯:make

      ? 安裝:make install

      ? mkdirrootfs?

      m

      k

      d

      i

      r

      r

      o

      o

      t

      f

      s

      ?

      mkdir rootfs/lib

      ? cp–rinstall/?rootfs?

      c

      p

      r

      i

      n

      s

      t

      a

      l

      l

      /

      ?

      r

      o

      o

      t

      f

      s

      ?

      cp -p /usr/arm-linux-gnueabi/lib/* rootfs/lib

      ? mkdir?prootfs/dev/?

      m

      k

      d

      i

      r

      ?

      p

      r

      o

      o

      t

      f

      s

      /

      d

      e

      v

      /

      ?

      mknod –m 666 tty1 c 4 1

      ? mknod–m666tty2c42?

      m

      k

      n

      o

      d

      m

      666

      t

      t

      y

      2

      c

      4

      2

      ?

      mknod –m 666 tty3 c 4 3

      ? mknod–m666tty4c44?

      m

      k

      n

      o

      d

      m

      666

      t

      t

      y

      4

      c

      4

      4

      ?

      mknod –m 666 console c 5 1

      ? $ mknod –m 666 null c 1 3

      ? 生成鏡像:dd if=/dev/zero of=rootfs.ext3 bs=1M count=32

      ? 格式化為exts文件系統(tǒng):mkfs.ext3 rootfs.ext3

      ? 將各種文件拷貝到文件系統(tǒng)鏡像中:

      ? mount?text3rootfs.ext3/mnt/?oloop?

      m

      o

      u

      n

      t

      ?

      t

      e

      x

      t

      3

      r

      o

      o

      t

      f

      s

      .

      e

      x

      t

      3

      /

      m

      n

      t

      /

      ?

      o

      l

      o

      o

      p

      ?

      cp -r rootfs/* /mnt

      ? $ umount /mnt

      ? $ qemu-system-arm -M vexpress-a9 -m 512M -dtb ./vexpress-

      v2p-ca9.dtb -kernel ./zImage -nographic -append

      “root=/dev/mmcblk0 rw console=ttyAMA0” -sd rootfs.ext3

      ? $ qemu-system-arm -M vexpress-a9 -m 512M -dtb ./vexpress-

      v2p-ca9.dtb -kernel ./zImage -append “root=/dev/mmcblk0 rw

      console=tty0” -sd rootfs.ext3

      mkdir etc/init.d

      touch etc/init.d/rcS

      chmod a+x rcS

      vi rcS

      5、使用u-boot加載Linux內(nèi)核

      ? 5.1、嵌入式啟動概述

      ? 5.2、U-boot編譯

      ? 5.3、QEMU網(wǎng)絡功能設置

      ? 5.4、內(nèi)核配置編譯

      ? 5.5、主機TFTP工具安裝

      ? 5.6、啟動測試

      ? 5.7、自動化引導

      嵌入式bootloader

      ? 功能類似于PC的BIOS、硬件檢測是否正常

      ? 加載操作系統(tǒng)鏡像到RAM

      ? 設置不同的啟動方式

      常見的啟動方式

      ? NOR/NAND flash啟動

      ? 從SD卡啟動

      ? Bootloader從網(wǎng)絡加載Linux內(nèi)核啟動

      ? 功能類似于Windows的BIOS

      ? 編譯u-boot

      ? 下載: http://ftp.denx.de/pub/u-boot/

      ? 修改Makefile:ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

      ? 配置:makevexpressca9x4defconfig?編譯:

      m

      a

      k

      e

      v

      e

      x

      p

      r

      e

      s

      s

      c

      a

      9

      x

      4

      d

      e

      f

      c

      o

      n

      f

      i

      g

      ?

      make –j4

      ? 運行u-boot

      ? qemu-system-arm -M vexpress-a9 \

      -kernel u-boot \

      -nographic \

      -m 512M

      QEMU網(wǎng)絡功能設置

      ? 配置QEMU與主機的網(wǎng)絡連接

      ? 采用橋接(bridge)的網(wǎng)絡連接與Host通信

      ? 需要主機內(nèi)核tun/tap模塊支持

      ? 配置

      ? 主機安裝工具包: apt install uml-utilities bridge-utils

      ? 創(chuàng)建tun設備文件:/dev/net/tun

      ? 修改/etc/network/interfaces文件,重啟生效:

      ? # interfaces(5) file used by ifup(8) and ifdown(8)

      auto lo

      iface lo inet loopback

      auto ens33

      auto br0

      iface br0 inet dhcp

      bridge_ports ens33

      ? 配置/etc/qemu-ifup、/etc/qemu-ifdown腳本

      /etc/qemu-ifup與/etc/qemu-ifdown,是kvm啟動后將網(wǎng)卡在宿主主機上配置的腳本文件,我的archlinux沒有這個腳本自己寫了一個,直接上代碼 /etc/qemu-ifup: #! /bin/sh switch=br0 ifconfig $1 up #ip link set $1 up brctl addif ${switch} $1 /etc/qemu-ifdown: #! /bin/sh switch=br0 brctl delif ${switch} $1 ifconfig $1 down #ip link set $1 down #tunctl -d $1 其中$1是虛擬機傳入的參數(shù)

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      內(nèi)核配置編譯

      ? 使用U-boot引導內(nèi)核鏡像

      ? 需要將內(nèi)核編譯為uImage格式

      ? 需要指定uImage的加載地址

      ? 編譯時指定:$ make LOADADDR=0x60003000 uImage -j4

      主機TFTP工具安裝

      ? 安裝主機Host的TFTP

      ? 1)安裝tftp工具:$ apt-get install tftp-hpa tftpd-hpa xinetd

      ? 2)修改配置文件: /etc/default/tftpd-hpa

      TFTP_USERNAME=”tftp”

      TFTP_DIRECTORY=”/home/tftpboot”

      TFTP_ADDRESS=”0.0.0.0:69”

      TFTP_OPTIONS=”-l -c -s”

      ? 3)創(chuàng)建tftp目錄:mkdir/home/tftpboot;chmod777tftpboot?4)重啟tftp服務:

      m

      k

      d

      i

      r

      /

      h

      o

      m

      e

      /

      t

      f

      t

      p

      b

      o

      o

      t

      ;

      c

      h

      m

      o

      d

      777

      t

      f

      t

      p

      b

      o

      o

      t

      ?

      4

      t

      f

      t

      p

      /etc/init.d/tftpd-hpa restart

      自動化引導

      ? 修改include/configs/vexpress_common.h

      ? #define CONFIG_BOOTCOMMAND \

      “tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb; \

      setenv bootargs ‘root=/dev/mmcblk0 console=tty0’; \

      bootm 0x60003000 - 0x60500000; ”

      ? 配置開發(fā)板、主機IP地址

      /Netmask/

      196 #define CONFIG_IPADDR 192.168.244.128

      197 #define CONFIG_NETMASK 255.255.255.0

      198 #define CONFIG_SERVERIP 192.168.244.129

      6、掛載NFS文件系統(tǒng)

      ? 主機HOST支持NFS服務

      ? 修改bootargs啟動參數(shù)

      ? ? ? 設置NFS為根文件系統(tǒng)

      ? ? ? 設置主機NFS文件系統(tǒng)的地址

      ? 內(nèi)核支持掛載NFS文件系統(tǒng)

      安裝

      $ apt install nfs-kernel-server

      配置NFS

      ? 在/etc/exports文件中添加:

      /work *(rw,sync,no_root_squash,no_subtree_check)

      開啟NFS服務

      ? /etc/init.d/rpcbindrestart?

      /

      e

      t

      c

      /

      i

      n

      i

      t

      .

      d

      /

      r

      p

      c

      b

      i

      n

      d

      r

      e

      s

      t

      a

      r

      t

      ?

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

      安裝FTP:

      sudo apt-get install vsftpd openssh-server nfs-kernel-server portmap

      配置 FTP 服務

      修改 vsftpd 的配置文件/etc/vsftpd.conf,將下面兩行前面的“#”號去掉。

      #local_enable=YES

      #write_enable=YES

      上面第一行表示是否允許本地用戶登錄,第二行表示是否允許上傳文件。

      修改完華之后,執(zhí)行以下命令重啟 ftp 服務:

      sudo /etc/init.d/vsftpd restart

      修改bootargs啟動參數(shù):

      修改BOOTCOMMAND(hhbf.h中)

      #define CONFIG_BOOTCOND \ "tftp 0x60003000 uImage;tftp 0x60500000 vexpress-v2p-ca9.dtb;\ setenv bootargs 'root=/dev/nfs rw\ nfsroot=192.168.244.129:/homg/rootfs init=/linuxrc \ ip=192.168.244.128 console=ttyAMA0';\ bootm 0x60003000 - 0x60500000 "

      1

      2

      3

      4

      5

      6

      7

      8

      9

      內(nèi)核make menuconfig

      配置內(nèi)核支持掛載NFS文件系統(tǒng)

      File systems –>

      ? 增加內(nèi)核的各種用戶接口

      ? 重啟reboot功能

      ? 新建etc目錄

      ? ? ? 添加inittab、 init.d/rcS、 fstab、 profile

      ? 新建tmp、 sys、 var、 proc目錄

      ? 啟動Linux,掛載NFS文件系統(tǒng)

      ? Linux內(nèi)核啟動之后,掛載NFS根文件系統(tǒng)

      ? 開啟Linux的第一個用戶進程: init

      ? init進程bootargs?init=…?執(zhí)行inittab腳

      ? inittab腳本首先會執(zhí)行init.d/rcS腳本

      ? rcS腳本:執(zhí)行mount –a 讀取fstab掛載各種

      文件系統(tǒng)

      ? inittab:接著會啟動console

      ? ? ? 啟動shell: /bin/sh

      ? ? ? 在啟動/bin/sh之前先執(zhí)行profile文件

      7、在虛擬開發(fā)板上開發(fā)應用程序、驅(qū)動示例

      Linux 鏡像服務

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:百分百發(fā)揮AI算力,華為發(fā)出最關鍵的一擊
      下一篇:【敏捷江湖桃花島】華山論劍第一期 (下)
      相關文章
      亚洲天天在线日亚洲洲精| 亚洲国产av无码精品| 亚洲一级Av无码毛片久久精品| 亚洲人成色777777老人头| 亚洲另类精品xxxx人妖| 亚洲成a人片在线观看中文动漫 | 亚洲精品美女久久777777| 亚洲视频一区二区| 久久精品国产亚洲5555| 亚洲成av人片天堂网老年人 | 久久综合日韩亚洲精品色| 久久99国产亚洲高清观看首页| 亚洲中文字幕久久精品无码喷水 | 亚洲成av人片天堂网老年人| 亚洲国产精品成人| 亚洲一区二区三区免费| 色噜噜亚洲精品中文字幕| 亚洲午夜福利在线观看| 亚洲国产精品SSS在线观看AV| 亚洲VA成无码人在线观看天堂| 久久精品亚洲中文字幕无码网站| 亚洲国产高清在线| 亚洲精品动漫在线| 亚洲欧洲另类春色校园网站| 2020国产精品亚洲综合网| 亚洲精品天堂成人片AV在线播放| 亚洲精品久久无码av片俺去也| 亚洲色www永久网站| 国产精品亚洲综合| 亚洲性日韩精品一区二区三区| 亚洲精品午夜无码专区| 亚洲AV第一页国产精品| 亚洲最新在线视频| 亚洲色欲啪啪久久WWW综合网| 亚洲aⅴ无码专区在线观看 | 国产亚洲视频在线观看网址| 亚洲综合激情另类专区| 国产成A人亚洲精V品无码| 91亚洲国产成人久久精品网站| 亚洲中文无码线在线观看| 亚洲精品无码av中文字幕|