table of contents
MAKE_DEV(9) | Kernel Developer's Manual | MAKE_DEV(9) |
NAME¶
make_dev, make_dev_cred, make_dev_credf, make_dev_alias, destroy_dev, destroy_dev_sched, destroy_dev_sched_cb, destroy_dev_drain, dev_depends — manage cdev's and DEVFS registration for devicesSYNOPSIS¶
#include <sys/param.h>#include <sys/conf.h> struct cdev *
make_dev(struct cdevsw *cdevsw, int unit, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev *
make_dev_cred(struct cdevsw *cdevsw, int unit, struct ucred *cr, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev *
make_dev_credf(int flags, struct cdevsw *cdevsw, int unit, struct ucred *cr, uid_t uid, gid_t gid, int perms, const char *fmt, ...); struct cdev *
make_dev_alias(struct cdev *pdev, const char *fmt, ...); void
destroy_dev(struct cdev *dev); void
destroy_dev_sched(struct cdev *dev); void
destroy_dev_sched_cb(struct cdev *dev, void (*cb)(void *), void *arg); void
destroy_dev_drain(struct cdevsw *csw); void
dev_depends(struct cdev *pdev, struct cdev *cdev);
DESCRIPTION¶
The make_dev_credf() function creates a cdev structure for a new device. It also notifies devfs(5) of the presence of the new device, that causes corresponding nodes to be created. Besides this, a devctl(4) notification is sent. The device will be owned by uid, with the group ownership as gid. The name is the expansion of fmt and following arguments as printf(9) would print it. The name determines its path under /dev or other devfs(5) mount point and may contain slash ‘/
’ characters to denote
subdirectories. The permissions of the file specified in
perms are defined in
<sys/stat.h>:
#define S_IRWXU 0000700 /* RWX mask for owner */ #define S_IRUSR 0000400 /* R for owner */ #define S_IWUSR 0000200 /* W for owner */ #define S_IXUSR 0000100 /* X for owner */ #define S_IRWXG 0000070 /* RWX mask for group */ #define S_IRGRP 0000040 /* R for group */ #define S_IWGRP 0000020 /* W for group */ #define S_IXGRP 0000010 /* X for group */ #define S_IRWXO 0000007 /* RWX mask for other */ #define S_IROTH 0000004 /* R for other */ #define S_IWOTH 0000002 /* W for other */ #define S_IXOTH 0000001 /* X for other */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ #define S_ISVTX 0001000 /* sticky bit */ #ifndef _POSIX_SOURCE #define S_ISTXT 0001000 #endif
MAKEDEV_REF reference the created device MAKEDEV_NOWAIT do not sleep, may return NULL MAKEDEV_WAITOK allow the function to sleep to satisfy malloc MAKEDEV_ETERNAL created device will be never destroyed
MAKEDEV_WAITOK
flag is assumed if none of
MAKEDEV_WAITOK
, MAKEDEV_NOWAIT
is specified.
The dev_clone(9) event handler shall specify
MAKEDEV_REF
flag when creating a device in response to
lookup, to avoid race where the device created is destroyed immediately after
devfs_lookup(9) drops his reference to cdev.
The MAKEDEV_ETERNAL
flag allows the kernel to not
acquire some locks when translating system calls into the cdevsw methods
calls. It is responsibility of the driver author to make sure that
destroy_dev() is never called on the returned cdev. For the
convenience, use the MAKEDEV_ETERNAL_KLD
flag for the
code that can be compiled into kernel or loaded (and unloaded) as loadable
module.
The make_dev_cred() function is equivalent to the call
make_dev_credf(0, cdevsw, unit, cr, uid, gid, perms, fmt, ...);
make_dev_credf(0, cdevsw, unit, NULL, uid, gid, perms, fmt, ...);
destroy_dev_sched(cdev, NULL, NULL);
SEE ALSO¶
devctl(4), destroy_dev_drain(9), dev_clone(9), devfs(5)HISTORY¶
The make_dev() and destroy_dev() functions first appeared in FreeBSD 4.0. The function make_dev_alias() first appeared in FreeBSD 4.1. The function dev_depends() first appeared in FreeBSD 5.0. The functions make_dev_credf(), destroy_dev_sched(), destroy_dev_sched_cb() first appeared in FreeBSD 7.0.September 5, 2010 | Debian |