【问题标题】:android kernel error: 'struct dentry' has no member named 'd_alias'android内核错误:'struct dentry'没有名为'd_alias'的成员
【发布时间】:2016-07-24 02:27:24
【问题描述】:

所以我已经为我的摩托罗拉手机克隆了 android 内核源代码,并且正在构建它。

Android 内核信息:

名称:Android 内核 Motorola MSM8610

设备(预期):Moto E

硬件:MSM8610

Github:Kernel Source Link

程序:

首先,我使用 .config 文件制作了

make ARCH=arm msm8610_defconfig

然后我尝试通过创建文件名来构建内核映像startBuild

开始构建:

make ARCH=arm SUBARCH=arm CROSS_COMPILE=/media/mohit/776b997b-f9a1-46c2-92a0-7f438c7b78e3/code/toolchain/arm-eabi-4.6/bin/arm-eabi- -j4

赋予它所需的权限

chmod +x startBuild

并执行它

./startBuild

但我收到以下错误消息:

  CHK     include/linux/version.h
make[1]: Nothing to be done for 'arch/arm/boot/dtbs'.
  CHK     include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' is up to date.
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CHK     kernel/config_data.h
  CC      fs/overlayfs/inode.o
fs/overlayfs/inode.c: In function 'ovl_permission':
fs/overlayfs/inode.c:71:11: error: 'struct dentry' has no member named 'd_alias'
fs/overlayfs/inode.c:71:11: warning: initialization from incompatible pointer type [enabled by default]
error, forbidden warning: inode.c:71
scripts/Makefile.build:307: recipe for target 'fs/overlayfs/inode.o' failed
make[2]: *** [fs/overlayfs/inode.o] Error 1
scripts/Makefile.build:443: recipe for target 'fs/overlayfs' failed
make[1]: *** [fs/overlayfs] Error 2
Makefile:957: recipe for target 'fs' failed
make: *** [fs] Error 2
make: *** Waiting for unfinished jobs..

那么如何解决这个错误呢?

谢谢。

【问题讨论】:

  • 谷歌搜索发现错误消息this post,它描述了另一个linux组件的解决方案:用d_u.d_alias替换d_alias。它对你的情况也应该有帮助。
  • @Tsyvarev Yean 我也试过了,没用。就像我的 inode.c 文件 d_u 和 d_alias 没有定义一样,也许就是这样。
  • 那么,您要编译哪个分支?引用的默认值为 cm-12.0,它绝对不会遇到这个问题(struct dentryhas memberd_alias)。在分支 cm-13.0 给定结构 has member d_u.
  • 我只克隆了深度为 1 的 cm-13.0 分支。我正在尝试编译它。
  • @Tsyvarev 在make clean && make mrproper 之后等待构建它并再次进行配置似乎可以解决问题。我没有清理这可能导致非编译。谢谢你。您介意发布一个答案,以便我选择它作为正确答案吗?

标签: android linux-kernel android-kernel


【解决方案1】:

自 Linux 内核 3.19 版起,struct dentry 的成员 struct dentry 已移至成员的联合体 d_u,请参见 include/linux/dcache.h 中 struct dentry 的定义。

因此,将对d_alias 成员的引用替换为d_u.d_alias 应该有助于解决兼容性问题。

也可以在所有文件中全局执行替换,参见例如this post 关于修复 vmware-tools 中的给定错误。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 2014-12-26
    • 1970-01-01
    • 2013-12-06
    • 2013-06-17
    相关资源
    最近更新 更多