创建符号链接构建 Android 图像
Create a symlink building an Android image
我正在编写新设备和产品的定义以构建自定义 Android 图像,我需要在构建图像时创建符号 link,但不清楚是什么在 Android mk 文件中执行此操作的正确方法。
举个例子,假设我需要创建一个名为 wget 的 link 指向可执行文件 busybox在 /system/bin 目录中。
像下面这样使用对 shell 命令的调用可能有效,但强烈建议不要这样做,因为它会在解析 mk 文件时执行多次(并且所以也适用于主机系统):
$(shell ln -frs $(TARGET_OUT_EXECUTABLES)/busybox $(TARGET_OUT_EXECUTABLES)/wget)
我尝试的另一种方法是像这样填充目录树:
$ tree device/my_vendor/my_device/links
links
└── system
└── bin
└── wget -> busybox
然后使用此代码:
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,device/my_vendor/my_device/links,$(TARGET_COPY_OUT_ROOT))
但是映像中根本没有创建任何文件,日志中也没有任何内容。
那么,添加 symlink、创建 Android 图像的正确方法是什么?
附加问题:如何创建将驻留在根目录中的 link?例如 /link 指向 /vendor/directory?
谢谢!
执行此操作的标准方法是在 'runtime' 引导期间通过 init.rc
个文件。
根据init/README.md,它的语法是:
symlink <target> <path>
Create a symbolic link at path with the value target
在 “构建时间” 中可能还有其他方法可以做到这一点,但我还没有遇到过,而且我看到 AOSP 的很多部分都使用init.rc
方式。
使用LOCAL_POST_INSTALL_CMD(适用于所有类型模块)或LOCAL_POST_LINK_CMD(仅适用于可执行文件)
我正在编写新设备和产品的定义以构建自定义 Android 图像,我需要在构建图像时创建符号 link,但不清楚是什么在 Android mk 文件中执行此操作的正确方法。
举个例子,假设我需要创建一个名为 wget 的 link 指向可执行文件 busybox在 /system/bin 目录中。
像下面这样使用对 shell 命令的调用可能有效,但强烈建议不要这样做,因为它会在解析 mk 文件时执行多次(并且所以也适用于主机系统):
$(shell ln -frs $(TARGET_OUT_EXECUTABLES)/busybox $(TARGET_OUT_EXECUTABLES)/wget)
我尝试的另一种方法是像这样填充目录树:
$ tree device/my_vendor/my_device/links
links
└── system
└── bin
└── wget -> busybox
然后使用此代码:
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,device/my_vendor/my_device/links,$(TARGET_COPY_OUT_ROOT))
但是映像中根本没有创建任何文件,日志中也没有任何内容。
那么,添加 symlink、创建 Android 图像的正确方法是什么?
附加问题:如何创建将驻留在根目录中的 link?例如 /link 指向 /vendor/directory?
谢谢!
执行此操作的标准方法是在 'runtime' 引导期间通过 init.rc
个文件。
根据init/README.md,它的语法是:
symlink <target> <path>
Create a symbolic link at path with the value target
在 “构建时间” 中可能还有其他方法可以做到这一点,但我还没有遇到过,而且我看到 AOSP 的很多部分都使用init.rc
方式。
使用LOCAL_POST_INSTALL_CMD(适用于所有类型模块)或LOCAL_POST_LINK_CMD(仅适用于可执行文件)