summaryrefslogtreecommitdiffstats
path: root/share/examples/drivers
diff options
context:
space:
mode:
authorrik <rik@FreeBSD.org>2006-08-09 21:23:42 +0000
committerrik <rik@FreeBSD.org>2006-08-09 21:23:42 +0000
commitaf3c9f2dc2edc0213d112f649a625f62032f7020 (patch)
tree54bd68e3ab6171e181f11dd94fbbc185b7e8a27b /share/examples/drivers
parent8d1199edcd061900495e9a07ad11c0266ddf9759 (diff)
downloadFreeBSD-src-af3c9f2dc2edc0213d112f649a625f62032f7020.zip
FreeBSD-src-af3c9f2dc2edc0213d112f649a625f62032f7020.tar.gz
- Added ability to provide (optional) path to the kernel sources
- Added check of dirs used by example generator - Fixed path for ${s}/conf/files.FOO and include it via files directive from config file - Changed kernel configuration example with the driver: it is not produced by copying Generic but by including it - KDB is added to config (for DDB) - Added module building instead and fixed kernel building Reviewed by: julian@
Diffstat (limited to 'share/examples/drivers')
-rw-r--r--share/examples/drivers/make_pseudo_driver.sh144
1 files changed, 122 insertions, 22 deletions
diff --git a/share/examples/drivers/make_pseudo_driver.sh b/share/examples/drivers/make_pseudo_driver.sh
index 6e8f473..658ed3b 100644
--- a/share/examples/drivers/make_pseudo_driver.sh
+++ b/share/examples/drivers/make_pseudo_driver.sh
@@ -1,40 +1,99 @@
#!/bin/sh
# This writes a skeleton driver and puts it into the kernel tree for you
-#arg1 is lowercase "foo"
+#
+# arg1 is lowercase "foo"
+# arg2 path to the kernel sources, "/sys" if omitted
#
# Trust me, RUN THIS SCRIPT :)
#
# $FreeBSD$
#
#-------cut here------------------
-cd /sys/i386/conf
if [ "${1}X" = "X" ]
then
echo "Hey , how about some help here.. give me a device name!"
exit 1
fi
+if [ "X${2}" = "X" ]; then
+ TOP=`cd /sys; pwd -P`
+ echo "Using ${TOP} as the path to the kernel sources!"
+else
+ TOP=${2}
+fi
+
+for i in "" "conf" "i386" "i386/conf" "dev" "sys" "modules"
+do
+ if [ -d ${TOP}/${i} ]
+ then
+ continue
+ fi
+ echo "${TOP}/${i}: no such directory."
+ echo "Please, correct the error and try again."
+ exit 1
+done
UPPER=`echo ${1} |tr "[:lower:]" "[:upper:]"`
-cat >files.${UPPER} <<DONE
-dev/${1}.c optional ${1} device-driver
+
+if [ -d ${TOP}/modules/${1} ]; then
+ echo "There appears to already be a module called ${1}"
+ echo -n "Should it be overwritten? [Y]"
+ read VAL
+ if [ "-z" "$VAL" ]; then
+ VAL=YES
+ fi
+ case ${VAL} in
+ [yY]*)
+ echo "Cleaning up from prior runs"
+ rm -rf ${TOP}/dev/${1}
+ rm -rf ${TOP}/modules/${1}
+ rm ${TOP}/conf/files.${UPPER}
+ rm ${TOP}/i386/conf/${UPPER}
+ rm ${TOP}/sys/${1}io.h
+ ;;
+ *)
+ exit 1
+ ;;
+ esac
+fi
+
+echo "The following files will be created:"
+echo ${TOP}/modules/${1}
+echo ${TOP}/conf/files.${UPPER}
+echo ${TOP}/i386/conf/${UPPER}
+echo ${TOP}/dev/${1}
+echo ${TOP}/dev/${1}/${1}.c
+echo ${TOP}/sys/${1}io.h
+echo ${TOP}/modules/${1}
+echo ${TOP}/modules/${1}/Makefile
+
+mkdir ${TOP}/modules/${1}
+
+cat >${TOP}/conf/files.${UPPER} <<DONE
+dev/${1}.c optional ${1}
DONE
-cat >${UPPER} <<DONE
+cat >${TOP}/i386/conf/${UPPER} <<DONE
# Configuration file for kernel type: ${UPPER}
-ident ${UPPER}
# \$FreeBSD\$
-DONE
-grep -v GENERIC < GENERIC >>${UPPER}
+files "${TOP}/conf/files.${UPPER}"
+
+include GENERIC
+
+ident ${UPPER}
-cat >>${UPPER} <<DONE
# trust me, you'll need this
-options DDB
-device ${1}
+options KDB
+options DDB
+device ${1}
DONE
-cat >../../dev/${1}.c <<DONE
+if [ ! -d ${TOP}/dev/${1} ]; then
+ mkdir -p ${TOP}/dev/${1}
+fi
+
+cat >${TOP}/dev/${1}/${1}.c <<DONE
/*
* Copyright (c) [year] [your name]
* All rights reserved.
@@ -306,7 +365,7 @@ SYSINIT(${1}dev, SI_SUB_DRIVERS, SI_ORDER_MIDDLE+CDEV_MAJOR,
${1}_drvinit, NULL)
DONE
-cat >../../sys/${1}io.h <<DONE
+cat >${TOP}/sys/${1}io.h <<DONE
/*
* Definitions needed to access the ${1} device (ioctls etc)
* see mtio.h , ioctl.h as examples
@@ -326,17 +385,58 @@ cat >../../sys/${1}io.h <<DONE
#endif
DONE
-config ${UPPER}
-cd ../../compile/${UPPER}
-make depend
-make ${1}.o
-make
-exit
+if [ ! -d ${TOP}/modules/${1} ]; then
+ mkdir -p ${TOP}/modules/${1}
+fi
-#--------------end of script---------------
+cat >${TOP}/modules/${1}/Makefile <<DONE
+# ${UPPER} Loadable Kernel Module
#
-#you also need to add an entry into the cdevsw[]
-#array in conf.c, but it's too hard to do in a script..
+# \$FreeBSD\$
+
+.PATH: \${.CURDIR}/../../dev/${1}
+KMOD = ${1}
+SRCS = ${1}.c
+
+.include <bsd.kmod.mk>
+DONE
+
+echo -n "Do you want to build the '${1}' module? [Y]"
+read VAL
+if [ "-z" "$VAL" ]; then
+ VAL=YES
+fi
+case ${VAL} in
+[yY]*)
+ (cd ${TOP}/modules/${1}; make depend; make )
+ ;;
+*)
+# exit
+ ;;
+esac
+
+echo ""
+echo -n "Do you want to build the '${UPPER}' kernel? [Y]"
+read VAL
+if [ "-z" "$VAL" ]; then
+ VAL=YES
+fi
+case ${VAL} in
+[yY]*)
+ (
+ cd ${TOP}/i386/conf; \
+ config ${UPPER}; \
+ cd ${TOP}/i386/compile/${UPPER}; \
+ make depend; \
+ make; \
+ )
+ ;;
+*)
+# exit
+ ;;
+esac
+
+#--------------end of script---------------
#
#edit to your taste..
#
OpenPOWER on IntegriCloud