Autor
|
Tema: Modulo en Linux (Leído 5,000 veces)
|
ddmmvv12
Desconectado
Mensajes: 6
|
Hola necesito hacer 2 modulos en linux que hagan lo siguiente
El objetivo de la práctica consiste en la implementación de dos módulos cargables en el núcleo de Linux. Dichos módulos A y B deberán realizar las siguientes acciones: 1. Ambos módulos han de mostrar en el momento de inserción y de extracción un mensaje informativo mediante la función del núcleo printk () con los siguientes datos: • El instante de inserción y de extracción (Dato que se puede obtener de 3 formas distintas: • Para ello se puede consultar la variable xtime(kernel/sched.c:52 volatile struct timeval xtime. struct timeval esta definido en include/linux/time.h:12. • Utilizar la macro CURRENT_TIME • Invocar la función void do_gettimeofday(struct timeval *tv) que ofrece precisión en micro segundos. • El pid del proceso invocante de la orden correspondiente (insmod o rmmod). Para ello habrá que acceder a la estructura que mantiene la información sobre el proceso padre del proceso actual. El proceso actual será el propio insmod o rmmod. Al proceso actual se puede acceder con la macro current definida en include/linux/sched.h:323 que es un puntero a la estructura del proceso (struct task_struct *). En dicha estructura son de interés, para este caso, las entradas siguientes: int pid; /* pid del proceso */ struct task_struct * p_pptr; /* puntero al proceso padre */ El tipo struct task_struct está definido en include/linux/sched.h:174 2. Además de imprimir la información anterior, el modulo A deberá implementar una función pública del tipo yo-he-estadoaquí, que muestre, al igual que en caso anterior, en qué instante ha sido invocada, y qué proceso (pid). A su vez, deberá registrar en una variable interna, cual ha sido la última visita recibida, y mostrar su información cuando el modulo A sea extraído del núcleo cleanup_module. 3. El módulo B deberá visitar al modulo A, invocando a la función yo-he-estado-aquí, tanto al ser insertado en el núcleo, como al ser extraído del mismo.
Pueden ayudarme, darme ideas , consejos, documentación
Gracias !!!
|
|
|
En línea
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
Hola
Aquí nadie te va a hacer la tarea, postea el code que llevas hecho hasta ahora y te podrán ayudar, yo no te puedo orientar porque no tengo idea del kernel de linux, lo siento. Pon lo que tengas hasta ahora. Puedes buscar en google las funciones que debes utilizar para orientarte y tener una idea de lo que tienes que hacer.
Saludos
|
|
|
En línea
|
Breakbeat como forma de vida
|
|
|
Leber
Desconectado
Mensajes: 338
"Fracta, non verba"
|
ddmmvv12, pon lo que tengas hecho, y se te ayudará.
De todos modos, eso es parte de un libro? Es que me interesa ese tipo de temario.
|
|
|
En línea
|
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
|
|
|
ddmmvv12
Desconectado
Mensajes: 6
|
Hola. la idea no es que me hagan la tarea, lo que pasa es que nunca he hecho un programa en C para Linux y menos para el Kernel. Lo que necesito es que me orienten o me brinden funciones que me puedan servir o una buena documentación
para satu, es una practica de la universidad
Gracias
|
|
|
En línea
|
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
Por un lado, lo que dicen es correcto, esto no es para que te hagan la tarea, pero por otro, lo que solicitas es documentación, así que te facilito algo, y nos posteas el código y lo que has resuelto, de manera que lo que te ayudamos se vuelva una ayuda para todos cuando pongas lo que has aprendido, y de donde. http://casidiablo.net/desarrollar-compilar-modulo-linux/http://es.tldp.org/Manuales-LuCAS/doc-progmodlinux/doc-progmodlinux-html/http://rdebug.blogspot.com/2010/08/programar-modulos-para-el-kernel-en-c.htmlhttp://www.wikilearning.com/tutorial/guia_de_programacion_de_modulos_del_nucleo_linux-llamadas_al_sistema/9762-9http://www.ubuntu-es.org/node/49313http://www.wikilearning.com/tutorial/guia_de_programacion_de_modulos_del_nucleo_linux-hola_mundo/9762-2Dedica tiempo a leer, a ejercitar, y retribuye con lo que aprendiste Saludos!
|
|
|
En línea
|
|
|
|
ddmmvv12
Desconectado
Mensajes: 6
|
Gracias por la ayuda, me doy cuenta que es básicamente igual que programar C en Windows
pongo una parte del codigo, podrian ayudarme en la ultima sentencia . cual es el indicador para variable tipo "struct timespec" que es lo que me pide en la compilacion
GRACIAS !!
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/sched.h> static int hola(void)
{
printk(KERN_INFO "Hola, el modulo esta siendo cargado.\n"); printk(KERN_INFO "El user space del proceso es '%s'\n", current->comm); printk(KERN_INFO "El PID es %i\n", current->pid); printk("la hora es * , CURRENT_TIME)
return 0; 1
|
|
|
En línea
|
|
|
|
D4RIO
Desconectado
Mensajes: 1.004
U N I X
|
Usa las etiquetas de código o el menú de código personalizado para hacer más legible tu código. Por otra parte, en la última línea escribías: printk("la hora es * , CURRENT_TIME)
Esto no tiene ';' al final, ni termina las comillas, supongo que será un error. Reemplazandolo y dejandolo como lo indico debajo, compila correctamente. Deberías agregarle información para modinfo (por ejemplo: MODULE_AUTHOR, MODULE_DESCRIPTION). #include <linux/module.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/sched.h> static int hola(void) { printk(KERN_INFO "Hola, el modulo esta siendo cargado.\n"); printk(KERN_INFO "El user space del proceso es '%s'\n", current->comm); printk(KERN_INFO "El PID es %i\n", current->pid); printk("la hora es *" , CURRENT_TIME); return 0; }
|
|
|
En línea
|
|
|
|
|
|