virt_to_page和page_address使用总结

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //cdev_init() cdev_add() cdev_del()
#include //dev_t
#include //有两个宏获取主设备号和次设备号

#include //container_of
MODULE_AUTHOR("Tan xujia");
MODULE_LICENSE("Dual BSD/GPL");

struct page *pa;
void *p;

int megasas_mgmt_majorno;
static
int __init hello_init (void)
{
	void *q;
	p = kmalloc(100, GFP_KERNEL);
	pa = virt_to_page(p);
	q = page_address(pa);

	printk("p = %p, pa = %p, q = %p\n", p, pa, q);
	return 0;
}

static
void __exit hello_exit (void)
{
	kfree(p);
}

virt_to_page

内核逻辑地址转struct page 结构体指针。

page_address

truct page 结构体指针转内核逻辑地址

上述例子当中p和q的值是一样的。

其余的还有类似于页帧号转struct page结构的函数。

你可能感兴趣的:(linux系统编程与内核编程,linux)