【问题标题】:Android emulator segmentation faultAndroid 模拟器分段错误
【发布时间】:2012-12-09 11:37:20
【问题描述】:

从命令行运行导致分段错误:

$ emulator -avd nexus_s
Segmentation fault (core dumped)

但是,直接运行 emulator-arm 如下,效果很好。

$ emulator-arm -avd nexus_s

我怀疑它正在尝试运行 mips 或 x86 版本的模拟器。 有没有办法配置模拟器启动哪个可执行文件?

这一切都是在更新到 android sdk 17 后开始的。

添加 -verbose 标志会提供以下输出(我认为不会添加任何信息):

$ emulator -verbose -avd nexus_s
emulator: found SDK root at /opt/sdk
emulator: Android virtual device file at: /home/grebulon/.android/avd/nexus_s.ini
emulator: virtual device content at /home/grebulon/.android/avd/nexus_s.avd
emulator: virtual device config file: /home/grebulon/.android/avd/nexus_s.avd/config.ini
emulator: using core hw config path: /home/grebulon/.android/avd/nexus_s.avd/hardware-qemu.ini
emulator: Found AVD target API level: 17
emulator: 'magic' skin format detected: 480x800
emulator: autoconfig: -skin 480x800
emulator: autoconfig: -skindir (null)
emulator: keyset loaded from: /home/grebulon/.android/default.keyset
emulator: found magic skin width=480 height=800 bpp=16

emulator: autoconfig: -kernel /opt/sdk/system-images/android-17/armeabi-v7a//kernel-qemu
emulator: autoconfig: -ramdisk /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//ramdisk.img
emulator: Using initial system image: /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img
emulator: autoconfig: -data /home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img
emulator: autoconfig: -initdata /home/grebulon/.android/avd/nexus_s.avd/userdata.img
emulator: autoconfig: -cache /home/grebulon/.android/avd/nexus_s.avd/cache.img
emulator: Physical RAM size: 343MB

Content of hardware configuration file:
  hw.cpu.arch = arm
  hw.cpu.model = cortex-a8
  hw.ramSize = 343
  hw.screen = touch
  hw.mainKeys = yes
  hw.trackBall = no
  hw.keyboard = no
  hw.keyboard.lid = no
  hw.keyboard.charmap = qwerty2
  hw.dPad = no
  hw.gsmModem = yes
  hw.gps = yes
  hw.battery = no
  hw.accelerometer = yes
  hw.audioInput = yes
  hw.audioOutput = yes
  hw.sdCard = yes
  disk.cachePartition = yes
  disk.cachePartition.path = /home/grebulon/.android/avd/nexus_s.avd/cache.img
  disk.cachePartition.size = 66m
  hw.lcd.width = 480
  hw.lcd.height = 800
  hw.lcd.depth = 16
  hw.lcd.density = 240
  hw.lcd.backlight = yes
  hw.gpu.enabled = yes
  hw.camera.back = none
  hw.camera.front = none
  vm.heapSize = 32
  hw.sensors.proximity = yes
  hw.sensors.magnetic_field = yes
  hw.sensors.orientation = yes
  hw.sensors.temperature = yes
  kernel.path = /opt/sdk/system-images/android-17/armeabi-v7a//kernel-qemu
  kernel.parameters =  android.checkjni=1
  disk.ramdisk.path = /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//ramdisk.img
  disk.systemPartition.initPath = /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img
  disk.systemPartition.size = 200m
  disk.dataPartition.path = /home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img
  disk.dataPartition.size = 209m
  avd.name = nexus_s
.
QEMU options list:
emulator: argv[00] = "/opt/sdk/tools/emulator64-arm"
emulator: argv[01] = "-android-hw"
emulator: argv[02] = "/home/grebulon/.android/avd/nexus_s.avd/hardware-qemu.ini"
Concatenated QEMU options:
 /opt/sdk/tools/emulator64-arm -android-hw /home/grebulon/.android/avd/nexus_s.avd    /hardware-qemu.ini
emulator: registered 'boot-properties' qemud service
emulator: nand_add_dev: system,size=0xc800000,initfile=/opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img
emulator: mapping 'system' NAND image to /tmp/android-grebulon/emulator-RSuUtb
emulator: rounding devsize up to a full eraseunit, now c810000

emulator: nand_add_dev: userdata,size=0xd100000,file=/home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img
emulator: rounding devsize up to a full eraseunit, now d116000

emulator: registered 'boot-properties' qemud service
emulator: Adding boot property: 'dalvik.vm.heapsize' = '32m'
emulator: Adding boot property: 'qemu.sf.lcd_density' = '240'
emulator: Adding boot property: 'qemu.hw.mainkeys' = '1'
emulator: Adding boot property: 'qemu.sf.fake_camera' = 'none'
emulator: nand_add_dev: cache,size=0x4200000,file=/home/grebulon/.android/avd/nexus_s.avd/cache.img
emulator: Initializing hardware OpenGLES emulation support
Segmentation fault (core dumped)

【问题讨论】:

  • OS X? Linux?一些奇怪的平行宇宙版本的 Windows,它们也采用了$ 命令提示符?
  • Linux,具体来说是 ubuntu 12.04。
  • 尝试将-v 添加到emulator 命令行并查看它转储的位置。尝试在 Ubuntu 11.10 上加载 OpenGL 驱动程序时,R21 Android 工具崩溃时遇到emulator 的问题——在 b.android.com 上存在一个问题,解决方法是重命名该 OpenGL 驱动程序,以便 Android 可以没找到。
  • 在我尝试命令行之前,AVD 管理器会说它正在启动设备,但不会出现任何窗口。

标签: android android-emulator emulation avd


【解决方案1】:

在遵循 CommonsWare 的提示后,我终于找到了解决方案。 重命名 libOpenglRender.so 解决了这个问题。

mv tools/lib/libOpenglRender.so tools/lib/libOpenglRender.so.xxx

【讨论】:

  • 这确实让模拟器出现了。但它输出以下错误消息:模拟器:错误:无法加载OpenGLES仿真库:lib64OpenglRender.so:无法打开共享对象文件:没有这样的文件或目录模拟器:警告:无法使用软件渲染器初始化OpenglES仿真。跨度>
  • 非常感谢!!!经过一个多星期的尝试,将所有 lib*.* 文件从 /tools/lib/ 重命名为 lib*.*.xxx 使模拟器启动。我是对的,所有模拟器崩溃问题都与 OpenGLES 有关:code.google.com/p/android/issues/detail?id=33336 & code.google.com/p/android/issues/detail?id=28601
  • 对于 64 位,将 lib64OpenglRender.so 重命名为 lib64OpenglRender.so.xxx 文件。
  • 当我尝试这个时,它需要永远加载 AVD,就像使用 -gpu off 选项运行它一样,所以不知道它是否真的解决了问题......无论如何我们可以得到它在不使用有缺陷的 openGL 渲染器的情况下快速运行?
【解决方案2】:

在我的 Ubuntu 12.04 系统上,我通过确保未在 AVD 配置中打开“使用主机 GPU”来解决此问题。

【讨论】:

    【解决方案3】:

    键入命令

    $ emulator-arm @nexus_s

    希望这会有所帮助:-)

    【讨论】:

      【解决方案4】:

      我在 Debian Wheezy 上遇到了同样的问题。 grebulon 的回答对我来说有点用,但是模拟器太慢了,所以我开始着手以正确的方式 (tm) 修复它。

      在这种情况下,Segmentation fault 可能表示 OpenGL 存在问题。 (注意最后一行日志是“emulator: Initializing hardware OpenGLES emulation support”)

      在我的例子中,通过/var/log/Xorg.0.log 搜索“GL”会显示一些 NVidia GLX 驱动程序(来自进入数字天堂的旧显卡)。鉴于我有 AMD Radeon,我卸载了每个包含“nvidia”的软件包(列表:apt-get search nvidia | grep ^i)并安装:

      # apt-get install libgl1-fglrx-glx
      

      重启后模拟器抱怨缺少libOpenglRender.solibGL.so,我这样解决:

      # echo "/opt/adt/sdk/tools/lib" > /etc/ld.so.conf.d/android_stuff.conf
      # ldconfig
      # cd /opt/adt/sdk/tools/lib
      # ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 libGL.so
      

      请注意,我的情况可能是独一无二的(当我从 NVidia 转到 AMD 时问题就开始了),但问题的根源可能是相似的(OpenGL)。我希望它可以帮助某人。

      更新:仍然不起作用,看来我的驱动程序不支持 OpenGL 中的 16 位颜色...将进一步调查。

      【讨论】:

        【解决方案5】:

        如果您在这里没有找到答案,您应该订阅:

        1. Issue 34233: Emulator start produces segmentation fault after upgrading to r20
        2. Issue 55325: Emulator crashing with segfault
        3. Issue 20952: Emulator segfault on startup (unrelated to audio)

        在那里您将收到有关此问题的更新并找到一些解决方法(例如重命名 lib*.* 文件)。

        【讨论】:

          【解决方案6】:

          通过 android studio 擦除数据和冷启动设备在 ubuntu 16.04 中解决了这个问题

          【讨论】:

            【解决方案7】:

            粘贴到 ~/.android/avd/.avd/config.ini

            hw.gpu.mode = swiftshader_indirect
            

            在我的情况下,我是这样解决的。

            【讨论】:

              【解决方案8】:

              我在 Ubuntu 20.04 上遇到了同样的问题。重命名 libOpenglRender.so 对我有用,但模拟器需要很长时间才能初始化。另外,我不得不重新安装 Ubuntu(出于不同的原因),然后在打开模拟器时我开始收到 emulator: ERROR: Could not load OpenGLES emulation library 错误。

              在搜索了有关这些问题的更多信息后,我发现问题出在视频驱动程序上。我用的是 Nouveau,换成 Nvidia 驱动后,我不再需要重新命名 libOpenglRender.so,现在模拟器初始化非常快,没有显示任何错误消息。

              这是解决问题的驱动程序:

              【讨论】:

                猜你喜欢
                • 2019-12-25
                • 1970-01-01
                • 1970-01-01
                • 2021-11-06
                • 1970-01-01
                • 2021-03-17
                • 2012-01-28
                • 2012-08-22
                • 2011-06-18
                相关资源
                最近更新 更多