Baremetal 不讨论多级cache的情况下,裸驱两种关于dcache的操作: flush_dcache_all(); // 将cache里面的东西刷入内存 invalidate_dcache_all(); // 将数据缓存中的所有内容无效化(invalidate)。该指令一般用于确保缓存中的数据与主内存中的数据同步 flush_dcache_all()函数通常在嵌入式系统或需要对数据缓存进行手动管理的系统中使用。以下是一些常见的情况和原因:
- 操作系统启动和关闭时:
- DMA 操作:
- 内存映射设备:
- 共享内存:
- kmem_cache_create()
- 功能:创建一个新的内核缓存(kmem_cache)。
- 参数:包括缓存对象的大小、对齐方式、构造函数等。
- 返回值:成功创建缓存时返回指向 kmem_cache 结构的指针,失败时返回 NULL。
- 示例:my_cache = kmem_cache_create("my_cache", sizeof(struct my_struct), 0, SLAB_HWCACHE_ALIGN, NULL);
- kmem_cache_alloc()
- 功能:从指定的内核缓存中分配一个对象。
- 参数:要分配的缓存指针。
- 返回值:成功时返回分配的对象的指针,失败时返回 NULL。
- 示例:ptr = kmem_cache_alloc(my_cache, GFP_KERNEL);
- kmem_cache_free()
- 功能:将一个对象释放回其所属的内核缓存中。
- 参数:要释放的对象指针。
- 返回值:无。
- 示例:kmem_cache_free(my_cache, ptr);
- kmem_cache_destroy()
- 功能:销毁一个内核缓存,释放其占用的资源。
- 参数:要销毁的缓存指针。
- 返回值:无。
- 示例:kmem_cache_destroy(my_cache);
- flush_dcache_page()
- 功能:刷新指定页面的数据缓存,确保数据被写入内存。
- 参数:要刷新的页面指针。
- 返回值:无。
- 示例:flush_dcache_page(virt_to_page(ptr));
- flush_icache_page()
- 功能:刷新指定页面的指令缓存,确保指令的正确性。
- 参数:要刷新的页面指针。
- 返回值:无。
- 示例:flush_icache_page(virt_to_page(ptr));