我嘗試在我的 Linux X86 計算機中使用 cacheflush 功能。但是,雖然手冊頁指出該函式可以在“.h”檔案 <sys/cachectl.h> <asm/cachectl.h> 或 <asm-generic/cachectl.h> 中找到,但我的 GCC 編譯器找不到這些檔案。
我能做什么?即,如何在我的程式中包含該函式,以便 GCC 識別它?
uj5u.com熱心網友回復:
我不確定,但閱讀man cacheflush,我認為你不能。
注意:在某些體系結構上,此系統呼叫沒有 glibc 包裝器;見注釋。
特定于體系結構的變體 Glibc 為該系統呼叫提供了一個包裝器,其原型顯示在 SYNOPSIS 中,適用于以下體系結構:ARC、CSKY、MIPS 和 NIOS2。
在其他一些架構上,Linux 提供了這個系統呼叫,帶有不同的引數:
M68K:
int cacheflush(unsigned long addr, int scope, int cache, unsigned long len);上海:
int cacheflush(unsigned long addr, unsigned long len, int op);NDS32:
int cacheflush(unsigned int start, unsigned int end, int cache);在上述架構上,glibc 沒有為這個系統呼叫提供包裝器;使用 syscall(2) 呼叫它。
如果我理解得很好,glic它只提供cacheflush了 4 種架構。
如果您真的想呼叫此函式,請gcc專門提供__builtin___clear_cache()(在手冊頁中查找),但同樣,這將無法移植到其他編譯器。
uj5u.com熱心網友回復:
您可以使用 grep 在頭檔案中簡單地搜索 cacheflush 函式:
grep -rin cacheflush /usr/include
根據您的編譯器,頭檔案可以位于 中/opt/path/to/your/compiler,檢查提供給聯結器的包含路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/359880.html
