安卓源码编译ko文件到设备img,并在开机阶段自动加载

这里介绍安卓源码如何编译ko文件到设备img,并在开机阶段自动加载。

1,复制ko文件并准备mk文件和.rc文件

我们要使用lunch sdk_car_md_x86_64-trunk_staging-userdebug编译出的模拟器设备来加载ko模块。

所以我们要在对应的device设备下进行配置:

1),cd android源码/device/generic/car/

2),创建helloworld文件夹和init.helloworld.rc文件,

并把ko文件复制到helloworld文件夹下。

文件树结构如下(sepolicy和helloworld.te不是必须):

bash 复制代码
device/generic/car$ tree helloworld/
helloworld/
├── helloworld.ko
├── init.helloworld.rc
└── sepolicy
└── helloworld.te

init.helloworld.rc内容如下:

bash 复制代码
on early-init
    exec u:r:vendor_modprobe:s0 -- /vendor/bin/modprobe -a -d \
        /vendor/lib/modules helloworld

2,修改device相关mk文件

修改device/generic/car/sdk_car_md_x86_64.mk,将rc文件打包到img中。

bash 复制代码
+PRODUCT_COPY_FILES += \
+    device/generic/car/helloworld/init.helloworld.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/init.helloworld.rc

修改device/generic/car/emulator_car64_x86_64/BoardConfig.mk文件,将ko文件打包到img中。

bash 复制代码
device/generic/car$ git diff emulator_car64_x86_64/BoardConfig.mk
diff --git a/emulator_car64_x86_64/BoardConfig.mk b/emulator_car64_x86_64/BoardConfig.mk
index 625fb0e..d225180 100644
--- a/emulator_car64_x86_64/BoardConfig.mk
+++ b/emulator_car64_x86_64/BoardConfig.mk
@@ -24,6 +24,14 @@ ifeq (true,$(ENABLE_CAR_USB_PASSTHROUGH))
 include device/generic/car/emulator/usbpt/BoardConfig.mk
 endif
 
+BOARD_VENDOR_KERNEL_MODULES += device/generic/car/helloworld/helloworld.ko
+
 # Override BOARD_SUPER_PARTITION_SIZE to increase the mounted system partition.
 BOARD_SUPER_PARTITION_SIZE := 5856296960

3,重新make编译安卓源码,并运行模拟器进行验证

通过adb shell lsmod确认helloworld模块已开机自动加载

通过adb shell file /dev/hello_char确认驱动文件节点存在

4, Tips

注意如果需要将ko文件编译进system分区,则需要进行部分修改,以及配置selinux。

汇总如下:

bash 复制代码
emulator_car64_x86_64/BoardConfig.mk修改:
+ BOARD_SYSTEM_KERNEL_MODULES += device/generic/car/helloworld/helloworld.ko
+ BOARD_SYSTEM_KERNEL_MODULES_LOAD += helloworld

rc文件内容:
+ on early-init
+    insmod /system/lib/modules/helloworld.ko

sdk_car_md_x86_64.mk修改:
+SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += \
+        device/generic/car/helloworld/sepolicy/
相关推荐
BoomHe4 小时前
Android Framework 文件应用移植到 AndroidStudio
android
传奇开心果编程5 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
>Andre<6 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
事圆则缓7 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx7 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
Godikov8 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面8 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
终端安全笔记10 小时前
描述文件、企业证书、MDM 不是三个名字,是三层
android·ios·智能手机
字节暗面10 小时前
一次游戏安全SO静态分析记录:腾讯ACE与FairGuard加固强度对比
android·逆向工程·游戏加固
传奇开心果编程11 小时前
【Jetpack Compose基础语法学与练】第9课 SideEffect副作用 + LaunchedEffect,处理异步任务和生命周期
android·学习·ui·kotlin·android jetpack