我正在修改Linux内核中Sysfs的内存目录。经过我的教授的许可,我正在寻求这里的人的帮助。这就是我想要做的事情。
背景:如果我有4 GB RAM,我的主板上可以有4 X 1 GB DIMM或2X 2GB DIMM。 Linux中支持NUMA,将4GB物理内存划分为多个块,每个块具有特定的起始和结束物理地址。 Sysfs中的“devices”目录包含全局设备层次结构。它包含由内核注册的总线类型发现的每个物理设备。因此,有关内存块的详细信息存储在Linux Kernel的路径'/ sys / devices / system / memory /'中。在这个目录中,我们有一个名为'block_size_bytes'的文件,它决定了我的RAM可以分成多少部分。例如,在我的系统中,它是8000000,因此RAM被分成32个内存文件夹,从memory0到memory43。每个'memoryX'目录都有一个名为'state'的文件,它代表内存块的在线/离线状态。如果我想“关闭”特定的内存块,我可以在线/离线之间切换。
所以这就是我想要做的事情:
我想将整个目录结构修改为4个目录。为什么4?因为,我的主板上有4 X 1GB DIMM,所以我想将这32个内存块减少到4个大块,以便我可以通过在线/离线切换它的'状态'来控制我想要的任何DIMM。所以基本上我想改变DIMM级别的内存状态。
这几乎是我的问题描述。
我的方法:我已经阅读了sysfs文件系统,并试图查找负责组织sysfs的“memory”目录的内核模块。我想找到模块并根据我的要求编辑它并编译该模块。找到有关此主题的具体文档越来越难以引导我提出这个问题。我只能找到这个C编程文件'/lib/modules/3.8.0-19-generic/source/drivers/base/memory.c',其中包含设置内存块“状态”的方法,显示每个内存部分的起始和结束物理地址以及许多其他方法。但我无法弄清楚这些方法究竟在哪里被调用,或者哪个模块正在利用这个C文件来设置所有属性。
您能告诉我哪个模块需要查找吗?如果你发现我的方法有误,请你指点我正确的方向?
提前致谢:)
答案 0 :(得分:0)