【问题标题】:how to use a function in kernel source?如何在内核源代码中使用函数?
【发布时间】:2015-05-03 04:57:17
【问题描述】:

我需要使用arch/x86/mm/pageattr.c中实现的函数void clflush_cache_range(void *vaddr, unsigned int size),但是遇到了两个问题。

  1. 如何正确识别对应的header?我天真地搜索了这个符号,似乎arch/x86/include/asm/cacheflush.h就是那个。

  2. 如何包含标题arch/x86/include/asm/cacheflush.h(如果包含正确的标题)?我尝试include <asm/cacheflush.h>,但没有成功。

致命错误:asm/cacheflush.h:没有这样的文件或目录

【问题讨论】:

  • 您是在开发内核模块还是用户空间应用程序?
  • 因为用户空间程序不能调用随机内核函数。内核和用户空间之间的接口体现在定义的系统调用中(在手册的第 2 节等地方都有说明),clflush_cache_range() 不是其中之一。
  • @EugeneSh。哪个更容易做。我只是想对缓存刷新做一个基准测试。
  • @bl4ck5un 你必须编写内核代码才能使用这些功能。它们对用户空间代码不可用。
  • @bl4ck5un 所以如下,这里需要一个内核模块。

标签: c linux-kernel include kernel


【解决方案1】:

虽然它不是很简单的方法,但如果其他文件正在使用该功能,我会查看它们并尝试执行相同操作。例如看看drivers/iommu/intel-iommu.c他们如何使用clflush_cache_range()

如何编写内核代码参考http://www.thegeekstuff.com/2013/07/write-linux-kernel-module/

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多