2

我想使用在内核模块中arch/XXX/asm/include(在我的情况下, )下声明/定义的东西(头文件、结构、函数或宏)。PAGE_TABLE

是否有可能知道该东西是否存在于所有架构中?

换个说法:内核暴露给内核空间的可移植 API 到底是什么asm/

我可以find .grep -r进入内核树,但是有没有更好的方法来知道对于每一个出现的新架构,必须为要支持的架构定义那个东西?毕竟,即使在所有现有架构上都提供了某些东西,谁保证它们都提供这些东西不仅仅是巧合,而且它们不是强制性的?

以标头为例,在最近的源快照中,x86包含acpi.harm不包含,但所有架构似乎都包含page.h. 那么我怎么知道我可以使用#include <asm/page.h>但不能acpi.h呢?page.h另一方面,预计将在所有拱门上实现,因为include/linux/它在多个点上使用它,并且include/linux可以移植到所有架构(请确认这一点)。

4

1 回答 1

0

可以自行检查:

算法:

  1. 所有可能的 ARCH 的初始化数组,例如i386
  2. /tmp/include/name_of_arch每个拱门的初始化目录
  3. 迭代每个 ARCH:make headers_install ARCH=name_of_arch INSTALL_HDR_PATH=/tmp/include/name_or_arch/
  4. 对于每个 arch 文件夹中的每个文件:计算sha256sum
  5. 找到所有公共签名的交集。sha256

您可以在checkstack.pl脚本中找到一些 ARCH ,例如m68k在内核的主 Makefile 中。

于 2013-07-16T11:41:01.483 回答