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:
parent
ab711589df
commit
4507f02e0e
@ -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
73
share/man/man4/lindev.4
Normal 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 .
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
103
sys/dev/lindev/full.c
Normal 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
73
sys/dev/lindev/lindev.c
Normal 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
34
sys/dev/lindev/lindev.h
Normal 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 */
|
@ -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
|
||||
|
@ -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
|
||||
|
8
sys/modules/lindev/Makefile
Normal file
8
sys/modules/lindev/Makefile
Normal file
@ -0,0 +1,8 @@
|
||||
# $FreeBSD$
|
||||
|
||||
.PATH: ${.CURDIR}/../../dev/lindev
|
||||
|
||||
KMOD= lindev
|
||||
SRCS= full.c lindev.c
|
||||
|
||||
.include <bsd.kmod.mk>
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user