linux 内核cache

时间:2022-06-05 01:16:39

写驱动总会碰到和cache相关的东西

记录下用到的接口:

驱动中用的内存地址一般为内核地址,用户调用驱动接口时,有时候会把自己申请的地址赋给驱动,此时用户kmalloc得到内核地址,

再用mmap获得映射出来的用户地址,此时用户使用用户地址的时候,会用到cache,为了确保数据的实时性,有时候驱动中应该对cache进行一些操作

1. __sync_cache_range_r((void*)start, size);  

用户读取buffer数据时,会从cache中读取,而这个接口会使内核地址对应的cache失效,使用后,用户讲直接从实际物理地址读取数据,

从而保证了数据的正确性

2. __sync_cache_range_w((void*)start, size);

用户写数据时,会先写到cache中,驱动为了保证数据及时写到实际物理地址,用这个接口,cache失效数据写到物理地址