diff --git a/sbin/kget/Makefile b/sbin/kget/Makefile new file mode 100644 index 000000000000..fe15a756fab5 --- /dev/null +++ b/sbin/kget/Makefile @@ -0,0 +1,8 @@ +# $Id: Makefile,v 1.4 1999/01/08 21:09:42 abial Exp $ +# +PROG= kget +CFLAGS+= -I${.CURDIR}/../../sys/i386 +SRCS= kget.c +NOMAN= yes + +.include diff --git a/sbin/kget/kget.8 b/sbin/kget/kget.8 new file mode 100644 index 000000000000..67c8e3185be5 --- /dev/null +++ b/sbin/kget/kget.8 @@ -0,0 +1,70 @@ +.\" Copyright (c) 1999 Andrzej Bialecki +.\" 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 ``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 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. +.\" +.\" $Id$ +.\" +.Dd Feb 20, 1999 +.Dt KGET 8 +.Os BSD 3 +.Sh NAME +.Nm kget +.Nd print kernel change information. +.Sh SYNOPSIS +.Nm kget +.Ar filename +.Sh DESCRIPTION +The +.Nm +utility allows one to view or save any device configuration information +which was changed in userconfig (-c) session. Most typically, it is written +to a /boot/kernel.conf file which is then loaded from /boot/loader.rc +(using "load -t userconfig_script /boot/kernel.conf"), saving the user +from having to re-enter it each time the system is booted. +.Pp +.Nm +uses the +.Xt sysctl 3 +interface to retrieve data from the kernel and requires that at least +the +.Ar machdep.uc_devlist +symbol be present. If it's not, you may need to update your kernel +before using this utility. +.Pp +Usage: +.Nm +.Ar filename +.Pp +where +.Ar filename +is either a regular file (which is overwritten) or -, indicating that +standard output should be used. +.Sh BUGS +Sure to be some. +.Sh SEE ALSO +.Xr sysctl 3 +.Sh HISTORY +The +.Nm +command appeared in FreeBSD 3.1, as part of the PicoBSD distribution by +.An Andrzej Bialecki diff --git a/sbin/kget/kget.c b/sbin/kget/kget.c new file mode 100644 index 000000000000..b7c779f17e21 --- /dev/null +++ b/sbin/kget/kget.c @@ -0,0 +1,164 @@ +/*- + * Copyright (c) 1999 Andrzej Bialecki + * 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. + * + * $Id: kget.c,v 1.3 1999/02/12 20:36:09 abial Exp $ + */ + +#include +#include +#include +#include +#include +#include + +struct isa_device *id; +struct pnp_cinfo *c; +char *p; + +int +main(int argc, char *argv[]) +{ + int len,i; + char *buf; + char *mib1="machdep.uc_devlist"; + char *mib2="machdep.uc_pnplist"; + char name[9]; + FILE *fout; + + if(argc<2) { + fout=stdout; + } else { + if(strcmp(argv[1],"-")==0) { + fout=stdout; + } else { + fout=fopen(argv[1],"w"); + if(fout==NULL) { + perror("opening output file"); + exit(1); + } + } + } + + /* We use sysctlbyname, because the oid is unknown (OID_AUTO) */ + + /* First, print the changes made to ISA devices */ + /* get the buffer size */ + i=sysctlbyname(mib1,NULL,&len,NULL,NULL); + if(i) { + perror("buffer sizing"); + exit(-1); + } + buf=(char *)malloc(len*sizeof(char)); + i=sysctlbyname(mib1,buf,&len,NULL,NULL); + if(i) { + perror("retrieving data"); + exit(-1); + } + i=0; + while(iid_enabled) { + fprintf(fout,"di %s%d\n",name,id->id_unit); + } else { + fprintf(fout,"en %s%d\n",name,id->id_unit); + if(id->id_iobase>0) { + fprintf(fout,"po %s%d %#x\n",name,id->id_unit, + id->id_iobase); + } + if(id->id_irq>0) { + fprintf(fout,"ir %s%d %d\n",name,id->id_unit, + ffs(id->id_irq)-1); + } + if(id->id_drq>0) { + fprintf(fout,"dr %s%d %d\n",name,id->id_unit, + id->id_drq); + } + if(id->id_maddr>0) { + fprintf(fout,"iom %s%d %#x\n",name,id->id_unit, + id->id_maddr); + } + if(id->id_msize>0) { + fprintf(fout,"ios %s%d %d\n",name,id->id_unit, + id->id_msize); + } + fprintf(fout,"f %s%d %#x\n",name,id->id_unit, + id->id_flags); + } + i+=sizeof(struct isa_device)+8; + } + free(buf); + /* Now, print the changes to PnP override table */ + /* get the buffer size */ + i=sysctlbyname(mib2,NULL,&len,NULL,NULL); + if(i) { + perror("buffer sizing"); + exit(-1); + } + buf=(char *)malloc(len*sizeof(char)); + i=sysctlbyname(mib2,buf,&len,NULL,NULL); + if(i) { + perror("retrieving data"); + exit(-1); + } + i=0; + /* Print the PnP override table. Taken from userconfig.c */ + do { + c = (struct pnp_cinfo *)(buf+i); + if (c->csn >0 && c->csn != 255) { + int pmax, mmax; + char buf1[256]; + + if(c->enable==0) { + fprintf(fout,"pnp %d %d disable\n", + c->csn, c->ldn); + continue; + } + fprintf(fout,"pnp %d %d %s irq0 %d irq1 %d drq0 %d drq1 %d", + c->csn, c->ldn, + c->override ? "os":"bios", + c->irq[0], c->irq[1], c->drq[0], c->drq[1]); + if (c->flags) + fprintf(fout," flags 0x%lx",c->flags); + pmax=0; + while(c->port[pmax]!=0 && pmax<8) { + fprintf(fout," port%d %d",pmax,c->port[pmax]); + pmax++; + } + mmax=0; + while(c->mem[mmax].base!=0 && mmax<8) { + fprintf(fout," mem%d %d",mmax,c->mem[mmax].base); + mmax++; + } + fprintf(fout,"\n"); + } + + } while ((i+=sizeof(struct pnp_cinfo))