By: fu linux
E-mail: fulinux@sina.com
Blog: https://blog.csdn.net/fulinus
喜欢的盆友欢迎点赞和订阅!
你的喜欢就是我写作的动力!
今天玩一下
qemuarm
,因为之前用的
x86
架构,很多盆友包括我自己有时候都很难区分这里出现的x86字眼是编译机
ubuntu
系统用到的还是目标
target
系统用到的,尤其是目前移动市场
arm
一统天下的情况下,很多小伙伴手上的板子都是
arm
架构的,使用到的交叉编译器也都是以
arm-linux-
开头的。各方面考虑还是需要玩下
qemuarm
~
修改local.conf模板
- 该步骤可不要。
其实这里修不修改也无所谓,到时候到
local.conf
目录下直接修改也可以。
poky-arm]$ vim meta-poky/conf/local.conf.sample
#改这个
MACHINE ?= "qemuarm64"
- 1
- 2
- 3
暂时选
arm64
吧,说不上为啥,可能比较新的架构内容更附后今后的发展方向。
创建新的build目录
正常第一次下载的
poky
目录下面是没有
build
目录的,是需要
source
环境自动创建。如果在
poky
目录下面已经有了一个
build
目录,
可以在
source
的时候加上新的
build
目录作为参数。本着保留前面
qemux86-64
项目的出发点,创建一个干净的build目录用于
qemuarm
项目。参考如下:
poky]$ source oe-init-build-env build-arm
- 1
在执行bitbake之前修改下downloads目录,指向之前poky/build/downloads目录,因为这里面arm和x86架构使用open-Embedded构建的文件系统中使用的第三方软件项目都是支持的,因此下载的第三方开源项目软件包都是相同的,没有必要重复下载,这个下载过程需要花费很长的时间。
build-arm]$ vim conf/local.conf
#添加或者修改:
DL_DIR ?= "${HOME}/poky/build/downloads"
- 1
- 2
- 3
重新source一遍:
build-arm]$ cd ..
poky]$ source oe-init-build-env build-arm
- 1
- 2
但是这样一来每次都要加上build-arm参数,也是一件很恼火的事情,搞不好就忘了~
其实不同目标都可以放在
build
目录中不做任何修改,也是可以的。
当然也可以只修改下
TMPDIR
变量,指定一个新的临时目录也可以。例如:
poky]$ vim build/conf/local.conf
TMPDIR = "${TOPDIR}/tmp-arm"
- 1
- 2
修改下载路径
如果yocto的版本接近的话,而且之前有构建过某个目标,在
/opt/downloads/
目录中已经存放了很多三方开源项目,为避免新项目重复下载,可以修改下这个路径配置:
poky]$ vim build/conf/local.conf
DL_DIR ?= "/opt/downloads"
- 1
- 2
开始编译
这里我们的镜像recipe可以选择core-image-sato,也可以选择core-image-minimal,但是core-image-minimal带有minimal(极小的)关键词,可以知道这个是一个迷你文件系统的镜像,对应我们学习而言应该更加适合一些,起码可以缩短编译时间。因此我们这里选择core-image-minimal镜像:
build]$ bitbake core-image-minimal
- 1
开始编译,等着吧。。。
编译完成后运行
展示结果:
看work目录
poky/build/tmp/work目录下有如下一些目录:
build]$ ls tmp/work/
aarch64-poky-linux all-poky-linux qemuarm64-poky-linux x86_64-linux
- 1
- 2
每个目录解释
- all-poky-linux: 这用于与体系结构无关的包 (举个例子:时区设置相关的。没有执行程序,都是配置文件、脚本和文档什么的,一般放在usr/share目录下的)
- aarch64-poky-linux: 这个用于arm arch64体系架构有关的软件包(只能在这个这个架构上运行的程序)
- qemuarm64-poky-linux : 这用于特定于机器的软件包;在本例中,是qemuarm64(内核、驱动、u-boot、文件系统等)
- x86_64-linux: 这用于构成(编译)主机sysroot的包(比如gcc交叉编译器就在这里)
参看如下:
build]$ ls tmp/work/aarch64-poky-linux/
acl diffutils gnu-config libnsl2 mdadm shared-mime-info
attr e2fsprogs grep libpcre modutils-initscripts socat
autoconf elfutils initscripts libpthread-stubs mpfr sqlite3
automake eudev iproute2 libsm ncurses sysvinit
base-passwd expat iptables libtirpc netbase tcp-wrappers
bash findutils kmod libtool openssl unzip
bash-completion flex libcap libtool-cross opkg-utils util-linux
bc gawk libcap-ng libx11 perl util-macros
binutils gcc libcroco libxau pkgconfig which
bison gcc-runtime liberror-perl libxcb procps xcb-proto
btrfs-tools gdbm libffi libxcrypt ptest-runner xorgproto
busybox gettext libgcc libxdmcp python3 xtrans
bzip2 glib-2.0 libgcc-initial libxml2 qemuwrapper-cross xz
coreutils glibc libice linux-libc-headers readline zip
db glibc-locale libmnl lzo sed zlib
dbus gmp libmodule-build-perl m4 shadow
dbus-test gnome-desktop-testing libmpc make shadow-sysroot
build]$ ls tmp/work/all-poky-linux/
autoconf-archive ca-certificates packagegroup-core-buildessential run-postinsts tzdata update-rc.d
build]$ ls tmp/work/qemuarm64-poky-linux/
base-files depmodwrapper-cross linux-yocto shadow-securetty
core-image-minimal init-ifupdown packagegroup-core-boot sysvinit-inittab
build]$ ls tmp/work/x86_64-linux/
acl-native glib-2.0-native libx11-native pseudo-native
alsa-lib-native gmp-native libxau-native python3-iniparse-native
attr-native gnu-config-native libxcb-native python3-native
autoconf-archive-native gobject-introspection-native libxdmcp-native python3-setuptools-native
autoconf-native gperf-native libxext-native python3-six-native
automake-native gpgme-native libxml2-native qemu-helper-native
bc-native gtk-doc-native libxrandr-native qemu-native
binutils-cross-aarch64 itstool-native libxrender-native qemu-system-native
binutils-native json-c-native libxslt-native quilt-native
bison-native kern-tools-native libyaml-native re2c-native
bzip2-native kmod-native lzo-native readline-native
cmake-native ldconfig-native lzop-native rpm-native
createrepo-c-native libarchive-native m4-native rsync-native
cross-localedef-native libassuan-native makedevs-native shadow-native
curl-native libcap-ng-native make-native shared-mime-info-native
cwautomacros-native libcheck-native meson-native sqlite3-native
db-native libcomps-native mklibs-native swig-native
dbus-native libdnf-native mpfr-native texinfo-dummy-native
debianutils-native libffi-native ncurses-native tzcode-native
dnf-native libgpg-error-native ninja-native unifdef-native
dtc-native libmodulemd-v1-native openssl-native unzip-native
dwarfsrcfiles-native libmpc-native opkg-native update-rc.d-native
e2fsprogs-native libnsl2-native opkg-utils-native util-linux-native
elfutils-native libpcre2-native patch-native util-macros-native
expat-native libpcre-native pbzip2-native xcb-proto-native
file-native libpthread-stubs-native perl-native xorgproto-native
flex-native librepo-native pigz-native xtrans-native
gcc-cross-aarch64 libsdl2-native pixman-native xz-native
gdbm-native libsolv-native pkgconfig-native zlib-native
gettext-minimal-native libtirpc-native popt-native
gettext-native libtool-native prelink-native
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
遗憾的地方
这个qemuarm64和之前的qemux86-64虚拟机一样,没有dts(设备树文件),没有u-boot。