[Android] 单独编译生成boot.img时mkbootfs: No such file or directory解决方法

在一台没有安装Android源码编译环境的64位 Ubuntu14.04.5虚拟机上尝试单独编译Android用的Linux Kernel。并从编译好Android源码的机器上将out文件夹下的mkbootfs、minigzip、mkbootimg二进制程序copy了过来,用于生成boot.img

用copy过来的arm-eabi-4.6编译Kernel正常,但是编译后生成ramdisk.img的那一步,脚本执行总提示
tools/mkbootfs: No such file or directory
tools/minigzip: No such file or directory

确认了mkbootfs和minigzip文件的权限等没发现问题,只能想到是某些安装包没有安导致与原有的开发环境不一样。

试验后用下面命令安装g++-multilib和gcc-multilib后就正常了。

sudo apt-get install g++-multilib gcc-multilib

果然是由于mkbootfs是用32位的gcc/g++编译生成的,所以在64位系统上执行就需要安装g++-multilib或者gcc-multilib,两个只安装其中一个可能也可行,不过以后可能还有其他需要,就索性都安上吧。

又用readelf确认了一下mkbootfs文件的ELF Header证实了想法。

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8048c28
  Start of program headers:          52 (bytes into file)
  Start of section headers:          23604 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         8
  Size of section headers:           40 (bytes)
  Number of section headers:         39
  Section header string table index: 36

你可能感兴趣的:(Android)