int init_module(void) { cbuffer = create_cbuffer_t(MAX_ITEMS_CBUF); if (!cbuffer) { return -ENOMEM; } sema_init(&sem_cons, 0); sema_init(&sem_prod, 0); sema_init(&mutex, 1); proc_entry = proc_create_data("fifoproc",0666, NULL, &proc_entry_fops, NULL); if (proc_entry == NULL) { destroy_cbuffer_t(cbuffer); printk(KERN_INFO "Fifoproc: No puedo crear la entrada en proc\n"); return -ENOMEM; } printk(KERN_INFO "Fifoproc: Cargado el Modulo.\n"); return 0; }
int init_module(void) { Major = register_chrdev(0, DEVICE_NAME, &fops); if (Major < 0){ printk(KERN_ALERT "Registering char device failed with %d\n", Major); return Major; } //Inicializamos semaforos de mutex y de colas de espera sema_init(&mtx,1); sema_init(&sem_cons,0); sema_init(&sem_prod,0); //Inicializamos cbuffer cbuffer = create_cbuffer_t (MAX_CBUFFER_LEN); printk(KERN_INFO "I was assigned major number %d. To talk to\n", Major); printk(KERN_INFO "the driver, create a dev file with\n"); printk(KERN_INFO "'mknod /dev/%s c %d 0'.\n", DEVICE_NAME, Major); printk(KERN_INFO "Try various minor numbers. Try to cat and echo to\n"); printk(KERN_INFO "the device file.\n"); printk(KERN_INFO "Remove the device file and module when done.\n"); return 0; }
/* FunciĆ³n init module */ int init_module( void ) { Major = register_chrdev(0, DEVICE_NAME, &fops); if (Major < 0) { printk(KERN_ALERT "Registering char fifo failed with %d\n", Major); return Major; } printk(KERN_ALERT "Registering char fifo succed with %d\n", Major); /* Inicializaciones */ prodcount = 0; conscount = 0; sema_init(&mtx, 1); sema_init(&sem_cons, 0); sema_init(&sem_prod, 0); nr_prod_waiting = 0; nr_cons_waiting = 0; cbuffer = create_cbuffer_t(CBUF_SIZE); return SUCCESS; }
struct sys_mbox* mbox_new(unsigned int max_size) { struct sys_mbox *mailbox; mailbox = (struct sys_mbox *) malloc(sizeof(struct sys_mbox)); if (mailbox == NULL ) { return NULL ; } /* Create the data structure */ if ((mailbox->cbuffer = create_cbuffer_t(max_size)) == NULL ) { free(mailbox); return NULL ; } mailbox->not_empty = sys_sem_new(0); mailbox->not_full = sys_sem_new(0); mailbox->mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mailbox->mutex, NULL ); mailbox->wait_send = 0; return mailbox; }