lindev(4) [1] is supposed to be a collection of linux-specific pseudo

devices that we also support, just not by default (thus only LINT or
module builds by default).

While currently there is only "/dev/full" [2], we are planning to see more
in the future.  We may decide to change the module/dependency logic in the
future should the list grow too long.

This is not part of linux.ko as also non-linux binaries like kFreeBSD
userland or ports can make use of this as well.

Suggested by:	rwatson [1] (name)
Submitted by:	ed [2]
Discussed with:	markm, ed, rwatson, kib (weeks ago)
Reviewed by:	rwatson, brueffer (prev. version)
PR:		kern/68961
MFC after:	6 weeks
This commit is contained in:
Bjoern A. Zeeb 2009-09-26 12:45:28 +00:00
parent ab711589df
commit 4507f02e0e
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=197518
14 changed files with 314 additions and 0 deletions

View File

@ -173,6 +173,7 @@ MAN= aac.4 \
le.4 \
led.4 \
lge.4 \
${_lindev.4} \
${_linux.4} \
lmc.4 \
lo.4 \
@ -625,6 +626,7 @@ _if_urtw.4= if_urtw.4
_if_wpi.4= if_wpi.4
_ipmi.4= ipmi.4
_io.4= io.4
_lindev.4= lindev.4
_linux.4= linux.4
_ndis.4= ndis.4
_nfe.4= nfe.4
@ -636,6 +638,8 @@ _speaker.4= speaker.4
_spkr.4= spkr.4
_urtw.4= urtw.4
_wpi.4= wpi.4
MLINKS+=lindev.4 full.4
.endif
.if exists(${.CURDIR}/man4.${MACHINE_ARCH})

73
share/man/man4/lindev.4 Normal file
View File

@ -0,0 +1,73 @@
.\"-
.\" Copyright (c) 2009 "Bjoern A. Zeeb" <bz@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
.\"
.Dd September 26, 2009
.Dt LINDEV 4
.Os
.Sh NAME
.Nm lindev
.Nd the lindev module
.Sh SYNOPSIS
To compile this collection of linux-specific pseudo devices into the kernel,
place the following line in your kernel configuration file:
.Bd -ragged -offset indent
.Cd "device lindev"
.Ed
.Pp
Alternatively, to load the driver as a module at boot time,
place the following line in
.Xr loader.conf 5 :
.Bd -literal -offset indent
lindev_load="YES"
.Ed
.Sh DESCRIPTION
The
.Nm
module provides a collection of linux-specific pseudo devices.
.Sh DEVICES
.Bl -tag -width /dev/full
.It Pa /dev/full
The
.Xr full
device always returns
.Er ENOSPC
on write attempts.
For reads it emulates
.Xr zero 4 .
.El
.Sh FILES
.Bl -tag -width /dev/full
.It Pa /dev/full
.El
.Sh SEE ALSO
.Xr null 4 ,
.Xr zero 4
.Sh HISTORY
The
.Nm
module first appeared in
.Fx 9.0 .

View File

@ -517,3 +517,6 @@ options VM_KMEM_SIZE_SCALE
# Enable NDIS binary driver support
options NDISAPI
device ndis
# Linux-specific pseudo devices support
device lindev

View File

@ -179,6 +179,7 @@ screensave_name="green_saver" # Set to the name of the screensaver module
ibcs2_load="NO" # IBCS2 (SCO) emulation
ibcs2_coff_load="NO"
linux_load="NO" # Linux emulation
lindev_load="NO" # Linux-specific pseudo devices (see lindev(4))
svr4_load="NO" # SystemV R4 emulation
streams_load="NO" # System V streams module

View File

@ -208,6 +208,8 @@ dev/hwpmc/hwpmc_piv.c optional hwpmc
dev/hwpmc/hwpmc_tsc.c optional hwpmc
dev/hwpmc/hwpmc_x86.c optional hwpmc
dev/kbd/kbd.c optional atkbd | sc | ukbd | usb2_input_kbd
dev/lindev/full.c optional lindev
dev/lindev/lindev.c optional lindev
dev/mem/memutil.c optional mem
dev/nfe/if_nfe.c optional nfe pci
dev/nve/if_nve.c optional nve pci

View File

@ -201,6 +201,8 @@ dev/ipmi/ipmi_pci.c optional ipmi pci
dev/ipmi/ipmi_linux.c optional ipmi compat_linux
dev/kbd/kbd.c optional atkbd | sc | ukbd | usb2_input_kbd
dev/le/if_le_isa.c optional le isa
dev/lindev/full.c optional lindev
dev/lindev/lindev.c optional lindev
dev/mem/memutil.c optional mem
dev/mse/mse.c optional mse
dev/mse/mse_isa.c optional mse isa

View File

@ -107,6 +107,8 @@ dev/hwpmc/hwpmc_x86.c optional hwpmc
dev/io/iodev.c optional io
dev/kbd/kbd.c optional pckbd | sc | ukbd | usb2_input_kbd
dev/le/if_le_cbus.c optional le isa
dev/lindev/full.c optional lindev
dev/lindev/lindev.c optional lindev
dev/mem/memutil.c optional mem
dev/mse/mse.c optional mse
dev/mse/mse_cbus.c optional mse isa

103
sys/dev/lindev/full.c Normal file
View File

@ -0,0 +1,103 @@
/*-
* Copyright (c) 2009 Ed Schouten <ed@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/systm.h>
#include <sys/uio.h>
#include <dev/lindev/lindev.h>
static struct cdev *full_dev;
static d_read_t full_read;
static d_write_t full_write;
static struct cdevsw full_cdevsw = {
.d_version = D_VERSION,
.d_read = full_read,
.d_write = full_write,
.d_name = "full",
};
static void *zbuf;
/* ARGSUSED */
static int
full_read(struct cdev *dev __unused, struct uio *uio, int flags __unused)
{
int error = 0;
while (uio->uio_resid > 0 && error == 0)
error = uiomove(zbuf, MIN(uio->uio_resid, PAGE_SIZE), uio);
return (error);
}
/* ARGSUSED */
static int
full_write(struct cdev *dev __unused, struct uio *uio __unused,
int flags __unused)
{
return (ENOSPC);
}
/* ARGSUSED */
int
lindev_modevent_full(module_t mod __unused, int type, void *data __unused)
{
switch(type) {
case MOD_LOAD:
zbuf = (void *)malloc(PAGE_SIZE, M_TEMP, M_WAITOK | M_ZERO);
full_dev = make_dev(&full_cdevsw, 0, UID_ROOT, GID_WHEEL,
0666, "full");
if (bootverbose)
printf("full: <full device>\n");
break;
case MOD_UNLOAD:
destroy_dev(full_dev);
free(zbuf, M_TEMP);
break;
case MOD_SHUTDOWN:
break;
default:
return (EOPNOTSUPP);
}
return (0);
}

73
sys/dev/lindev/lindev.c Normal file
View File

@ -0,0 +1,73 @@
/*-
* Copyright (c) 2009 "Bjoern A. Zeeb" <bz@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* "lindev" is supposed to be a collection of linux-specific devices
* that we also support, just not by default.
* While currently there is only "/dev/full", we are planning to see
* more in the future.
* This file is only the container to load/unload all supported devices;
* the implementation of each should go into its own file.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/conf.h>
#include <sys/kernel.h>
#include <sys/module.h>
#include <dev/lindev/lindev.h>
/* ARGSUSED */
static int
lindev_modevent(module_t mod, int type, void *data)
{
int error;
switch(type) {
case MOD_LOAD:
error = lindev_modevent_full(mod, type, data);
break;
case MOD_UNLOAD:
error = lindev_modevent_full(mod, type, data);
break;
case MOD_SHUTDOWN:
error = lindev_modevent_full(mod, type, data);
break;
default:
return (EOPNOTSUPP);
}
return (error);
}
DEV_MODULE(lindev, lindev_modevent, NULL);
MODULE_VERSION(lindev, 1);

34
sys/dev/lindev/lindev.h Normal file
View File

@ -0,0 +1,34 @@
/*-
* Copyright (c) 2009 "Bjoern A. Zeeb" <bz@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _DEV_LINDEV_LINDEV_H
#define _DEV_LINDEV_LINDEV_H
int lindev_modevent_full(module_t, int, void *);
#endif /* _DEV_LINDEV_LINDEV_H */

View File

@ -880,6 +880,9 @@ device streams # STREAMS network driver (required for svr4).
options NDISAPI
device ndis
# Linux-specific pseudo devices support
device lindev
#####################################################################
# VM OPTIONS

View File

@ -151,6 +151,7 @@ SUBDIR= ${_3dfx} \
libiconv \
libmbpool \
libmchain \
${_lindev} \
${_linprocfs} \
${_linsysfs} \
${_linux} \
@ -373,6 +374,7 @@ _ie= ie
_if_ndis= if_ndis
_igb= igb
_io= io
_lindev= lindev
_linprocfs= linprocfs
_linsysfs= linsysfs
_linux= linux
@ -510,6 +512,7 @@ _ipwfw= ipwfw
_iwn= iwn
_iwnfw= iwnfw
_ixgb= ixgb
_lindev= lindev
_linprocfs= linprocfs
_linsysfs= linsysfs
_linux= linux

View File

@ -0,0 +1,8 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../dev/lindev
KMOD= lindev
SRCS= full.c lindev.c
.include <bsd.kmod.mk>

View File

@ -565,6 +565,9 @@ options COMPAT_SVR4 # build emulator statically
options DEBUG_SVR4 # enable verbose debugging
device streams # STREAMS network driver (required for svr4).
# Linux-specific pseudo devices support
device lindev
#####################################################################
# VM OPTIONS