android 7.1 修改源码添加可执行文件到system/bin目录

说明

硬件:ROC-RK3399-PC-Pro
固件:ROC-RK3399-PC-Pro_Industry7.1.2_HDMI
目录: firefly-rk3399-Industry 为工程根目录,所有编译、烧录命令均在改目录下执行
官方教程:https://wiki.t-firefly.com/zh_CN/ROC-RK3399-PC-Pro/
个人专栏:firefly ROC-RK3399-PC-Pro开发板专栏

1. 源代码修改

1.1 在源代码 external 文件夹下新建 ademo 文件夹

1.2 添加 ademo.c 文件

#include <stdio.h>  // fopen(),fclose(), fprintf(), printf()
#include <errno.h> // errno
#include <string.h> // strerror()

int main()
{
    FILE *log_fp = NULL;
    log_fp = fopen("/cache/recovery/ademo_log.txt", "w+");
    if (log_fp != NULL)
    {
        fprintf(log_fp, "open /cache/recovery/ademo_log.txt success\n");
        fprintf(log_fp, "----------------log by ademo\n");
        fclose(log_fp);
    }
    else
    {
        int errNum = errno; 
        printf("open /cache/recovery/ademo_log.txt failed, errno:%d, error:%s\n", errNum, strerror(errNum));
    }
    return 0;
}

1.3 添加 Android.mk 文件

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
        ademo.c

LOCAL_MODULE:= ademo
# LOCAL_32_BIT_ONLY := true

include $(BUILD_EXECUTABLE)

1.4 添加 PRODUCT_PACKAGES

修改整体编译脚本:firefly-rk3399-Industry/device/rockchip/rk3399/rk3399_roc_pc_plus.mk
在 PRODUCT_PACKAGES 选项中添加 ademo

PRODUCT_PACKAGES += \
    SoundRecorder \
    ahello \
    ademo
# 不添加 PRODUCT_PACKAGES 选项不会打包编译进/system/bin

如果要将一个其他文件打包到系统镜像中,则应该修改 PRODUCT_COPY_FILES 选项,如下倒数第二行添加了一个a.txt文件到system/bin目录下

PRODUCT_COPY_FILES += \
   device/rockchip/rk3399/rk3399_roc_pc/ddr_config.xml:system/etc/ddr_config.xml \
   device/rockchip/rk3399/rk3399_roc_pc/video_status:system/etc/video_status \
   device/rockchip/rk3399/rk3399_roc_pc/factoryboot.txt:system/etc/factoryboot.txt \
   device/rockchip/rk3399/rk3399_roc_pc_plus/factoryboot.sh:system/bin/factoryboot.sh \
   device/rockchip/rk3399/rk3399_roc_pc/myifconfigtest:system/bin/myifconfigtest \
   device/rockchip/rk3399/rk3399_roc_pc/a.txt:system/bin/a.txt \
   device/rockchip/common/resolution_white.xml:/system/usr/share/resolution_white.xml 

2. 编译运行

2.1 编译

此过程分三步,具体参考firefly ROC-RK3399-PC-Pro android7.1 编译打包详解

  • 整体编译:./FFTools/make.sh -d rk3399-roc-pc-plus -j8 -l rk3399_roc_pc_plus-userdebug
  • 打包固件:./FFTools/mkupdate/mkupdate.sh -l rk3399_roc_pc_plus-userdebug
  • 升级固件:sudo upgrade_tool uf the_path_of_image_file

2.2 运行效果

烧录成功后 adb shell 查看/system/bin目录下文件,可以看见 ademo 已经成功编译进系统了。
在这里插入图片描述

  • ① ./demo执行提示打开日志文件失败,权限不够
  • ② su 获得 shell 下 root权限
  • ③ 查看日志文件,写入成功
  • 这里要注意,shell 下 root并不具有所有目录的写入权限,如果想获取所有目录下的读写权限,参考文章 firefly ROC-RK3399-PC-Pro开发板如何获取root权限及remount
    在这里插入图片描述

3. 设置开机自启服务

如想将可执行文件设置成开机自启服务,可参考firefly ROC-RK3399-PC-Pro android7.1 修改init.rc 添加开机自启服务

Android 7.1源码中,您可以通过修改 fstab 文件或 init.rc 文件添加一个可被电脑识别的分区。具体来说,您可以按照以下步骤进行操作: 1. 确定您要挂载的分区的设备节点名称,例如 `/dev/sdb1`。 2. 打开设备的 fstab 文件,例如 `/vendor/etc/fstab.rk3288`,在其中添加一行类似于以下内容的条目: `/dev/block/sdb1 /mnt/usb_storage vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=936,iocharset=utf8,shortname=mixed,utf8,errors=remount-ro 0 0` 这个条目的意思是将 `/dev/block/sdb1` 这个设备节点挂载到 `/mnt/usb_storage` 这个挂载点,使用 vfat 文件系统,具有一系列选项,例如读写权限、字符集等。 3. 如果您想要在设备启动时自动挂载该分区,可以修改设备的 init.rc 文件。具体来说,您可以在文件添加以下内容: ``` mount /dev/block/sdb1 /mnt/usb_storage vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=936,iocharset=utf8,shortname=mixed,utf8,errors=remount-ro ``` 这个命令的意思是在设备启动时将 `/dev/block/sdb1` 挂载到 `/mnt/usb_storage`,使用 vfat 文件系统,具有一系列选项。 请注意,上述操作可能需要 root 权限才能执行,同时修改系统文件可能会导致系统不稳定或无法正常启动,请谨慎操作,并备份好您的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值