在高通的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相关推荐

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

    在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软 ...

  2. Android内核开发:在源码树中添加新的app应用

    本文是<Android内核开发>系列的第十二篇文章,上一篇文章介绍了如何从源码中删除出厂的app应用,本文则在此基础上,详细介绍一下如何在Android内核源码树中添加一个新的app应用. ...

  3. 第二章 Android内核和驱动程序(转)

    这一章我们来介绍Android系统的核心部分-Android内核.我们说Android系统是基于Linux系统的,最根本的原因就在于Android采用了Linux内核. 2.1 Android内核特性 ...

  4. 索骥馆-编程语言之《Android内核剖析》扫描版[PDF]

    内容介绍: <android内核剖析>详细分析了android内核的内部机制,包括窗口管理系统.activity管理系统.输入法框架.编译系统等,为android内核定制及高级应用程序开发 ...

  5. android系统源码中添加app源码(源码部署移植)

    涉及到系统定制,需要在系统中加入自己的apk工程,但是上网找了很多资料都是不够全面的,或者看了还是没搞懂,我自己也是一点点摸索过来的,花了不少的时间,也是踩了不少的坑,因此特开一文,帮助大家渡河. 申 ...

  6. ion android 内核,Android Ion用户空间和内核空间

    为什么需要ION 回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中.但是PMEM(android实现的 一个内存分配器 ...

  7. android pmem内存,android内存管理-ION/PMEM【转】

    ION debug ION 在/sys/kernel/debug/ion/ 提供一个debugfs 接口. 每个heap都有自己的debugfs目录,client内存使用状况显示在/sys/kerne ...

  8. android之ion内存储器管理器,Android ION

    场景:android之ION内存储器管理器(1)- 简介 android之ION内存管理器(1)-- 简介 by JHJ(jianghuijun211@gmail.com) 为什么需要ION 回顾20 ...

  9. android内存地址分配,Android ION内存分配

    ION设计的目标 为了避免内存碎片化,或者者为少量有着特殊内存需求的硬件,比方GPUs.display controller以及camera等,在系统启动的时候,会为他们预留少量memory pool ...

最新文章

  1. 【Python之路Day17】Python Web框架之 Django
  2. 计算机考试word教程,职称计算机考试Word教程:段落格式的编辑
  3. html jQuery/bootstrap通过网络bootcdn导入连接
  4. 【C语言简单说】十七:数组(补)
  5. 5码默认版块_5个小众的生活学习类的宝藏App
  6. 安装 Alibaba Cloud Toolkit
  7. Asp.net基础概念之 委托
  8. java随机生成数字代码,详解系列文章
  9. python怎样压缩和解压缩ZIP文件
  10. Eclipse的两个hibernate plugin
  11. 服务器2003系统无故重启,WINDOWS 2003 服务器自动定时重启的方法
  12. MATLAB-输入输出语句
  13. 科立捷默认频率_科立捷电子产品技术参数.doc
  14. 软考系统集成项目管理工程师全真模拟题(含答案、解析)
  15. Ubuntu终端中字体颜色含义
  16. 米兰•昆德拉 漂浮的一生
  17. 计算机专业教室三行诗,当学霸写起三行情书,看完第一个就懵了……
  18. [uoj30][CF Round #278]Tourists——树链剖分+圆方树
  19. 微软Azure 虚拟机支持多种 Linux 发行版!
  20. Redis基本数据类型、持久化机制、集群模式、淘汰策略、缓存穿透、击穿、雪崩、常见面试题大集合!

热门文章

  1. 如何区分漫威军团与灭霸军团--支持向量机(小白篇)
  2. 目标检测YOLO实战应用案例100讲-基于小样本的目标检测与跟踪模型研究
  3. vue自定义表单生成
  4. Ios精品源码,tableview下载视频直播源播放器图片位置3D立体旋转相册屏风动画
  5. 文件复制传输及其打包压缩
  6. ads 微带线 计算公式
  7. android mvp模式弊端,《android-MVP模式的困惑》
  8. JIT VS AOT
  9. H5+ app自动更新思路
  10. html 城市选择,城市选择