Pages
연속된 메모리를 할당을 테스트 했다. dmes로 보면 어느 정도 출력하다 끊어 버린다. 마지막 데이터를 확인 했다.
#include<linux/kernel.h>
#include<linux/init.h>
#include<linux/module.h>
#include <linux/slab.h>
#include <linux/mempool.h>
#define PAGES_ORDER 2
char* data;
static int __init hello_world_init(void) /* Constructor */
{
printk(KERN_INFO "hello, pages\n");
/* memory 할당*/
data = (char*)__get_free_pages(GFP_KERNEL, PAGES_ORDER);
if (!data){
printk("no pages allocated\n");
return ENOMEM;
}
/* 0으로 초기화*/
memset(data, 'c', PAGE_SIZE << PAGES_ORDER);
printk(KERN_INFO "data: pos:%p, size: %0xd, %d\n", data, (int)(PAGE_SIZE << PAGES_ORDER), data[(PAGE_SIZE << PAGES_ORDER)-1]);
return 0;
}
void __exit hello_world_exit(void)
{
printk(KERN_INFO "good bye, pages\n");
free_pages((unsigned long)data, PAGES_ORDER);
}
module_init(hello_world_init);
module_exit(hello_world_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("now0930");
MODULE_DESCRIPTION("pages test");
pi@raspberrypi:~/rasp/advancedMemory/pages $ dmesg | tail -10 [ 1104.594762] hello, pages [ 1104.594802] data: pos:c32289cc, size: 4000d, 99 [ 1122.403587] good bye, pages