|Jun 2019 - Aug 2019
||Add Linux driver support for Nvidia GPUDirect and CUDA
Modified an existing Linux DMA driver to add support for GPUDirect. Developed test application to demonstrate performance improvements using the CUDA library and compiler.
|Nov 2018 - Aug 2019
||Embedded firmware for EZ-USB
Developed embedded firmware for an EZ-USB based device (8 bit ARM).
|Jan 2018 - Present
||Development process design and support
Assisted large medical company with build and development processes. Converted from IBM ClearMake to GNU Make. Made substantial reductions in build times.
|Aug 2017 - Present
||Linux and Windows driver development and customer support
Develop and support Linux and Windows device drivers and test applications for FPGA Multichannel DMA IP designs.
|Jun 2017 - Present
||Embedded software developer using embOS RTOS from Segger
Primary software developer and maintainer for a distributed embedded system based on an Atmel SAMR21 SOC (Arm Cortex M0).
|Feb 2007 - Apr 2017
||Ubuntu kernel team technical lead for Canonical, Inc.
Hire and develop a team of kernel engineers for the support of the Ubuntu distribution kernel.
Became expert with Debian packaging (GNU Makefiles) and some areas within the kernel.
|Nov 2014 - Apr 2015
||Linux kernel developer and foundation layer support for a medical instrumentation company.
Maintained and debugged kernel code for an AM35x SOC. Bugs solved included interrupts, time of day, and networking issues. Foundation
support included Python update and recovery code.
|Nov 2013 - Jan 2014
||Linux kernel developer, foundation layer support, and developer environment support for an enterprise A/V company.
Maintained and debugged kernel code for a Marvel ARM SOC. Developed build environment using git, Ubuntu core, and GNU make.
|Sep 2013 - May 2014
||Linux kernel developer, backported CIFS from 3.19 to 3.4 on a PPC networked test and measurement instrument.
Backported the in-kernel CIFS file system driver and VFS layer in order to support the SMB 2.0 specification.
|Aug 2006 - Dec 2006
||JTAG debug application support for a silicon design company.
Develop and support a command line application that allows development engineers to operate a custom
silicon design via JTAG. This required a thorough understanding of JTAG mechanisms and algorithms.
|Mar 2006 - Aug 2006
||Developed Embedded SAS/SATA Disk driver for a multimedia company.
Developed a custom disk device driver for an ARM based product running the MQX embedded kernel.
This project required that SAS/SATA support be integrated into an existing Fibre channel code base.
The SAS controller was an LSI 1068 PCI bus master.
|Jan 2005 - Jan 2006
||Continued as Development Partner at Global Net Inc.
My primary focus at Global Net for the last year has been the development and support of Atheros based 802.11abg
miniPCI adapters in the Linux Netbox platform. The Atheros wireless adapter has allowed Global Net to deploy high speed
back haul links based on 802.11a and 802.11g as well as mixed mode 802.11bg clients. I have also begun focusing
on quality of service issues at layer 2 in
advance of deploying VOIP.
|Jun 2005 - Dec 2005
||Developed Linux Thin Client Wireless Support
I worked for several months for a large manufacturer of thin clients for the banking industry. My job
was to improve the project build environment as well as develop wireless and WPA support using the HostAP
project in conjunction with xsupplicant.
|Dec 2000 - Dec 2004
Development Partner at Global Net Inc.
For the previous 4 years I have been a development partner at Global
Net Inc., a wireless ISP headquartered in Bozeman, MT. I have developed
a native 802.11 wireless product based on Linux using an 802.11
protocol driver that I wrote. The product is known as the NetBox (or NB
for short). I have developed the following for the NetBox:
- Access Point or Client
- The NB can be configured to be an 802.11 client, or an 802.11
Access Point and layer 2 bridge.
- Router or bridge
- The NB can be configured as a NAT and/or standard router.
Alternatively, even the wireless client can be configured as a layer
- I developed a rules based engine to configure the NB as a NAT
router. It supports VLAN, port filtering, bi-directional rate
shaping, DHCP server, NAMED server, and a multiple dwelling unit
philosophy. An MDU configuration can support multiple independent
- IP Tables
- The NB makes full use of Linux IPTABLES. This feature allows
stateful inspection of packets. I have also developed 2 new IPTABLES
filters; FUZZYP and PSDP. FUZZYP limits packet transmit rates on a
per IP subnet basis using a decaying limit threshold. PSDP limits the
number of TCP connections from any one IP subnet over time. PSDP and
FUZZYP are used primarily to combat Denial of Service attacks from
- Embedded Linux
- The NB runs on a variety of CPU architectures. To date the NB is
supported on StrongARM, PPC, Elan x86, and Geode x86. Full support is
included for a variety of FLASH parts (YAFFS, JFFS2, EXT2, and EXT3
file systems) as well as features unique to the platform, e.g., high
resolution timers and hardware watchdog.
- Turnkey Build Environment
- I developed a GNU make based build environment that builds all of
the supported platforms with a single make command. In essence, I
developed my own Linux distribution for these cross compiled
- Field Upgrade Utility
- The ultimate result of the platform builds is a single utility
that contains upgraded binaries for all of the supported platforms.
This utility can upgrade individual files on a unit in order to bring
the unit up to the current software revision. The utility is
multi-threaded and can upgrade multiple units simultaneously.
- User Interface
- The NetBox is configured using Curses based applications. No
command line interaction is required (or allowed). These applications
support computer illiterate field installers as well as tier 3
network diagnostic technicians.
- The NB applications provide extensive diagnostics via the Curses
based UI. Everything from the contents of IPTABLES rules down to the
number and type of 802.11 Management packets transacted by the
- Hardware driver development
- I developed custom Linux device drivers for Prism and Atheros
PCMCIA, Compact Flash, and PCI adapters. Atheros support includes
802.1a, 802.11b, and 802.11g. The 802.11 protocol fully supports all
of these PHY modes.
- Non-development duties
- I have acted as a field service technician installing and
removing wireless units. I have also serviced and constructed radio
towers. These towers consist of wireless units, back haul links,
antennas, managed switches, UPS's, and are typically in remote,
inaccessible locations. I have acted as the manager of operations,
assisting and directing the efforts of field and support personnel. I
have helped develop the software and business processes used by
employees of Global Net. I have also assisted in sales and the
support and development of sales programs.
||Linux Embedded Camera and Web Server
Worked with Rob on an embedded camera platform
using uCLinux on an ARM7 (no MMU). I developed much of the kernel level
stuff as well as customized the build environment. I also back ported the
Compressed RAM File System (CRAMFS) driver from Linux 2.4.3 to the 2.0.38
based uCLinux in order to more efficiently utilize scarce RAM.
||Linux Embedded Wireless MPEG Player
Worked with Dean to develop a prototype voice recognition and wireless
EMPEG player based on embedded Linux. The player would automatically
update its play list as soon as it was within the wireless cell. It also
responded to voice commands for play, stop, etc. Hop over to Dean's page for a different slant on the same
||Linux Wireless LAN Driver
Developed a Linux driver for the Symbol
Technologies IEEE 802.11 Wireless 11Mb PCMCIA adapter.
|Nov 1999 - Oct 2000
||Linux Driver for Telecommunications Adapter
Developed a Linux ISDN driver to support a Brooktrout PRI/BRI family of
telecommunications PCI adapters.
|Sep 1999 - Dec 2000
||Implemented Mobile IP Transport
Developed a custom RFC 2002 Mobile IP client transport and installation
for Windows 9X, Windows NT 4.0, and Windows 2000.
|May 1999 - Dec 2000
||Wireless Product Support
Provided installation, development, and debug support for a wireless
adapter application and driver suite for Windows 9X, Windows NT 4.0, and
||Intermediate NDIS Driver for VPN Product
Customized the TriplePoint Wedge driver and installation for a VPN
product on Windows 9X and Windows NT 4.0.
||Microsoft COM and ActiveX Components
Developed COM and ActiveX components for instrument communications using
Visual Studio 6.0 and Active Template Library 2.0.
||Windows NT 4.0 Audio Driver
Developed User Mode driver and Kernel driver for PCI 4 channel audio
adapter with MIDI and digital interface.
||Windows NT & 95 NDIS 4.0 Miniport Intermediate Driver and Installation Network Device Installer
Developed TpiWedge NDIS Miniport for Windows 95 and Windows NT.
This driver binds between any NDIS protocol and any NDIS MAC driver or
Miniport. By wedging between the Protocol and the MAC, this driver can
filter all incoming and outgoing packets, as well as insert new packets
into these streams. Developed COM interface to access the Miniport driver
via an intermediate DLL. Enhanced Win 9x installation to support Plug 'N
Play devices such as RAS and PCMCIA.
||Windows 98 NDIS 3.0 Miniport and WDM USB Driver
Developed a cooperating NDIS 4.0 Miniport and USB WDM driver to
communicate over an ADSL modem.
||Windows NT 4.0 and Windows 95 Integration Expert
Worked as a driver integration expert on an audio/video conferencing
product. Was also responsible for several kernel mode drivers and VxDs.
Helped develop, support, and debug screen capture and audio drivers.
||Windows NT 4.0 Audio Driver
Developed User Mode driver and Kernel driver for ISA 2 channel audio
adapter with MIDI.
||Windows 95 and Windows NT 4.0 binary compatible NDIS 4.0 Miniport.
Developed an NDIS ethernet Miniport driver for a smart encryption
||Microsoft Broadcast PC
Developed NDIS drivers for the Microsoft Broadcast PC initiative. The
drivers supported satellite receivers over PCI and USB. Also developed
replacement Broadcast Receiver Transport for direct I/O outside of the
network transports. Developed MPEG disassembly/reassembly code to acquire
encapsulated IP packets.
||Realtime QNX Driver
Developed a real-time QNX driver for a data acquisition card. The driver
passed data to a processor application using shared memory for large
buffers, and messages for smaller buffers.
||System Services Module for Trillium Q93.B ATM Protocol Stack
Developed a system services module for the Trillium ATM protocol stacks.
Also provided integration support, LAN emulation debugging, and project
||NDIS Driver for Fibre Channel EISA and PCI Adapter
Developed NDIS driver for a Gigabit Fibre Channel adapter family.
Provided extensive performance support. Implemented IP over Fibre Channel
with ARP support.
||Windows NT 3.51 ATM Driver
Developed a PVC ATM over IP driver for a PCI ATM adapter. The driver
performed traffic shaping and IP encapsulation.
||Windows NT, Windows 95 NDIS Full MAC for EISA FDDI
Developed NDIS driver with full FDDI ring protocol support. Also
developed dual homing support and eventually added PCI bus support. Two
years later I converted this same driver from Full MAC to Miniport.
||NDIS 2 and NDIS 3 Drivers
Worked with a development team on a suite of adapters. During this period
I developed NDIS 2 and 3 drivers for several Token Ring and Ethernet
Developed high speed serial interface to an i960 based firmware monitor.
Used RS422 to achieve 115K Baud and higher.
||Embedded Firmware Printer Driver
Developed a real-time driver for a thermal printer in an
||Embedded Firmware O/S and Support Components
Developed an operating system and support components for a consumer
Founded by Bill Campbell, Rob DeVoe, Tim Gardner, and Larry Hattery.
|Nov 1988 - Aug 1990
||DWB Associates Inc. Senior Consultant
Developed numerous NDIS 2 drivers. Extensive experience with DOS,
Windows, and OS/2 device drivers. Two years in hell.
|Aug 1987 - Oct 1988
||Sequent Computer Systems
Developed embedded firmware for a system services module on a
multiprocessor platform. Used VRTX as O/S, developed bulk of firmware
using C++. I learned a bunch about multi-threaded, multi-processor
|Apr 1984 - Aug 1987
||Tektronix Inc. Software Engineer II
Developed O/S and firmware for an Oscilloscope 80186 based digitizer. I
worked for Lorne Bechtel who was perhaps the best manager I could have
lucked upon. In retrospect, he is the best guy I've ever worked for.