One of the features google added to linux kernel is a general purpose allocator /dev/ion. The new allocator allows us to allocate memory from different heaps and devices, virtual and physical
User space usage
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include "/home/developer/kernel3.4/goldfish/include/linux/ion.h"
void main()
{
int *p;
struct ion_fd_data fd_data;
struct ion_allocation_data ionAllocData;
ionAllocData.len=0x1000;
ionAllocData.align = 0;
ionAllocData.flags = ION_HEAP_TYPE_SYSTEM;
int fd=open("/dev/ion",O_RDWR);
ioctl(fd,ION_IOC_ALLOC, &ionAllocData);
fd_data.handle = ionAllocData.handle;
ioctl(fd,ION_IOC_SHARE,&fd_data);
p=mmap(0,0x1000,PROT_READ|PROT_WRITE,MAP_SHARED,fd_data.fd,0);
p[0]=99;
perror("test");
printf("hello all %d\n",p[0]);
}
Kernel usage
extern struct ion_device *idev;
void allocfromion()
{
int *buf;
struct ion_handle *data;
client = ion_client_create(idev, -1, "user");
data = ion_alloc(client,0x1000,0,ION_HEAP_SYSTEM_MASK);
buf = ion_map_kernel(client,data);
}
1 thought on “Android ION”
Comments are closed.
[…] abusando do sistema de gerenciamento de memória do Android – o alocador de memória Android ION. O ION foi introduzido com o Android 4.0 no final de 2011 e simplesmente fornece aos aplicativos a […]