summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ndiscvt
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2005-07-22 05:49:41 +0000
committerjkim <jkim@FreeBSD.org>2005-07-22 05:49:41 +0000
commitc0a20bfaecd107f7f90c922e73abee35c74b8688 (patch)
tree63025bdfe1c2a8d349b12f1d1293673da9ffd325 /usr.sbin/ndiscvt
parent186ec2eefb520ad6d64073b39007945283b4dce4 (diff)
downloadFreeBSD-src-c0a20bfaecd107f7f90c922e73abee35c74b8688.zip
FreeBSD-src-c0a20bfaecd107f7f90c922e73abee35c74b8688.tar.gz
Fix ndisgen(8) for amd64
- file(1) does not recognize UTF-16 encoded .INF file: netbc564.inf: MPEG ADTS, layer I, v1, 96 kBits, 32 kHz, Stereo Use egrep(1) to match two strings, i. e., `Signature' and `Class=Net'. - Fix linking failure. Generate a temporary Makefile to emluate official kernel module build process. - Some minor typo/style fixes. Reviewed by: obrien
Diffstat (limited to 'usr.sbin/ndiscvt')
-rw-r--r--usr.sbin/ndiscvt/ndisgen.sh188
1 files changed, 116 insertions, 72 deletions
diff --git a/usr.sbin/ndiscvt/ndisgen.sh b/usr.sbin/ndiscvt/ndisgen.sh
index 3e31e88..8505a7c 100644
--- a/usr.sbin/ndiscvt/ndisgen.sh
+++ b/usr.sbin/ndiscvt/ndisgen.sh
@@ -57,6 +57,7 @@ echo " 4] Exit"
echo ""
echo -n " Enter your selection here and press return: "
read KEYPRESS
+return
}
@@ -78,8 +79,9 @@ echo " you have installed. At this time, the i386 and amd64 architectures"
echo " are both supported. Note that you cannot use a Windows/i386 driver"
echo " with FreeBSD/amd64: you must obtain a Windows/amd64 driver."
echo ""
-echo -n " Press any key to continue... "
+echo -n " Press return to continue... "
read KEYPRESS
+return
}
help2() {
@@ -102,8 +104,9 @@ echo ""
echo " If you don't have a driver CD, you should be able to find a driver"
echo " kit on the card or computer vendor's web site."
echo ""
-echo -n " Press any key to continue... "
+echo -n " Press return to continue... "
read KEYPRESS
+return
}
help3 () {
@@ -113,7 +116,7 @@ echo ""
echo " In most cases, you will need only two files: a .INF file and a .SYS"
echo " file. The .INF file is a text file used by the Windows(r) installer to"
echo " perform the driver installation. It contains information that tells"
-echo " the intaller what devices the driver supports and what registry keys"
+echo " the installer what devices the driver supports and what registry keys"
echo " should be created to control driver configuration. The .SYS file"
echo " is the actual driver executable code in Windows(r) Portable Executable"
echo " (PE) format. Note that sometimes the .INF file is supplied in unicode"
@@ -126,8 +129,9 @@ echo " extension, though they can be named almost anything. You will need"
echo " these additional files to make your device work with the NDIS"
echo " compatibility system as well."
echo ""
-echo -n " Press any key to continue... "
+echo -n " Press return to continue... "
read KEYPRESS
+return
}
help4 () {
@@ -150,8 +154,9 @@ echo " static kernel image for those who want/need a fully linked kernel"
echo " image (possibly for embedded bootstrap purposes, or just plain old"
echo " experimentation)."
echo ""
-echo -n " Press any key to continue... "
+echo -n " Press return to continue... "
read KEYPRESS
+return
}
help5 () {
@@ -174,8 +179,9 @@ echo " If you have installed the X Window system or some sort of desktop"
echo " environment, then iconv(1) should already be present. If not, you"
echo " will need to install the libiconv package or port."
echo ""
-echo -n " Press any key to continue... "
+echo -n " Press return to continue... "
read KEYPRESS
+return
}
infconv () {
@@ -189,37 +195,39 @@ echo " Please type in the path to your .INF file now."
echo ""
echo -n " > "
read INFPATH
-if [ $INFPATH ] && [ -e $INFPATH ];
-then
- INFTYPE=`${FILE} ${INFPATH}`
-
- case ${INFTYPE} in
- *ASCII*)
+if [ ${INFPATH} ] && [ -e ${INFPATH} ]; then
+ INFTYPE=`${EGREP} -i -c "^Signature|^.S.i.g.n.a.t.u.r.e" ${INFPATH}`
+ if [ ${INFTYPE} -le 0 ]; then
echo ""
- echo " This .INF file appears to be ASCII."
+ echo " I don't recognize this file format. It may not be a valid .INF file."
echo ""
- echo -n " Press any key to continue... "
+ echo -n " Press enter to try again, or ^C to quit. "
read KEYPRESS
- ;;
- *text*)
+ INFPATH=""
+ return
+ fi
+
+ INFTYPE=`${EGREP} -i -c "^Class.*=.*Net" ${INFPATH}`
+ if [ ${INFTYPE} -gt 0 ]; then
echo ""
echo " This .INF file appears to be ASCII."
echo ""
- echo -n " Press any key to continue... "
+ echo -n " Press return to continue... "
read KEYPRESS
- ;;
- *nicode*)
+ return
+ fi
+
+ INFTYPE=`${EGREP} -i -c "^.C.l.a.s.s.*=.*N.e.t" ${INFPATH}`
+ if [ ${INFTYPE} -gt 0 ]; then
echo ""
echo " This .INF file appears to be Unicode."
- if [ -e $ICONVPATH ];
- then
+ if [ -e ${ICONVPATH} ]; then
echo " Trying to convert to ASCII..."
- ${RM} -f /tmp/ascii.inf
- ${ICONVPATH} -f utf-16 -t utf-8 ${INFPATH} > /tmp/ascii.inf
- INFPATH=/tmp/ascii.inf
+ ${ICONVPATH} -f utf-16 -t utf-8 ${INFPATH} > ${INFFILE}
+ INFPATH=${INFFILE}
echo " Done."
echo ""
- echo -n " Press any key to continue... "
+ echo -n " Press return to continue... "
read KEYPRESS
else
echo " The iconv(1) utility does not appear to be installed."
@@ -228,24 +236,24 @@ then
echo ""
exit
fi
- ;;
- *)
- echo ""
- echo " I don't recognize this file format. It may not be a valid .INF file."
- echo ""
- echo -n " Press enter to try again, or ^C to quit. "
- read KEYPRESS
- INFPATH=""
- ;;
- esac
+ return
+ fi
+
+ echo ""
+ echo " I don't recognize this file format. It may not be a valid .INF file."
+ echo ""
+ echo -n " Press enter to try again, or ^C to quit. "
+ read KEYPRESS
+ INFPATH=""
else
echo ""
- echo " The file '$INFPATH' was not found."
+ echo " The file '${INFPATH}' was not found."
echo ""
echo -n " Press enter to try again, or ^C to quit. "
read KEYPRESS
INFPATH=""
fi
+return
}
sysconv() {
@@ -264,8 +272,7 @@ echo " Please type in the path to the Windows(r) driver .SYS file now."
echo ""
echo -n " > "
read SYSPATH
-if [ $SYSPATH ] && [ -e $SYSPATH ];
-then
+if [ ${SYSPATH} ] && [ -e ${SYSPATH} ]; then
SYSTYPE=`${FILE} ${SYSPATH}`
case ${SYSTYPE} in
@@ -273,9 +280,9 @@ then
echo ""
echo " This .SYS file appears to be in Windows(r) PE format."
echo ""
- echo -n " Press any key to continue... "
+ echo -n " Press return to continue... "
read KEYPRESS
- SYSBASE=`basename ${SYSPATH} | ${TR} '.' '_'`
+ SYSBASE=`${BASENAME} ${SYSPATH} | ${TR} '.' '_'`
;;
*)
echo ""
@@ -289,12 +296,13 @@ then
esac
else
echo ""
- echo " The file '$SYSPATH' was not found."
+ echo " The file '${SYSPATH}' was not found."
echo ""
echo -n " Press enter to try again, or ^C to quit. "
read KEYPRESS
SYSPATH=""
fi
+return
}
ndiscvt() {
@@ -322,6 +330,7 @@ else
echo -n " Press enter to continue... "
read KEYPRESS
fi
+return
}
firmcvt() {
@@ -337,10 +346,10 @@ echo ""
echo -n " > "
read FIRMPATH
- if [ $FIRMPATH ] && [ $FIRMPATH != "" ]; then
- if [ ! -e $FIRMPATH ]; then
+ if [ ${FIRMPATH} ]; then
+ if [ ! -e ${FIRMPATH} ]; then
echo ""
- echo " The file '$FIRMPATH' was not found"
+ echo " The file '${FIRMPATH}' was not found"
echo ""
echo -n " Press enter to try again, or ^C to quit. "
read KEYPRESS
@@ -353,7 +362,7 @@ echo ""
echo ""
echo " Conversion was successful."
echo ""
- FRMBASE=`basename ${FIRMPATH}`
+ FRMBASE=`${BASENAME} ${FIRMPATH}`
FRMBASE="${FRMBASE}.o"
FRMLIST="${FRMLIST} ${FRMBASE}"
fi
@@ -368,13 +377,14 @@ header
echo ""
echo " List of files converted firmware files:"
echo ""
-for i in $FRMLIST
+for i in ${FRMLIST}
do
echo " "$i
done
echo ""
echo -n " Press enter to continue... "
read KEYPRESS
+return
}
drvgen () {
@@ -390,57 +400,81 @@ echo " Press enter to compile the stub module and generate the driver"
echo -n " module now: "
read KEYPRESS
echo ""
-touch bus_if.h
-touch device_if.h
-echo -n " Compiling stub... "
-if ! ${CC} -D_KERNEL -DDRV_DATA_START=${SYSBASE}_drv_data_start -DDRV_NAME=${SYSBASE} -DDRV_DATA_END=${SYSBASE}_drv_data_end -I. ${STUBFILE} -c -o windrv_stub.o; then
- echo "compilation failed. Exiting."
+echo -n " Generating Makefile... "
+echo ".PATH: ${PWD} ${STUBPATH}" > ${MAKEFILE}
+echo "KMOD= ${SYSBASE}" >> ${MAKEFILE}
+echo "SRCS+= ${STUBFILE} ${DNAME}.h bus_if.h device_if.h" >> ${MAKEFILE}
+echo "OBJS+=${FRMLIST} ${DNAME}.o" >> ${MAKEFILE}
+echo "CFLAGS+= \\" >> ${MAKEFILE}
+echo " -DDRV_DATA_START=${SYSBASE}_drv_data_start \\" >> ${MAKEFILE}
+echo " -DDRV_NAME=${SYSBASE} \\" >> ${MAKEFILE}
+echo " -DDRV_DATA_END=${SYSBASE}_drv_data_end" >> ${MAKEFILE}
+echo "CLEANFILES+= \\" >> ${MAKEFILE}
+echo " ${INFFILE} \\" >> ${MAKEFILE}
+echo " ${DNAME}.h \\" >> ${MAKEFILE}
+echo " ${DNAME}.o" >> ${MAKEFILE}
+echo ".include <bsd.kmod.mk>" >> ${MAKEFILE}
+if [ -f ${MAKEFILE} ]; then
+ echo "done."
+else
+ echo "generating Makefile failed. Exiting."
echo ""
exit
-else
- echo "done."
fi
-echo -n " Linking loadable kernel module... "
-if ! ${LD} -Bshareable -d -warn-common -o ${SYSBASE}.ko windrv_stub.o ${FRMLIST} ${DNAME}.o; then
- echo "linking failed. Exiting."
+echo -n " Building kernel module... "
+echo "" > bus_if.h
+echo "" > device_if.h
+if ! ${MAKE} -f ${MAKEFILE} depend > /dev/null; then
+ echo "build failed. Exiting."
+ echo ""
+ exit
+fi
+if ! ${MAKE} -f ${MAKEFILE} all > /dev/null; then
+ echo "build failed. Exiting."
echo ""
exit
else
- echo "done."
+ if [ -f ${SYSBASE}.ko ]; then
+ ${MV} ${SYSBASE}.ko ${SYSBASE}.kmod
+ echo "done."
+ else
+ echo "build failed. Exiting."
+ echo ""
+ exit
+ fi
fi
-echo -n " Linking static kernel module... "
-if ! ${LD} -r -d -warn-common -o ${SYSBASE}.o windrv_stub.o ${FRMLIST} ${DNAME}.o; then
- echo "linking failed. Exiting."
+echo -n " Cleaning up... "
+if ! ${MAKE} -f ${MAKEFILE} clean cleandepend > /dev/null; then
+ echo "cleanup failed. Exiting."
echo ""
exit
else
echo "done."
fi
-echo -n " Cleaning up... "
-${RM} -f bus_if.h device_if.h windrv_stub.o
-${RM} -f ${DNAME}.h ${DNAME}.o
-echo "done."
+${RM} ${MAKEFILE}
+${MV} ${SYSBASE}.kmod ${SYSBASE}.ko
echo ""
-echo " The file $SYSBASE.ko has been successfully generated."
+echo " The file ${SYSBASE}.ko has been successfully generated."
echo " You can kldload this module to get started."
echo ""
-echo -n " Press any key to exit. "
+echo -n " Press return to exit. "
read KEYPRESS
echo ""
echo ""
+return
}
convert_driver () {
while : ; do
infconv
- if [ $INFPATH ] && [ $INFPATH != "" ]; then
+ if [ ${INFPATH} ]; then
break
fi
done
while : ; do
sysconv
- if [ $SYSPATH ] && [ $SYSPATH != "" ]; then
+ if [ ${SYSPATH} ]; then
break
fi
done
@@ -448,18 +482,27 @@ convert_driver () {
ndiscvt
firmcvt
drvgen
+ return
}
ICONVPATH=/usr/local/bin/iconv
NDISCVT=/usr/sbin/ndiscvt
-STUBFILE=/usr/share/misc/windrv_stub.c
+STUBPATH=/usr/share/misc
+STUBFILE=windrv_stub.c
DNAME=windrv
-OBJCOPY=/usr/bin/objcopy
-CC=/usr/bin/cc
-LD=/usr/bin/ld
+CP=/bin/cp
+MV=/bin/mv
RM=/bin/rm
TR=/usr/bin/tr
FILE=/usr/bin/file
+EGREP=/usr/bin/egrep
+MAKE=/usr/bin/make
+BASENAME=/usr/bin/basename
+TOUCH=/usr/bin/touch
+MKTEMP=/usr/bin/mktemp
+
+MAKEFILE=`${MKTEMP} /tmp/Makefile.XXXXXX`
+INFFILE=`${MKTEMP} /tmp/ascii_inf.XXXXXX`
INFPATH=""
FRMLIST=""
@@ -498,3 +541,4 @@ while : ; do
;;
esac
done
+exit
OpenPOWER on IntegriCloud