参考链接

http://blog.csdn.net/myarrow/article/details/7175204

 

Android硬件抽象层(HAL)概要介绍和学习计划

http://blog.csdn.net/luoshengyang/article/details/6567257

    一. 在Android内核源代码工程中编写硬件驱动程序

    二. 在Android系统中增加C可执行程序来访问硬件驱动程序

    三. 在Android硬件抽象层增加接口模块访问硬件驱动程序

    四. 在Android系统中编写JNI方法在应用程序框架层提供Java接口访问硬件

    五. 在Android系统的应用程序框架层增加硬件服务接口

    六. 在Android系统中编写APP通过应用程序框架层访问硬件服务

 

在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序

http://blog.csdn.net/luoshengyang/article/details/6573809

 

在Ubuntu上为Android系统编写Linux内核驱动程序

http://blog.csdn.net/luoshengyang/article/details/6568411

 

一、Linuxkernel添加HelloDrv

Ø  1.1 code

release-o1-one/kernel-4.4/drivers/hello/hello.c 

release-o1-one/kernel-4.4/drivers/hello/hello.h

 

Ø  1.2 build

1.2.1 release-o1-one/kernel-4.4/drivers/hello/Kconfig内容

config HELLO

   tristate "First Android Driver"

   default n

   help

     This is the first android driver.

1.2.2 release-o1-one/kernel-4.4/drivers/hello/Makefile内容

obj-$(CONFIG_HELLO) += hello.o

 

release-o1-one/kernel-4.4/drivers/Kconfig添加

menu "Device Drivers"

source"drivers/hello/Kconfig"

source "drivers/amba/Kconfig"

1.2.3 release-o1-one/kernel-4.4/drivers/Makefile添加

obj-$(CONFIG_HELLO) += hello/

1.2.4 release-o1-one/kernel-4.4/arch/arm64/configs/X605_H632_defconfig添加

CONFIG_HELLO=y

 

Ø  1.3 out

release-o1-one/out/target/product/X605_H632/obj/KERNEL_OBJ/drivers/hello/hello.o

 

Ø  1.4 notice

 

二、编写C语言应用程序测试HelloDrv

Ø  2.1 code

release-o1-one/external/hello/hello.c

Ø  2.2 build

release-o1-one/external/hello/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := hello

LOCAL_SRC_FILES := $(callall-subdir-c-files)

include $(BUILD_EXECUTABLE)

 

mmm external/hello/

make snod

Ø  2.3 out

./system/bin/hello

./obj/EXECUTABLES/hello_intermediates/LINKED/hello

./obj/EXECUTABLES/hello_intermediates/PACKED/hello

./obj/EXECUTABLES/hello_intermediates/hello

./symbols/system/bin/hello

 

Ø  2.3 notice

 

添加HelloHal代码访问HelloDrv

Ø  code

release-o1-one/hardware/libhardware/include/hardware/hello.h

release-o1-one/hardware/libhardware/modules/hello/hello.c

Ø  build

release-o1-one/hardware/libhardware/modules/hello/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_PRELINK_MODULE := false

# LOCAL_MODULE_RELATIVE_PATH :=$(TARGET_OUT_SHARED_LIBRARIES)/hw

# LOCAL_MODULE_RELATIVE_PATH :=/system/lib64/hw

LOCAL_MODULE_RELATIVE_PATH := /hw

LOCAL_SHARED_LIBRARIES := liblog

LOCAL_SRC_FILES := hello.c

LOCAL_MODULE := hello.mt6763

include $(BUILD_SHARED_LIBRARY)

 

mmm hardware/libhardware/modules/hello/

Ø  out

release-o1-one/out/target/product/X605_H632/obj/SHARED_LIBRARIES/hello.mt6763_intermediates/hello.o

release-o1-one/out/target/product/X605_H632/obj_arm/SHARED_LIBRARIES/hello.mt6763_intermediates/hello.o

release-o1-one/out/target/product/X605_H632/system/lib64/hw/hello.mt6763.so

release-o1-one/out/target/product/X605_H632/system/lib/hw/hello.mt6763.so

 

Ø  notice

输出目录

LOCAL_MODULE_RELATIVE_PATH指定以x605/system/lib64/为起点的输出目录

LOCAL_MODULE_RELATIVE_PATH := /hw

release-o1-one/out/target/product/X605_H632/system/lib64/hw

release-o1-one/out/target/product/X605_H632/system/lib/hw

整编

如果不先编译生成so文件,整编之后是不会打包到system.img的

权限

system/core/rootdir/ueventd.rc

/dev/hello 0666 root root

 

添加HelloJNIService接口访问HelloHal

Ø  code

release-o1-one/frameworks/base/services/core/jni/com_android_server_hello_HelloService.cpp

实现int register_android_server_HelloService(JNIEnv *env);接口

release-o1-one/frameworks/base/services/core/jni/onload.cpp

添加声明int register_android_server_HelloService(JNIEnv *env); //kaili add

添加函数调用register_android_server_HelloService(JNIEnv *env);

Ø  build

release-o1-one/frameworks/base/services/core/jni/Android.mk添加文件编译

LOCAL_SRC_FILES += \

    $(LOCAL_REL_DIR)/com_android_server_VibratorService.cpp \

    $(LOCAL_REL_DIR)/com_android_server_PersistentDataBlockService.cpp \

    $(LOCAL_REL_DIR)/com_android_server_GraphicsStatsService.cpp \

     $(LOCAL_REL_DIR)/com_android_server_hello_HelloService.cpp\

    $(LOCAL_REL_DIR)/onload.cpp

make -j24 2>&1 | tee all.c

Ø  out

release-o1-one/out/target/product/X605_H632/obj_arm/SHARED_LIBRARIES/libandroid_servers_intermediates/core/jni/

com_android_server_hello_HelloService.o

release-o1-one/out/target/product/X605_H632/obj/SHARED_LIBRARIES/libandroid_servers_intermediates/core/jni/

com_android_server_hello_HelloService.o

Ø  notice

mmm编译失败可以整编

 

添加HelloService访问HelloJNIService

Ø  code

release-o1-one/frameworks/base/core/java/android/hardware/hello/IHelloService.aidl

release-o1-one/frameworks/base/services/core/java/com/android/server/hello/HelloService.java

release-o1-one/frameworks/base/services/java/com/android/server/SystemServer.java

Ø  build

编译服务接口

release-o1-one/frameworks/base/Android.mk

LOCAL_SRC_FILES += \

       core/java/android/hardware/radio/ITunerCallback.aidl \

       core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl\

       core/java/android/hardware/usb/IUsbManager.aidl \

        core/java/android/hardware/hello/IHelloService.aidl\

       core/java/android/net/ICaptivePortal.aidl \

       core/java/android/net/IConnectivityManager.aidl \

       core/java/android/net/IIpConnectivityMetrics.aidl \

编译服务

release-o1-one/frameworks/base/services/core/Android.mk

LOCAL_SRC_FILES += \

    $(call all-java-files-under,java) \

   java/com/android/server/EventLogTags.logtags \

   java/com/android/server/am/EventLogTags.logtags \

   ../../../../system/netd/server/binder/android/net/INetd.aidl \

   ../../../../system/netd/server/binder/android/net/metrics/INetdEventListener.aidl\

   ../../../native/cmds/installd/binder/android/os/IInstalld.aidl \

mmm frameworks/base/services/core/

make snod

Ø  out

 

Ø  notice

mmm frameworks/base/services/core/jni报错用mmm frameworks/base/services/core/

 

 

添加TranHelloApp访问HelloService

Ø  code

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello建立app工程

有效工程结构

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello/app/src/main/java/tranhello/com/src/tranhello/MainActivity.java

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello/app/src/main/res/layout/activity_main.xml

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello/app/src/main/res/values/strings.xml

Ø  build

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello/app/src/main/Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

 

LOCAL_MODULE_TAGS := optional

 

LOCAL_SRC_FILES := $(callall-java-files-under, ./)

 

LOCAL_PACKAGE_NAME := TranHello

LOCAL_MODULE_OWNER := tran

 

include $(BUILD_PACKAGE)

 

# Use the folloing include to make our testapk.

include $(call all-makefiles-under,$(LOCAL_PATH))

release-o1-one/vendor/mediatek/proprietary/packages/apps/TranHello/app/src/main/AndroidManifest.xml

<?xml version="1.0"encoding="utf-8"?>

   package="tranhello.com.src.tranhello" >

 

   

       android:allowBackup="true"

       android:icon="@mipmap/ic_launcher"

       android:label="@string/app_name"

       android:theme="@style/AppTheme" >

       

           android:name=".MainActivity"

           android:label="@string/app_name" >

           

               

 

               

           

        

   

 

 

release-o1-one/build/make/target/product/core.mk

PRODUCT_PACKAGES += \

    DocumentsUI \

    DownloadProviderUi \

    Email \

     TranHello \

    ExactCalculator \

    ExternalStorageProvider \

    FusedLocation \

 

Ø  out

release-o1-one/out/target/product/X605_H632/下

./system_other/app/TranHello

./system_other/app/TranHello/oat/arm64/TranHello.odex

./system_other/app/TranHello/oat/arm64/TranHello.vdex

./system/app/TranHello

./system/app/TranHello/TranHello.apk

./obj/APPS/TranHello_intermediates

Ø  notice

Android.mk和AndroidManifest.xml必须在同一级目录下,否则无法编译

必须修改release-o1-one/build/make/target/product/core.mk,否则编译无法打包

TranHello.Apk

 

添加权限&&添加property

release-o1-one/device/mediatek/ sepolicy/custom/module/hello

Ø  file_contexts

/dev/hello(/.*)?  u:object_r:hello_device:s0

Ø  device.te

type hello_device, dev_type;

Ø  domain.te

allow domain hello_device:chr_filerw_file_perms;

Ø  hello.te  

allow hello_servicehello_service:service_manager add;

Ø  service.te 

type hello_service, system_api_service,system_server_service, service_manager_type;

Ø  service_contexts

hello           u:object_r:hello_service:s0

Ø  system_server.te 

allow system_serverdefault_android_service:service_manager add;

allow system_serverhello_service:service_manager add;

allow system_server hello_device:chr_file {read write open };

Ø  untrusted_app.te

allow untrusted_appdefault_android_service:service_manager find;

allow untrusted_apphello_service:service_manager find;

allow system_serverhello_service:service_manager add;

 

release-o1-one/system/core/rootdir/ueventd.rc添加

/dev/hello               0666   root      root

 

release-o1-one/system/sepolicypublic/domain.te去掉

# from service name to service_type aredefined in {,hw,vnd}service_contexts.

-neverallow * default_android_service:service_manager add;

+# neverallow *default_android_service:service_manager add;

 neverallow *default_android_vndservice:service_manager { add find };

 

 

更多相关文章

  1. Android(安卓)编译 product 分区
  2. android 反编译:解决xml二进制文件
  3. android监听事件添加动作的三种方式
  4. Android(安卓)运行时权限库
  5. Android(安卓)Build 系统
  6. Android实现简易记事本
  7. Android(安卓)Button 上添加图片
  8. Android9.0 添加APP后台防杀机制
  9. android 应用如何获取系统权限 以及root系统方法

随机推荐

  1. Android中在service中启动activity
  2. 【Android设备管理】 利用DevicePolicyMa
  3. android 中打 Log 的一些技巧
  4. Android Menu(Context Menu,Options Menu
  5. Android(安卓)如何全局获取Context
  6. Android(安卓)HAL的STUB的具体处理
  7. Android GL_OUT_OF_MEMORY
  8. 2013.12.04 (6)——— android SlidingMenu
  9. Android使用URLConnection显示网络图片
  10. 【PPT】The new (or the first?) build s