I am trying to limit the OS (Ubuntu Server 15.04) to a specific memory usage and reserve the rest, but write a kernel module to read / write to the reserved memory. I figured out how to limit the use / reserve memory using the kernel parameters "mem = 4G memmap = 4G @ 0 memmap = 4G $ 4G" (4 GB for the OS and 4 GB are reserved, divided into 4 GB points), but I donβt know how DMA for reserved memory works with kernel modules. I was thinking of just creating a proc file, but I'm not sure if you can create it outside of a dedicated OS.
Any suggestions? Thank!
Edit: This is for research, so there is no need to be "enjoyable."
Update:
Perhaps I do not need to write a kernel module. I just found this and I'm going to take a picture:
http://elinux.org/Memory_Management#Reserving_.28and_accessing.29_the_top_of_memory_on_startup
Update:
I tried the link above, but I segfault whenever I try to write. Here is my code:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/mann.h>
#define RESERVED_MEMORY_SIZE 0x100000000
int main() {
int fd;
char *reserved_memory;
fd = open("/dev/mem", O_RDWR | O_SYNC);
reserved_memory = (char *) mmap(0, RESERVED_MEMORY_SIZE, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fd, 4096);
reserved_memory[0] = 'a';
return 0;
}
dmesg shows:
a.out[1167]: segfault at ffffffffffffffff ip 00000000004005d7 sp 00007ffeffccbd80 error 7 in a.out[400000+1000]
For hits I tried reserved_memory [1]:
a.out[1180]: segfault at 0 ip 00000000004005db sp 00007ffc388d77b0 error 6 in a.out[400000+1000]
I will review the format of these messages to understand what he is telling me.
Update:
I found this question someone with the same problem as me, but the only solution is to restore the kernel. I will try to avoid this, so perhaps my best option is a custom kernel module.
access to mmaped / dev / mem?