User:Trickygnome/Add driver to linux kernel sources

From Gentoo Wiki
Jump to:navigation Jump to:search

1\ Choose *subdirectory* (e.g., drivers/, arch/<architecture>/, sound/).

  • Create directory for your driver: mkdir drivers/mydriver

2\ *Copy* driver source files to the new directory. 3\ Create and edit *Kconfig* file:

config MYDRIVER
 tristate "My custom driver"
 depends on <dependencies>
 help
   Driver description

4\ Create and edit *Makefile*:

obj-$(CONFIG_MYDRIVER) += mydriver.o

5\ *parent Kconfig*:

source "drivers/mydriver/Kconfig"

6\ *Parent Makefile*:

obj-$(CONFIG_MYDRIVER) += mydriver/

7\ Run make menuconfig, select your driver.


FILE install_driver.sh
DRNAME=mydriver
DRIVER_TAR="/usr/share/driver/driver.tar.gz"
CONF_MOD=CONFIG_MYDRIVER
OLD_DRIVER=olddriver
parentMakefile="/usr/src/linux/drivers/net/wireless/realtek/Makefile"
parentKconfig="/usr/src/linux/drivers/net/wireless/realtek/Kconfig"
driverDir="/usr/src/linux/drivers/net/wireless/realtek/${RTL}"

backup_or_restore() {
    local file="$1"
    local backup="${file}.back"

    if [ -e "$backup" ]; then
        cp "$backup" "$file"
    else
        cp "$file" "$backup"
    fi
}
# - Add driver to Kernel source tree
rm -r "$driverDir" &> /dev/null

mkdir "$driverDir"
tar xpf "$DRIVER_TAR" -C "$driverDir"

# - fix line in Makefile of driver
sed -i "s/export ${CONF_MOD} = m/export ${CONF_MOD} = y/" "$driverDir"/Makefile

# - add line to parent Makefile to our folder
backup_or_restore "$parentMakefile"
echo 'obj-$('${CONF_MOD}')		+= '"${DRNAME}/" >> "$parentMakefile"

# - parent Kconfig - add section to Kconfig with path to our Kconfig
backup_or_restore "$parentKconfig"
sed -i '$d' "$parentKconfig" # remove last line
{
    echo "source \"drivers/${DRNAME}/Kconfig\""
    echo
    echo 'endif 
} >> "$parentKconfig"

# - disable conflicting driver
backup_or_restore "/usr/src/linux/drivers/somedrivers/${OLD_DRIVER}/Kconfig"
backup_or_restore "/usr/src/linux/drivers/somedrivers/${OLD_DRIVER}/Makefile"
echo "" > "/usr/src/linux/drivers/somedrivers/${OLD_DRIVER}/Kconfig"
echo "" > "/usr/src/linux/drivers/somedrivers/${OLD_DRIVER}/Makefile"