summaryrefslogtreecommitdiffstats
path: root/sbin/kget
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1999-02-27 02:24:18 +0000
committerjkh <jkh@FreeBSD.org>1999-02-27 02:24:18 +0000
commitafbf22aa140418b36591fda44da11c58aabfbfcd (patch)
tree3b78ebe02f557412d5eca60439b1ae9fc670ffe0 /sbin/kget
parent087590fb63a5b25c88d45340abc88c8c425db6be (diff)
downloadFreeBSD-src-afbf22aa140418b36591fda44da11c58aabfbfcd.zip
FreeBSD-src-afbf22aa140418b36591fda44da11c58aabfbfcd.tar.gz
Bring in kget, a utility for saving kernel change information.
Submitted by: abial
Diffstat (limited to 'sbin/kget')
-rw-r--r--sbin/kget/Makefile8
-rw-r--r--sbin/kget/kget.870
-rw-r--r--sbin/kget/kget.c164
3 files changed, 242 insertions, 0 deletions
diff --git a/sbin/kget/Makefile b/sbin/kget/Makefile
new file mode 100644
index 0000000..fe15a75
--- /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 <bsd.prog.mk>
diff --git a/sbin/kget/kget.8 b/sbin/kget/kget.8
new file mode 100644
index 0000000..67c8e31
--- /dev/null
+++ b/sbin/kget/kget.8
@@ -0,0 +1,70 @@
+.\" Copyright (c) 1999 Andrzej Bialecki <abial@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 ``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 0000000..b7c779f
--- /dev/null
+++ b/sbin/kget/kget.c
@@ -0,0 +1,164 @@
+/*-
+ * Copyright (c) 1999 Andrzej Bialecki <abial@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.
+ *
+ * $Id: kget.c,v 1.3 1999/02/12 20:36:09 abial Exp $
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <isa/isa_device.h>
+#include <isa/pnp.h>
+
+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(i<len) {
+ id=(struct isa_device *)(buf+i);
+ p=(buf+i+sizeof(struct isa_device));
+ strncpy(name,p,8);
+ if(!id->id_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))<len);
+ fprintf(fout,"q\n");
+ fclose(fout);
+ free(buf);
+ exit(0);
+}
OpenPOWER on IntegriCloud