实现一个驱动,功能要求打印出申请内存的名称和内存阶数
时间: 2024-05-06 19:18:38 浏览: 16
实现一个驱动,可以通过访问 `/proc/meminfo` 文件来获取系统的内存信息,并将其打印出来。以下是一个简单的实现示例:
```c
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/mm.h>
#define PROC_NAME "mymeminfo"
static int mymeminfo_show(struct seq_file *m, void *v)
{
struct sysinfo si;
si_meminfo(&si);
seq_printf(m, "MemTotal: %lu kB\n", si.totalram >> 10);
seq_printf(m, "MemFree: %lu kB\n", si.freeram >> 10);
seq_printf(m, "MemAvailable: %lu kB\n", si.freeram >> 10);
seq_printf(m, "Buffers: %lu kB\n", si.bufferram >> 10);
seq_printf(m, "Cached: %lu kB\n", (si.cached + si.slab_reclaimable - si.slab_unreclaimable) >> 10);
return 0;
}
static int mymeminfo_open(struct inode *inode, struct file *file)
{
return single_open(file, mymeminfo_show, NULL);
}
static const struct file_operations mymeminfo_fops = {
.owner = THIS_MODULE,
.open = mymeminfo_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
static int __init mymeminfo_init(void)
{
proc_create(PROC_NAME, 0, NULL, &mymeminfo_fops);
return 0;
}
static void __exit mymeminfo_exit(void)
{
remove_proc_entry(PROC_NAME, NULL);
}
module_init(mymeminfo_init);
module_exit(mymeminfo_exit);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("My meminfo driver");
```
在上面的代码中,我们使用 `sysinfo` 结构体来获取内存信息,并在 `mymeminfo_show` 函数中将其格式化输出。然后我们定义 `mymeminfo_fops` 结构体来实现 `/proc/meminfo` 文件的文件操作,并在 `mymeminfo_init` 函数中创建 `/proc/meminfo` 文件。最后,在 `mymeminfo_exit` 函数中删除 `/proc/meminfo` 文件。