| Can someone please update the examples in /usr/share/examples/kld?
| 
| It's a bit confusing when it doesn't even compile.

i just submitted a patch to get the kld/cdev module to compile
(and work too ;).  i tested this on a -stable box.. but it
should still work for -current.

i used the vn device as an example since i'm still learning
how KLDs work.

see patch below or at:
  http://www.barmetta.com/freebsd/examples-kld-cdev.patch


                                        ...bryan

--
[EMAIL PROTECTED]


-----8<-----

diff -rc cdev-old/module/cdevmod.c cdev/module/cdevmod.c
*** cdev-old/module/cdevmod.c   Thu Mar 30 21:19:48 2000
--- cdev/module/cdevmod.c       Thu Mar 30 21:17:15 2000
***************
*** 81,99 ****
        /* read */      noread,
        /* write */     nowrite,
        /* ioctl */     mydev_ioctl,
-       /* stop */      nostop,
-       /* reset */     noreset,
-       /* devtotty */  nodevtotty,
        /* poll */      nopoll,
        /* mmap */      nommap,
        /* strategy */  nostrategy,
        /* name */      "cdev",
-       /* parms */     noparms,
        /* maj */       CDEV_MAJOR,
        /* dump */      nodump,
        /* psize */     nopsize,
        /* flags */     D_TTY,
-       /* maxio */     0,
        /* bmaj */      -1
  };
  
--- 81,94 ----
***************
*** 109,115 ****
   */
  
  static int
! cdev_load(module_t mod, int cmd, void *arg)
  {
      int  err = 0;
  
--- 104,110 ----
   */
  
  static int
! cdev_modevent(module_t mod, int cmd, void *arg)
  {
      int  err = 0;
  
***************
*** 117,122 ****
--- 112,119 ----
      case MOD_LOAD:
        
        /* Do any initialization that you should do with the kernel */
+       cdevsw_add(&my_devsw);
+       make_dev(&my_devsw, 0, UID_ROOT, GID_OPERATOR, 0644, "%s", "cdev");
        
        /* if we make it to here, print copyright on console*/
        printf("\nSample Loaded kld character device driver\n");
***************
*** 126,135 ****
        break;          /* Success*/
  
      case MOD_UNLOAD:
        printf("Unloaded kld character device driver\n");
        break;          /* Success*/
  
!     default:  /* we only understand load/unload*/
        err = EINVAL;
        break;
      }
--- 123,136 ----
        break;          /* Success*/
  
      case MOD_UNLOAD:
+       /* fall through */
+     case MOD_SHUTDOWN:
+       cdevsw_remove(&my_devsw);
+ 
        printf("Unloaded kld character device driver\n");
        break;          /* Success*/
  
!     default:
        err = EINVAL;
        break;
      }
***************
*** 139,142 ****
  
  /* Now declare the module to the system */
  
! DEV_MODULE(cdev, CDEV_MAJOR, -1, my_devsw, cdev_load, 0);
--- 140,143 ----
  
  /* Now declare the module to the system */
  
! DEV_MODULE(cdev, cdev_modevent, NULL);


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to