Red de conocimiento informático - Material del sitio web - ¿Por qué el kernel no se bloquea cuando se elimina la referencia al puntero nulo en el módulo del kernel de Linux?Algunos conceptos con los que entré en contacto con el código fuente del módulo del kernel de Linux se obtuvieron experimentando con el método difuso varios grupos de módulos del kernel del sistema Linux: //my_proc.c#include#include#include#include#include< linux/sched.h>#include #define STRINGLEN 1024char global_buffer[STRINGLEN]; struct proc_dir_entry *example_dir,*Tang_file,*Yang_file,*symlink; char *page,char **start, off_t off,int count,int *eof, void *data){// El usuario lee la función de llamada del kernel del archivo Tang int len;try_module_get(THIS_MODULE);//contador de referencia del módulo len=printf( página, "Mensaje Tang:\nnombre: %s\npid:%d\n",current ->comm,current->pid);module_put(THISMODULE);return len;}int proc_read_Yang(char *page,char ** start,off_t off,int count,int *eof, void *data){// usuario lee la función de llamada del kernel del archivo Yu int len;try_module_get(THIS_MODULE);len=printf(page, "Mensaje Yang:\n%s write: %s/n",current-> comm,global _buffer);module_put(THIS_MODULE);return len;}int proc_write_Yang(struct file *file, const char *buffer, unsigned long count, void *data){//Lectura del usuario y escribir datos en la función de llamada del kernel del archivo Yang int len;try_module_get(THIS_MODULE); if(count>=STRINGLEN)len=STRINGLEN-1;elselen=count;copy_from_user(global_ buffer,buffer,len);global_buffer[len]=' \0';module_put(THISMODULE); return len;}int init_module(){/función de inicialización example_dir=proc_mkdir(" 13081175",NULL); example_dir->owner=THIS_MODULE=create_proc_read_e;

¿Por qué el kernel no se bloquea cuando se elimina la referencia al puntero nulo en el módulo del kernel de Linux?Algunos conceptos con los que entré en contacto con el código fuente del módulo del kernel de Linux se obtuvieron experimentando con el método difuso varios grupos de módulos del kernel del sistema Linux: //my_proc.c#include#include#include#include#include< linux/sched.h>#include #define STRINGLEN 1024char global_buffer[STRINGLEN]; struct proc_dir_entry *example_dir,*Tang_file,*Yang_file,*symlink; char *page,char **start, off_t off,int count,int *eof, void *data){// El usuario lee la función de llamada del kernel del archivo Tang int len;try_module_get(THIS_MODULE);//contador de referencia del módulo len=printf( página, "Mensaje Tang:\nnombre: %s\npid:%d\n",current ->comm,current->pid);module_put(THISMODULE);return len;}int proc_read_Yang(char *page,char ** start,off_t off,int count,int *eof, void *data){// usuario lee la función de llamada del kernel del archivo Yu int len;try_module_get(THIS_MODULE);len=printf(page, "Mensaje Yang:\n%s write: %s/n",current-> comm,global _buffer);module_put(THIS_MODULE);return len;}int proc_write_Yang(struct file *file, const char *buffer, unsigned long count, void *data){//Lectura del usuario y escribir datos en la función de llamada del kernel del archivo Yang int len;try_module_get(THIS_MODULE); if(count>=STRINGLEN)len=STRINGLEN-1;elselen=count;copy_from_user(global_ buffer,buffer,len);global_buffer[len]=' \0';module_put(THISMODULE); return len;}int init_module(){/función de inicialización example_dir=proc_mkdir(" 13081175",NULL); example_dir->owner=THIS_MODULE=create_proc_read_e;

ntry("Tang",0444,example_dir,proc_rea d_current,NULL) ;Tang_file->read_proc=proc_read_Tang;Tang_file->owner=THIS_MODULE;Yang_file=create_proc_entry("Yang",0666,ejemplo);strcpy( global_buffer, "Tang ");Yang_file->read_proc=proc_read_Yang;Yang_file->write_proc=proc_write_Yang;Yang_file->owner=THIS_ MOUDLE;return 0;}void cleanup_module(){//función de desinstalación remove_proc_entry("Yang",example_dir);remove_proc_entry(" Tang",example_dir);remove_proc _entry("21",NULL);}Escribe el contenido del archivo Makefile: obj-m := my_proc.o KERNELBUILD := /lib/modules/$(shell uname -r)/build valor predeterminado: make -C $(KERNELBUILD) M=$( shell pwd) módulos clean: rm -rf *.o *.ko *.mod.c .*.cmd *.markers *.order *.symvers .tmp_versions