Пример #1
0
/*
 * This function is called when the module is loaded
 */
int init_module(void)
{
    int major;		/* Major number assigned to our device driver */
    int minor;		/* Minor number assigned to the associated character device */

    /* Register driver */
    if (alloc_chrdev_region (&start, 0, 1, DEVICE_NAME)) {
        printk(KERN_INFO "Can't register chrdev_region()");
        return -ENOMEM;
    }
    printk(KERN_INFO "Device registered correctly with major number %d\n", MAJOR(start));

    /* Create associated cdev */
    if ((chardev=cdev_alloc())==NULL) {
        printk(KERN_INFO "cdev_alloc() failed ");
        unregister_chrdev_region(start, 1);
        return -ENOMEM;
    }

    chardevClass = class_create(THIS_MODULE, CLASS_NAME);
    if (IS_ERR(chardevClass))    //$ls /sys/class
    {
        printk(KERN_INFO "class_create() failed ");
        unregister_chrdev_region(start, 1);
        return PTR_ERR(chardevClass);
    }

    cdev_init(chardev,&fops);

    if (cdev_add(chardev,start,1)) {
        printk(KERN_INFO "cdev_add() failed ");
        class_destroy(chardevClass);
        unregister_chrdev_region(start, 1);
        return -ENOMEM;
    }

    chardevDevice = device_create(chardevClass, NULL, start, NULL, DEVICE_NAME);
    if (IS_ERR(chardevDevice)) //$ls /dev/
    {
        device_destroy(chardevClass, start);
        class_destroy(chardevClass);
        unregister_chrdev_region(start, 1);
        return PTR_ERR(chardevDevice);
    }

    // Leds start

    kbd_driver= get_kbd_driver_handler();
    set_leds(kbd_driver,ALL_LEDS_ON);

    major=MAJOR(start);
    minor=MINOR(start);

    printk(KERN_INFO "I was assigned major number %d. To talk to\n", major);
    printk(KERN_INFO "the driver. Try to cat and echo to the device file.\n");
    printk(KERN_INFO "Remove the device file and module when done.\n");

    return SUCCESS;
}
Пример #2
0
/* This syscall modify the the led state */
SYSCALL_DEFINE1(ledctl,unsigned int,leds) {
	if((leds<0)||(leds>7))
		return -EINVAL;
	kbd_driver= get_kbd_driver_handler();

	if(kbd_driver==NULL)
		return -ENODEV;

	leds = convert(leds);
	if(set_leds(kbd_driver,leds) < 0)
		return -ENOTSUPP;
	return 0;
}
Пример #3
0
/* Module init function */
static int __init procleds_init(void) {

  int ret = 0;

  /* get & set KDB driver */
  kbd_driver = get_kbd_driver_handler();

  /* Create procfs entry */
  proc_entry = proc_create( "leds", 0666, NULL, &proc_entry_fops);
  if (proc_entry == NULL) {
    ret = -ENOMEM;
    printk(KERN_INFO "PROCLEDS: Can't create /proc entry\n");
  } else {
      printk(KERN_INFO "PROCLEDS: Module loaded\n");
  }

  return ret;
}
Пример #4
0
SYSCALL_DEFINE1(ledctl, unsigned int, leds){
	struct tty_driver* handler = get_kbd_driver_handler();
    
     unsigned int status = 0, i = 0;
    for (i = 0 ; i < 3 ; i++){
    
     if (leds & (0x1 << i)){
       if (i == 0)
         status |= 0x1;
       else if (i == 1)
         status |= 0x4;
       else if (i == 2)
         status |= 0x2;
              
     }
    
    }
    
	set_leds(handler, status);
	return 0;
}
Пример #5
0
Файл: modleds.c Проект: rnov/LIN
static int __init modleds_init(void)
{	
   proc_entry = proc_create( "modleds", 0666, NULL, &proc_entry_fops);
   kbd_driver= get_kbd_driver_handler();
   return 0;
}
Пример #6
0
static int __init modleds_init(void)
{	
   kbd_driver= get_kbd_driver_handler();
   set_leds(kbd_driver,ALL_LEDS_ON); 
   return 0;
}