ubuntu 14.04 编译yocto源码
1. 环境安装
ubuntu 14.04
yocto依赖工具链
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping
源码已经就位
./makall
2. 错误记录
2.1 bash or dash
在kernel编译的时候提示no such arch:
这里就是shell脚本语言在做字符串匹配,而且同样的code在服务器是编译通过的,所以这里主要怀疑:
gcc的lib库是否没有安装;sh是否没有安装;
经确认主机上与服务器上sh有差异,主机默认安装为dash,替换后此错误通过:
sudo dpkg-reconfigure dash,选择no
2.2 JDK 1.8 安装
在编译到service阶段的时候出现编译错误,提示语JDK相关,在安装openjdk 1.8后可以正常编译通过,这里记录openjdk 1.8的安装过程:
替换源:
由于ubuntu中默认没有支持openjdk,所以这里需要在source.list中加入;ubuntu官网毕竟是外网,访问如同龟速,这里替换为aliyun的镜像网站;
sudo cp sources.list sources.list.bak
sudo vim /etc/apt/sources.list
具体内容:
deb /ubuntu/ xenial main restricted universe multiverse deb /ubuntu/ xenial-security main restricted universe multiverse deb /ubuntu/ xenial-updates main restricted universe multiverse deb /ubuntu/ xenial-backports main restricted universe multiverse ##测试版源deb /ubuntu/ xenial-proposed main restricted universe multiverse ## 源码 deb-src /ubuntu/ xenial main restricted universe multiverse deb-src /ubuntu/ xenial-security main restricted universe multiverse deb-src /ubuntu/ xenial-updates main restricted universe multiverse deb-src /ubuntu/ xenial-backports main restricted universe multiverse ##测试版源 deb-src /ubuntu/ xenial-proposed main restricted universe multiverse # Canonical 合作伙伴和附加 deb /ubuntu/ xenial partner deb /ubuntu/ xenial main
更新并安装jdk
sudo apt-get install update
sudo apt install openjdk-8-jre-headless
sudo apt install openjdk-8-jre
sudo apt install openjdk-8-jdk
验证:
java -version
3.2.3 libinput 编译meson失败
出错环节:
gcc /code/sumo/build/tmp/work/aarch64-poky-linux/libinput/1.9.4-r0/build/meson-private/sanitycheckc.c -o /code/sumo/build/tmp/work/aarch64-poky-linux/libinput/1.9.4-r0/build/meson-private/sanitycheckc.exe
错误信息:
这里提示在链接crti.o时出错,地址不识别,这里多半认为是版本问题将已经编译过得环境中crti.o替换到主机中,编译通过说明是gnu lib库有差异 gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/…/…/…/x86_64-linux-gnu/crti.o: unrecognized relocation (0x2a) in section `.init’
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
处理方案:
在gnu lib中替换crti.o
3.2.4 打包ext4 image错误
错误提示:
make_ext4fs执行时有库找不到
ldd 命令查看链接库:
sumo/src/build/tools$ ldd make_ext4fs
linux-gate.so.1 => (0xf773b000)
libstdc++.so.6 => not found
file命令查看make_ext4fs
make_ext4fs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped
结合错误信息来看,默认这个库安装时64bit的,所以需要安装对应32bit的libstdc++.so.6
处理:
sudo apt-get install lib32stdc++6
搞定收工
3.3 总结
错误原因大多为(环境配置):
缺少某些环境或者库,例如JDK等某些环境的版本与code依赖版本不匹配,例如openssl、libgnu等等某些工具配置不对,例如bash等
在新的环境编译新的系统,总会遇到各式各样的环境问题,整体思路就是确认出错步骤,单步执行打印提示,逐步check即可