¿Puedo hacer alguna parte de la RAM como ioMemory usando request_mem_region ()?

request_mem_region () se usa para la asignación de direcciones de memoria de E / S y le dice al kernel de Linux que su controlador utilizará el rango especificado de direcciones de E / S, lo que evita que otros controladores realicen una llamada superpuesta a request_mem_region () . Para registrar regiones de memoria de E / S, debe llamar a request_mem_region () de esta manera:

#include  #include  #include  #include  static int mj; // Major number static int res; // Result struct file_operations opsfile; // File operation structure unsigned long memstart = 0; // Starting address unsigned long memlen = 0; // Length of range MODULE_PARM (memstart, "l"); // Store starting address from command line argument MODULE_PARM (memlen, "l"); // Store length address from command line argument int suyash_init (void) { mj = register_chrdev (0, "dev_suyash", &opsfile); // Register a major number if (mj < 0) { printk ("Error allocating a major number \n"); return (mj); } res = check_mem_region (memstart, memlen); // Probe whether the address range is already in use or not if (res < 0) { printk ("Try some other range, allocation failed\n"); return (res); } request_mem_region (memstart, memlen, "dev_suyash"); // Register I/O memory region return 0; } void suyash_clean(void) { release_mem_region (memstart, memlen); // Deallocate the I/O memory regions unregister_chrdev (mj, "dev_suyash"); // Unregister major number } module_init (suyash_init); // Notify the kernel of the driver's entry point module_exit (suyash_clean); // Notify the kernel of the driver's exit point