Linux 64位安装32位运行库(解决RK3399 make kernel.img error)
2017-05-01 20:18
609 查看
CSDN | GitHub |
---|---|
Linux 64位安装32位运行库(解决RK3399 make kernel.img error) | AderXCoding/system/tools/ia32_install |
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作
1 问题描述
make kernel.img error近期实验室购入了
RK-3399的开发板的, 官方的
SDK教程都是基于
ubuntu的, 但本人用远程服务器做开发机, 系统安装的是
CentOS 7, 于是试着在
archlinux上编译一下源码, 编译内核时出现以下错误 : ·make: * [kernel.img] Error 127`
#make ARCH=arm64 rk3399-mid-818-android.img -j12 CHK include/config/kernel.release CHK include/generated/uapi/linux/version.h CHK include/generated/utsrelease.h make[1]: `arch/arm64/boot/dts/rockchip/rk3399-mid-818-android.dtb' is up to date. CHK include/generated/timeconst.h CHK include/generated/bounds.h CHK include/generated/asm-offsets.h CALL scripts/checksyscalls.sh CHK include/generated/compile.h GEN drivers/video/rockchip/screen/lcd.h OBJCOPY arch/arm64/boot/Image make: *** [kernel.img] Error 127
2 问题发现
很明显内核构建的过程中Image, 已经构建完毕, 但是在构建
kernel.img时候出现问题,
我们从
Makefile中看看在生成
kernel.img的时候具体做了什么
#cat -n arch/arm64/Makefile | grep kernel.img 143 kernel.img: Image 144 $(Q)$(srctree)/scripts/mkkrnlimg $(objtree)/arch/arm64/boot/Image $(objtree)/kernel.img >/dev/null 145 @echo ' Image: kernel.img is ready' 149 %.img: rockchip/%.dtb kernel.img $(LOGO) $(LOGO_KERNEL)
可以看到生成
kernel.img的规则在
Makefile的第
143~145行
# 查看 makefile 第 142~146 行的信息 #sed -n '142,146p' Makefile kernel.img: Image $(Q)$(srctree)/scripts/mkkrnlimg $(objtree)/arch/arm64/boot/Image $(objtree)/kernel.img >/dev/null @echo ' Image: kernel.img is ready'
可以看到生成的规则为
scripts/mkkrnlimg arch/arm64/boot/Image kernel.img >/dev/null
通过脚本
mkkrnlimg将
Image生成
kernel.img, 既然
kernel.img没有生成, 那说明
mkkrnlimg运行出现问题
查看
mkkrnlimg的文件属性
#file scripts/mkkrnlimg scripts/mkkrnlimg: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, stripped
可以发现, **执行文件
mkkrnlimg是在 32 位平台上运行的, 而我的系统是 64 位的, 问题就在于此了, 为了在 64 位系统上运行 32 位的执行文件, 一般需要安装
lib32-glibc, 于是试了一下:
3 Linux 64 安装32位运行库
参照What do I need to do to install and run Sourcery CodeBench on an x86 64-bit Linux host system?3.1 CentOS
sudo yum install ia32-libs.i686
或者
sudo yum install xulrunner.i686
PS:可以查看一下当前源库里有没有
ia32-libs:
yum list|grep ia32-
3.2 Arch Linux
pacman -S lib32-glibc yaourt -S lib32-glibc
这两个指令都找不到
lib32-glibc, 于是上官网找了一下, 还是可以找到:
https://www.archlinux.org/packages/multilib/x86_64/lib32-glibc/
于是,下载:
lib32-glibc-2.22-3.1-x86_64.pkg.tar.xz
安装 :
pacman -U lib32-glibc-2.22-3.1-x86_64.pkg.tar.xz
再编译即可
3.3 Ubuntu
安装 32
位库
Ubuntu 13.04 or olderapt-get install ia32-libs
Ubuntu 14.04 and newer
ubuntu14.04/13.10/13.04 安装32位运行库(成熟技术)
ubuntu 14.04 64bit安装32位运行库
14.04以后目前
ia-32的库已经被移除了, 但是我们仍然可以通过添加
13.04源的方式来安装
ia-32
sudo apt-get install libc6:i386 sudo -i # 添加13.04 raring的ia-32源 cd /etc/apt/sources.list.d echo "deb http://archive.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list apt-get update apt-get install ia32-libs # 删除raring的源防止本身的源被污染 rm /ia32-libs-raring.list apt-get update exit sudo apt-get install gcc-multilib
注:这种方法肯定能安装上ia32-libs,但由于添加的是13.04的源,所以有没有混淆暂时不清楚,网上也有很多用新立德软件包管理器这样做;够狠,你就这么干。也可以这么安装了ia32-libs后,把/etc/apt/sources.list.d目录下的ia32-libs-raring.list删掉,然后再sudo apt-get update
Ubuntu16.04(64bit)兼容32bit程序
Ubuntu16.04安装32位支持库
但是其实有更好更安全的方法,
14.04之后, 64 位系统可以直接以
#这是第一步,让你的系统接受i386架构的安装包,这样才可以在apt-get update时下载相应的list dpkg --add-architecture i386 #以后通过在包名后面加 :i386 下载相应的包。 apt-get install [package name]:i386
比如
sudo dpkg --add-architecture i386 sudo apt install libc6:i386
How to run 32-bit app in Ubuntu 64-bit?
4 验证
运行scripts/mkkrnlimg arch/arm64/boot/Image kernel.img
或者重新编译内核
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作.
相关文章推荐
- linux出现64位运行32位出错的解决办法(/lib/ld-linux.so.2: bad ELF interpreter /lib/ld-linux.so.2 /lib/ld-linux.so.)
- 64位Linux(ubuntu)安装、运行32位程序
- linux 6.4(64位)系统安装32位运行库操作方法
- 关于Linux64位系统不能安装32位程序的解决方式
- 64位linux 系统运行32位程序解决方法
- 解决linux64位安装jpeg 出错make: ./libtool: Command not found
- Linux在64位运行32位程序(安装32位库:rpm、deb)
- Linux应用随笔(五)64位Debian8兼容运行32位adb开发android应用,并解决手机驱动问题
- 32位的tetview and medit 在64bit的linux运行,有很多32bit的库没有安装,错误不断之解决办法。
- 用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解决办法
- linux 64位操作系统安装32位运行库
- 解决linux64位安装jpeg 出错make: ./libtool: Command not found
- 64位linux不能运行32位程序,问题解决方案
- 转载:用oralce连接.net客户端出现问题:“数据连接不成功,请检查该数据库是否已启动尝试加载oracle客户端时引发BadImageFormatException.如果在安装32位Oracle客户端组件的情况下以64位模式运行,”的解
- Vista(WIN7) 下先安装 VS 再装 IIS 7 运行出现 500.19 Error 的解决方法
- 终于解决了Linux下运行OCCI程序一直报Error while trying to retrieve text for error ORA-01804错误
- Linux 32位向64位移植的一些问题及解决
- 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
- 64位操作系统(Windows 2008 R2 X64)安装32位程序Excel/word在Dcom下找不到的解决办法
- 64位Linux使用yum安装两个相同软件不同版本包的解决方法