Android内核错误:未定义引用`radio_hci_smd_init'

时间:2016-08-03 11:47:52

标签: android linux linux-kernel arm

我正在尝试为摩托罗拉Moto E构建Android内核。

Android内核信息:

名称:Android内核摩托罗拉MSM8610

设备(预期):Moto E

硬件:MSM8610

Github:Kernel Source Link

工具链:

我在以下工具链上尝试了同样的错误。

  1. Linaro 4.6.4
  2. Android NDK ARMEABI 4.6
  3. 我的程序:

    1. 首先清理android内核源目录。

      make clean && make mrproper

    2. 制作配置文件。

      make ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/ msm8610_defconfig

    3. 构建内核。

      make ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/

    4. 错误:

      在最后一步,即构建内核部分,我收到以下错误:

        LD      init/built-in.o
        LD      .tmp_vmlinux1
      drivers/built-in.o: In function `iris_fops_open':
      /home/mohit/code/android_kernel_motorola_msm8610/drivers/media/radio/radio-iris.c:5100: undefined reference to `radio_hci_smd_init'
      Makefile:885: recipe for target '.tmp_vmlinux1' failed
      make: *** [.tmp_vmlinux1] Error 1
      

      这可以修复吗?

      谢谢。

1 个答案:

答案 0 :(得分:2)

一旦您了解了内核源代码的方法,只需按照以下步骤进行调查就非常简单:

  • 搜索结果显示radio_hci_smd_init
  • 中定义了CONFIG_RADIO_IRIS_TRANSPORT=m
  • 单步执行Makefile,构建了radio-iris-transport.c radio-iris-transport.c。因此,可能存在一些配置问题。
  • RADIO_IRIS_TRANSPORT的KConfig条目结果为dependent on CONFIG_RADIO_IRIS_TRANSPORT,因此它可能属于defconfig。
  • 宾果。 to be disabled by default - RADIO_IRIS是内置的,但RADIO_IRIS_TRANSPORT正在构建为模块。模块代码在主vmlinux映像之后单独编译,因此无法链接。

最简单的方法可能是编辑.config以将CONFIG_RADIO_IRIS_TRANSPORT=y更改为{{1}},以使该驱动程序也内置并希望能够与另一个驱动程序链接。

也就是说,该行给出了您的错误That defconfig is bogus。从Git日志中,似乎有人试图通过引入破坏的构建时依赖性来修复损坏的运行时依赖性问题,并且在该分支上至少再次还原它。