ion android 内核,关于Android中ION的libion
在高通的OpenCL SDK中,其Android.mk文件中,有判断当前kernel的版本,如果大于4.12,那么就使用libion.so,否则则使用ion kernle uapi:
# Tries to determine whether to use libion or ion kernel uapi
KERNEL_VERSION = $(shell ls kernel | sed -n 's/msm-([0-9]+).([0-9]+)/-v x0=1 -v x1=2/p')
USE_LIBION = $(shell awk $(KERNEL_VERSION) -v y0="4" -v y1="12" 'BEGIN {printf (x0>=y0 && x1>=y1?"true":"false") "n"}')
ifeq ($(USE_LIBION), true)
$(info OpenCL SDK: Using libion)
OPENCL_SDK_CPPFLAGS := -Wno-missing-braces -DUSES_LIBION
OPENCL_SDK_SHARED_LIBS := libion libOpenCL
OPENCL_SDK_COMMON_INCLUDES :=
$(LOCAL_PATH)/src
kernel/msm-4.14/
$(TARGET_OUT_INTERMEDIATES)/include/adreno
else
$(info OpenCL SDK: Using ion uapi)
OPENCL_SDK_CPPFLAGS := -Wno-missing-braces
OPENCL_SDK_SHARED_LIBS := libOpenCL
OPENCL_SDK_COMMON_INCLUDES :=
$(LOCAL_PATH)/src
$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
$(TARGET_OUT_INTERMEDIATES)/include/adreno
endif
根据这个答案链接,编译libion的mk文件如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ion.c
LOCAL_MODULE := libion
LOCAL_MODULE_TAGS := optional
LOCAL_SHARED_LIBRARIES := liblog
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ion.c ion_test.c
LOCAL_MODULE := iontest
LOCAL_MODULE_TAGS := optional tests
LOCAL_SHARED_LIBRARIES := liblog
include $(BUILD_EXECUTABLE)
这个mk文件使用,ion.c编译出来libion shared library ,以及使用,ion.c和ion_test.c编一个出来一个executable。ion_test.c里面有一个main()函数,主要是用来test alloc,map和share功能,也可以说是提供了使用Demo;而ion.c则是libion的实现,其实也是对ion toctl的几个功能的封装而已。其实我们如果把这个ion.c和ion.h文件拿出来,那么我们也能编译出libion库了。头文件ion.h如下:
#ifndef __SYS_CORE_ION_H
#define __SYS_CORE_ION_H
#include
__BEGIN_DECLS
int ion_open();
int ion_close(int fd);
int ion_alloc(int fd, size_t len, size_t align, unsigned int heap_mask,
unsigned int flags, struct ion_handle **handle);
int ion_alloc_fd(int fd, size_t len, size_t align, unsigned int heap_mask,
unsigned int flags, int *handle_fd);
int ion_sync_fd(int fd, int handle_fd);
int ion_free(int fd, struct ion_handle *handle);
int ion_map(int fd, struct ion_handle *handle, size_t length, int prot,
int flags, off_t offset, unsigned char **ptr, int *map_fd);
int ion_share(int fd, struct ion_handle *handle, int *share_fd);
int ion_import(int fd, int share_fd, struct ion_handle **handle);
__END_DECLS
#endif /* __SYS_CORE_ION_H */
内容来源于网络如有侵权请私信删除
ion android 内核,关于Android中ION的libion相关推荐
- 在Android内核源代码工程中编写硬件驱动程序(1)
在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软 ...
- Android内核开发:在源码树中添加新的app应用
本文是<Android内核开发>系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用. ...
- 第二章 Android内核和驱动程序(转)
这一章我们来介绍Android系统的核心部分-Android内核.我们说Android系统是基于Linux系统的,最根本的原因就在于Android采用了Linux内核. 2.1 Android内核特性 ...
- 索骥馆-编程语言之《Android内核剖析》扫描版[PDF]
内容介绍: <android内核剖析>详细分析了android内核的内部机制,包括窗口管理系统.activity管理系统.输入法框架.编译系统等,为android内核定制及高级应用程序开发 ...
- android系统源码中添加app源码(源码部署移植)
涉及到系统定制,需要在系统中加入自己的apk工程,但是上网找了很多资料都是不够全面的,或者看了还是没搞懂,我自己也是一点点摸索过来的,花了不少的时间,也是踩了不少的坑,因此特开一文,帮助大家渡河. 申 ...
- ion android 内核,Android Ion用户空间和内核空间
为什么需要ION 回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中.但是PMEM(android实现的 一个内存分配器 ...
- android pmem内存,android内存管理-ION/PMEM【转】
ION debug ION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口. 每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kerne ...
- android之ion内存储器管理器,Android ION
场景:android之ION内存储器管理器(1)- 简介 android之ION内存管理器(1)-- 简介 by JHJ(jianghuijun211@gmail.com) 为什么需要ION 回顾20 ...
- android内存地址分配,Android ION内存分配
ION设计的目标 为了避免内存碎片化,或者者为少量有着特殊内存需求的硬件,比方GPUs.display controller以及camera等,在系统启动的时候,会为他们预留少量memory pool ...
最新文章
- 【Python之路Day17】Python Web框架之 Django
- 计算机考试word教程,职称计算机考试Word教程:段落格式的编辑
- html jQuery/bootstrap通过网络bootcdn导入连接
- 【C语言简单说】十七:数组(补)
- 5码默认版块_5个小众的生活学习类的宝藏App
- 安装 Alibaba Cloud Toolkit
- Asp.net基础概念之 委托
- java随机生成数字代码,详解系列文章
- python怎样压缩和解压缩ZIP文件
- Eclipse的两个hibernate plugin
- 服务器2003系统无故重启,WINDOWS 2003 服务器自动定时重启的方法
- MATLAB-输入输出语句
- 科立捷默认频率_科立捷电子产品技术参数.doc
- 软考系统集成项目管理工程师全真模拟题(含答案、解析)
- Ubuntu终端中字体颜色含义
- 米兰•昆德拉 漂浮的一生
- 计算机专业教室三行诗,当学霸写起三行情书,看完第一个就懵了……
- [uoj30][CF Round #278]Tourists——树链剖分+圆方树
- 微软Azure 虚拟机支持多种 Linux 发行版!
- Redis基本数据类型、持久化机制、集群模式、淘汰策略、缓存穿透、击穿、雪崩、常见面试题大集合!