错误:CMake Error at Plugins/PluginCommandInterfaceCAPI/cmake/CommonAPI.cmake:352 (message):
| Failed to generate files from FIDL:
手动执行一下:
$ commonapi-generator-linux-x86 -ll verbose -sk Default -d . /data/linux/hz_rs28_bm/sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/audiomanager/7.0-r1/audiomanager-7.0/Plugins/PluginCommandInterfaceCAPI/fidl/CommandInterface.fidl
-bash: /data/linux/hz_rs28_bm/sources/src/build/tools/commonapi_tool/commonapi-generator/commonapi-generator-linux-x86: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
解决(需要安装32位的glibc库和32位java jre环境):
$ sudo yum install glibc.i686
$ sudo yum install java-1.8.0-openjdk.i686
$ sudo ln -s /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.i386/jre/bin/java /bin/java
$ java -version (保证是32位的java)
编译问题2(perl_5.20.0.bb的do_package报错):
错误:ERROR: objcopy failed with exit code 256 (cmd was ‘arm-poky-linux-gnueabi-objcopy’ –only-keep-debug
… generate_uudmap: File format not recognized
解决(tar在1.29版本之后需要exclude在路径的前面):
sources/meta/poky/bitbake/lib/bb/fetch2/bzr.py
tar_flags = “–exclude ‘.bzr’ –exclude ‘.bzrtags'”
修改成:
tar_flags = “–exclude=’.bzr’ –exclude=’.bzrtags'”
sources/meta/poky/bitbake/lib/bb/fetch2/cvs.py
tar_flags = “–exclude ‘CVS'”
修改成:
tar_flags = “–exclude=’CVS'”
sources/meta/poky/bitbake/lib/bb/fetch2/repo.py
tar_flags = “–exclude ‘.repo’ –exclude ‘.git'”
修改成:
tar_flags = “–exclude=’.repo’ –exclude=’.git'”
sources/meta/poky/bitbake/lib/bb/fetch2/svn.py
tar_flags = “–exclude ‘.svn'”
修改成:
tar_flags = “–exclude=’.svn'”
sources/meta/poky/meta/recipes-devtools/quilt/quilt-0.63.inc
tar -cf – bin/ –exclude \*.in | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -cf – compat/ –exclude \*.in | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -cf – quilt/ –exclude \*.in | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -cf – test/ –exclude mail.test –exclude delete.test | ( cd ${D}${PTEST_PATH} &&tar -xf – )
修改成:
tar -c –exclude=\*.in bin/ | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -c –exclude=\*.in compat/ | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -c –exclude=\*.in quilt/ | ( cd ${D}${PTEST_PATH} &&tar -xf – )
tar -c –exclude=mail.test –exclude=delete.test test/ | ( cd ${D}${PTEST_PATH} &&tar -xf – &&chmod 777 test)
sources/meta/poky/meta/recipes-extended/sed/sed-4.2.2/sed-add-ptest.patch
+ cd $(BUILDDIR)tar -cf – $(TESTDIR) –exclude *.o | ( cd $(DESTDIR) &&tar -xf – )
修改成:
+ cd $(BUILDDIR)tar -c –exclude=*.o $(TESTDIR) | ( cd $(DESTDIR) &&tar -xf – )
sources/meta/poky/meta/recipes-support/attr/acl.inc
tar -cf – test/ –exclude nfs | ( cd ${D}${PTEST_PATH} &&tar -xf – )
修改成:
tar -c –exclude=nfs test/ | ( cd ${D}${PTEST_PATH} &&tar -xf – )
sources/meta/poky/meta/recipes-support/attr/attr.inc
tar -cf – test/ –exclude ext | ( cd ${D}${PTEST_PATH} &&tar -xf – )
修改成:
tar -c –exclude=ext test/ | ( cd ${D}${PTEST_PATH} &&tar -xf – )
sources/meta/poky/meta/recipes-devtools/perl/perl-ptest.inc
tar -cf – * –exclude \*.o –exclude libperl.so –exclude Makefile –exclude makefile –exclude hostperl \
–exclude miniperl –exclude generate_uudmap –exclude patches | ( cd ${D}${PTEST_PATH} &&tar -xf – )
修改成:
tar -c –exclude=\*.o –exclude=libperl.so –exclude=Makefile –exclude=makefile –exclude=hostperl \
–exclude=miniperl –exclude=generate_uudmap –exclude=patches * | ( cd ${D}${PTEST_PATH} &&tar -x )
编译问题3(libunwind_1.1.bb的do_compile报错):
错误:make[1]: latex2man: Command not found
解决:
$ sudo yum install texlive-tetex
$ sudo rpm -ivh ~/latex2man-1.18-2.noarch.rpm
编译问题3(qt5-app_1.0.bb的do_compile报错):
错误(有一批类似的错误):ld: cannot find -lgtest
解决:
$ vi atc_linux/application/btate/btate.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L $(DA_LIBDIR)/lib -lgtest -lpthread -lbluetoothclient -lglobalbus -lappobj -lapputils
} else {
LIBS += -L$(DA_TOP)/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/atc-binarys/1.0-r0/image/usr/lib -lgtest -lpthread -lbluetoothclient -l
globalbus -lappobj -lapputils
}
$ vi atc_linux/application/gps/gps_bin.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L $(DA_LIBDIR)/lib -lapputils -lglobalbus -lappobj -lgps
} else {
LIBS += -L$(DA_TOP)/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/gpsd/3.10-r0/gpsd-3.10/ -lapputils -lglobalbus -lappobj -lgps
}
$ vi atc_linux/application/dvr/dvr_bin.pro
equals(MY_BUILD_SYSTEM, atc) {
LIBS += -L${DA_TOP}/lib/lib/ -ldvr -ludev -lsurface_atc -lglobalbus -lappobj -lapputils -lstorage_atc -lgps
} else {
LIBS += -L${DA_TOP}/application/lib -L$(DA_TOP)/../../sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/gpsd/3.10-r0/gpsd-3.10/ -ldvr -ludev -lsurface_atc -lglobalbus –
lappobj -lapputils -lstorage_atc -lgps
}
$ vi atc_linux/application/dvr/dvr_bin.pro
INCLUDEPATH += ${DA_TOP}/kernel/kernel-3.18/drivers/ \
../common/ \
../utils/ \
../appobj/include/ \
../globalbus/include/ \
../appcommon/include/ \
../storage_atc/ \
../dvr/gps/ \
../gps/include/ \
../gps/includeex/ \
编译问题4(makall报错):
报错:./makall: line 169: mkisofs: command not found
解决:$ sudo yum install mkisofs
编译问题5(修改ac83xx_systemd_defconfig再编译时报错):
报错:Applying patch remove-selinux-android.patch
patching file system/extras/ext4_utils/make_ext4fs.c
Hunk #1 FAILED at 62.
1 out of 1 hunk FAILED — rejects in file system/extras/ext4_utils/make_ext4fs.c
解决:
$ vi sources/meta/meta-atc/recipes-devtools/android-tools/android-tools_5.1.1.r37.bb
在里面做个假的do_patch(),bitbake会优先使用本bb文件的do_patch()函数。
do_patch(){
}
编译问题6(修改ac83xx_systemd_defconfig再编译时报错):
报错:sources/build/tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/qtbase/5.5.0+gitAUTOINC+c619d2daac-r0/git/src/corelib/tools/qregexp.cpp:3947:1: internal compiler error: in add_stores, at var-tracking.c:6000
解决:
$ cd sources/meta/poky/meta/recipes-devtools/gcc/gcc-4.9/
$ wget http://openlinux.windriver.com/overc/sources/core2_64/gcc-4.9.2-r0.1/0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch
$ vi sources/meta/poky/meta/recipes-devtools/gcc/gcc-4.9.inc
file://0058-gcc-r212171.patch \
file://0059-gcc-PR-rtl-optimization-63348.patch \
file://target-gcc-includedir.patch \
file://0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch \
其实就是这个文件:
$ cat 0062-gcc-var-tracking.c-backport-from-gcc-trunk-r212178.patch
From b30ffb8097749fdb55704aa7d8307ca1a58255d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20M=C3=BCller-Klieser?= <s.mueller-klieser@phytec.de>
Date: Tue, 7 Apr 2015 16:15:11 +0200
Subject: [PATCH] gcc/var-tracking.c: backport from gcc trunk r212178
MIME-Version: 1.0
Content-Type: text/plaincharset=UTF-8
Content-Transfer-Encoding: 8bit
resolves a bug seen on cortexa8 building qt5 libraries.
2014-06-30 Joseph Myers <joseph@codesourcery.com>
* var-tracking.c (add_stores): Return instead of asserting if old
and new values for conditional store are the same.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@212178 138bc75d-0d04-0410-961f-82ee72b054a4
Signed-off-by: Stefan Müller-Klieser <s.mueller-klieser@phytec.de>
---
gcc/var-tracking.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c
index 65d8285..7c38910 100644
--- a/gcc/var-tracking.c
+++ b/gcc/var-tracking.c
@@ -5997,7 +5997,8 @@ add_stores (rtx loc, const_rtx expr, void *cuip)
{
cselib_val *oval = cselib_lookup (oloc, GET_MODE (oloc), 0, VOIDmode)
- gcc_assert (oval != v)
+ if (oval == v)
+ return
gcc_assert (REG_P (oloc) || MEM_P (oloc))
if (oval &&!cselib_preserved_value_p (oval))
--
1.9.1
编译问题7(修改ac83xx_systemd_defconfig再编译时报错):
报错:libevdev/1.2.2-r0/libevdev-1.2.2/test/test-main.c:24:19: fatal error: check.h: No such file or directory
解决:
$ vi meta/poky/meta/recipes-support/libevdev/libevdev_1.2.2.bb
LIC_FILES_CHKSUM = “file://COPYINGmd5=75aae0d38feea6fda97ca381cb9132eb \
file://libevdev/libevdev.hendline=21md5=7ff4f0b5113252c2f1a828e0bbad98d1″
DEPENDS += “libcheck”
SRC_URI = “ http://www.freedesktop.org/software/libevdev/ ${BP}.tar.xz”
编译问题8(修改ac83xx_systemd_defconfig再编译时报错):
报错:python报错: ‘do_rootfs’, lineno: 17, function
Exception: CalledProcessError: Command ‘[‘du’, ‘-ks’, …
解决: 没有实际问题,重新编译一次即可,可能是机器太忙导致超时,或者某个命令执行不成功。
编译问题9(preuboot编译工具问题):
报错:make: armv7a-mediatek451_001_vfp-linux-gnueabi-gcc: Command not found
解决:
$ vi atc_linux/bootloader/preuboot/Makefile
#CROSS_COMPILE :=armv7a-mediatek451_001_vfp-linux-gnueabi-
CROSS_COMPILE :=arm-poky-linux-gnueabi-
$ vi ../../atc_linux/bootloader/preuboot/driver/mmc/include/linux/list.h
#ifndef NULL
#define NULL 0
#endif
本文将为大家介绍如何创建 Yocto* 的可运行映像,如何在基础软件模拟器 QEMU 中测试该映像,以及如何在管理程序(比如 Windows 上的 Microsoft Hyper-V)中运行该映像。*** 作本教程的前提条件
Debian/Ubuntu(已经过 Debian 8.2 amd64 的测试)互联网连接磁盘提供至少 100 GB 可用空间
构建机器的前期准备工作
以根身份(或通过 "sudo")运行以下命令
1 # apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop
注 1:上述命令是否成功运行取决于大家使用的 Ubuntu/Debian 版本。 最后,如欲解决程序包的依赖关系,可以运行 "aptitude",强行安装正确版本的程序包(比如,"aptitude install libsdl1.2-dev")。
注 2:对于其他 Linux-distribution 来说,比如 RadHat、CentOS、Fedora、SuSe、Gentoo 等......建议通过正确的 package-manager(例如 zypper、yum 等)检查上述程序包的相应版本。
第一步: 设置工作文件夹
以没有特权的普通用户(没有根身份)
1 # cd
2 # mkdir yocto-2.0
3 # cd yocto-2.0
4 # wget http://downloads.yoctoproject.org/releases/yocto/yocto-2.0/poky-jethro-14.0.0.tar.bz2
5 # tar xvjf poky-jethro-14.0.0.tar.bz2
6 # cd poky-jethro-14.0.0/
注 3:可以点击以下链接 https://www.yoctoproject.org/downloads,选择 Yocto 版本的其他开发分支。 本教程将使用当前最新版本 "Jocto Poky 2.0.14.0.0 codename Jethro"。
注 4:如欲获取最新版 Yocto 资源,可以获得主开发分支,需要将 wget *** 作替换为以下内容:
1 # git clone git://git.yoctoproject.org/poky.git
2 # cd poky
注 5: 还可以通过代号选择特定的开发分支。 例如:
1 # git clone -b jethro git://git.yoctoproject.org/poky.git
第二步: 设置系统 shell 的环境变量
Yocto 开发人员提供了一个非常易用的脚本。
1 # . ./oe-init-build-env
脚本运行后,如果正常,您的位置将变成一个构建子目录,它将成为您的新工作区。 类似于 /home/<your user>/yocto-2.0/poky-jethro-14.0.0/build/。
第三步: 设置 bitbake
执行之前的脚本,会创建一个 conf/local.conf 文件。
该配置文件需要设置 Yocto 的构建引擎 bitbake(Yocto 项目的核心组件)。
采用首选文本编辑器编辑 bitbake 配置文件。 本教程将使用 nano — 面向类似 Unix 的环境的简单命令-行-界面文本编辑器,如下所示:
1 # cd conf/
2 # nano local.conf
取消下列行的注释
1 DL_DIR ?= "${TOPDIR}/downloads"
2 SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
3 TMPDIR ?= "${TOPDIR}/tmp"
4 SDKMACHINE ?= "i686"
建议为该映像构建所有其他的可用特性。 最终的映像将特别大(每个大约 8GB),但绝对完整,可满足所有开发需求。
1 EXTRA_IMAGE_FEATURES = "dbg-pkgs dev-pkgs ptest-pkgs tools-sdk tools-debug eclipse-debug tools-profile tools-testapps debug-tweaks"
现在,通过 CTRL+X 键组合保存对文件 local.conf 作出的所有更改。
然后:
1 # cd ..
2 # hob
现在,Hob 实例(面向 BitBake、基于 GTK2 的图形用户界面)将启动,检查构建系统的准确程度。
现在在下拉菜单中选择 qemux86 机器。
等 Hob 完成 BitBake 方案解析并生成依赖关系树。 然后选择目标映像,以从上述菜单的 "select an image recipe" 开始构建。 在本示例中,我们选择不包含 GUI 的完整核心映像: core-image-full-cmdline。
现在点击 "Advanced Configuration"。
如欲构建最新的稳定版,在 "Image types" 面板中保留 "Distro" 菜单中的 poky。 然后在 "Image types" 字段中选择所需的格式:通常我选择 ".iso"、".vdi" 和 ".vmdk",它们最好用。
请在 "Output" 面板中选择能够满足要求的最佳选项。 建议为映像增加 4GB 可用存储,以放置面向 i686 架构的 SDK(如果您使用 Edison 开发板)。 另外,我认为将 "deb" 设置为面向根文件系统的打包格式非常有用。 因此,如下所示:
好的,保存。 现在,您已准备好构建映像! 点击 "Build image" 按钮!
Hob 将启动 bitbake core-image-full-cmdline 示例,以及您钟爱的设置。
注 7:这一流程将花费很长时间构建最终映像。 不过,根据您主机功能的不同,可以更改用于在 "BitBake parallel threads" 和 "Make parallel threads" 上执行构建 *** 作的处理器内核的数量。 可从 Hob settings 窗口更改这些变量:
注 8:您可以借助 Hob 确定将要构建的映像包含哪些包。 为此,可以在开始构建映像之前选择 "Edit image recipe"。
linux内核镜像格式一、Linux内核镜像格式
Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.
(1)kernel镜像格式:vmlinux
vmlinuz是可引导的、可压缩的内核镜像,vm代表Virtual Memory.Linux支持虚拟内存,因此得名vm.它是由用户对内核源码编译得到,实质是elf格式的文件.也就是说,vmlinux是编译出来的最原始的内核文件,未压缩.这种格式的镜像文件多存放在PC机上.
【 attention】elf格式文件
ELF,Executable and Linkable Format,可执行可链接格式,是UNIX实验室作为应用程序二进制接口而发布的,扩展名为elf.可以简单的认为,在elf格式的文件中,除二进制代 码外,还包括该可执行文件的某些信息,比如符号表等.
(2)kernel镜像格式:Image
Image是经过objcopy处理的只包含二进制数据的内核代码,它已经不是elf格式了,但这种格式的内核镜像还没有经过压缩.
【 attention】objcopy
GNU使用工具程序objcopy作用是拷贝一个目标文件的内容到另一个目标文件中,也就是说,可以将一种格式的目标文件转换成另一种格式的目标文件. 通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,实质上是将所有的符号和重定位信息都将被抛弃,只剩下二进制数据.
(3)kernel镜像格式:zImage
zImage是ARM linux常用的一种压缩镜像文件,它是由vmlinux加上解压代码经gzip压缩而成,命令格式是#make zImage.这种格式的Linux镜像文件多存放在NAND上.
(4)kernel镜像格式:bzImage
bz表示big zImage,其格式与zImage类似,但采用了不同的压缩算法,注意,bzImage的压缩率更高.
(5)kernel镜像格式:uImage
uImage是uboot专用的镜像文件,它是在zImage之前加上一个长度为0x40的头信息(tag),在头信息内说明了该镜像文件的类型、加载 位置、生成时间、大小等信息.换句话说,若直接从uImage的0x40位置开始执行,则zImage和uImage没有任何区别.命令格式是#make uImage.这种格式的Linux镜像文件多存放在NAND上.
(6)kernel镜像格式:xipImage
这种格式的Linux镜像文件多存放在NorFlash上,且运行时不需要拷贝到内存SDRAM中,可以直接在NorFlash中运行.
二、Linux内核镜像的产生过程
在嵌入式Linux中,内核的启动过程分为两个阶段.其中,第一阶段启动代码放在arch/arm/kernel/head.S文件中,该文件与体系 结果相关,与用户的开发板无关,主要是初始化ARM内核等.第二阶段启动代码是init目录下的main.c.现以执行命令#make zImage为例来说明,arm-linux内核镜像的产生过程.
(1)当用户对Linux内核源码进行编译时,kernel的第1/2阶段代码会生成可执行文件vmlinux,该文件是未被压缩的镜像文件,非常大,不能直接下载到NAND中,通常放在PC机上,这也是最原始的Linux镜像文件.试验时该文件约50M.
(2)镜像文件vmlinux由于很大,肯定不能直接烧入NAND中,因此需要进行二进制化,即经过objcopy处理,使之只包含二进制数据的内核代 码,去除不需要的文件信息等,这样就制作成了image镜像文件.该镜像文件也是未压缩,只是经过了二进制化而变小.试验时该文件约5M.
(3) 一般来说,内存SDRAM中的内核镜像是经过压缩的,只是在运行时再将其解压.所以,编译时会先使用gzip将镜像文件image进行压缩(压缩比约为 2:1),再将压缩后的镜像文件和源码中的两个文件arch/arm/boot/compressed/head.S、arch/arm/boot /compressed/misc.c一起链接生成压缩后的镜像文件compress/vmlinux.试验时该文件约为2.5M.注意,这两个源码文件 是解压程序,用于将内存SDRAM中的压缩镜像zImage进行解压.
(4)压缩后的镜像文件compress/vmlinux经过二进制化,最终生成镜像文件zImage,试验时该文件约为2.5M.当然,在内存 SDRAM中运行压缩镜像文件zImage时,会首先调用两个解压程序arch/arm /boot/compressed/head.S、arch/arm/boot/compressed/misc.c将自身解压,然后再执行kernel 的第一阶段启动代码arch/arm/kernel/head.S.简而言之,在内存中运行内核时,kernel先自身解压,再执行第一阶段启动代码.试 验时运行在内存中的镜像文件约为5M,与image镜像文件大小相同.
(
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)