android底层驱动学习之内存初步
1. 首先先认识下几个分配内存的接口函数:
l rbuff = kmalloc(len + 4, GFP_KERNEL)
GFP_KERNEL是flag,可以通过该flag来设定分配内存的方式,目前这个GFP_KERNEL就是可以睡眠的,优先级普通;如果是GFP_ATOMIC则优先级高,是原子的,不能睡眠. 通过kfree(rbuff)来释放
l rbuff = vmalloc(len)
类似于kmalloc,只不过kmalloc分配的内存不管是虚拟地址还是物理地址都是连续的;而vmalloc分配的只是在虚拟地址是连续的,在物理地址上不一定是连续的,所以在需要一张表来建立虚拟地址和分散物理地址的关系,这样就会使效率降低很多,所以一般这个接口用于要分配大内存时。
l data = devm_kzalloc(&dev,sizeof(struct fts_ts_data),