These interfaces are used in setting up a driver and preparing it for use. Some of these routines handle the dynamic loading of device driver modules into the kernel, and some manage the minor device nodes in /devices that are the interface to a device for application programs. All of these routines are called in the driver's _init(9E), _fini(9E), _info(9E), attach(9E), detach(9E), and probe(9E) entry points.
int ddi_create_minor_node(dev_info_t *dip, char *name, int spec_type, int minor_num, char *node_type, int is_clone);
ddi_create_minor_node(9F) advertises a minor device node, which will eventually appear in the /devices directory and refer to the device specified by dip.
void ddi_remove_minor_node(dev_info_t *dip, char *name);
ddi_remove_minor_node(9F) removes the minor device node name for the device dip from the system. name is assumed to have been created by ddi_create_minor_node(9F). If name is NULL, all minor node information is removed.
int mod_install(struct modlinkage *modlinkage);
mod_install(9F) links the calling driver module into the system and prepares the driver to be used. modlinkage is a pointer to the modlinkage structure defined in the driver. mod_install(9F) must be called from the _init(9E) entry point.
int mod_remove(struct modlinkage *modlinkage);
mod_remove(9F) unlinks the calling driver module from the system. modlinkage is a pointer to the modlinkage structure defined in the driver. mod_remove(9F) must be called from the _fini(9E) entry point.
int mod_info(struct modlinkage *modlinkage, struct modinfo *modinfop);
mod_info(9F) reports the status of a dynamically loadable driver module. It must be called from the _info(9E) entry point.