#!/bin/bash #set -x # # New files of CAN device interface and drivers # PATCH_DEVICE_NAME=socketcan-device.diff PATCH_DEVICE_FILES="\ include/linux/can/dev.h \ drivers/net/can/dev.c" PATCH_SYSFS_NAME=socketcan-sysfs.diff PATCH_SYSFS_FILES="\ drivers/net/can/sysfs.c \ drivers/net/can/sysfs.h" PATCH_DRIVER_SJA1000_NAME=socketcan-driver-sja1000.diff PATCH_DRIVER_SJA1000_FILES="\ drivers/net/can/sja1000/sja1000.c \ drivers/net/can/sja1000/sja1000.h " PATCH_DRIVER_SJA1000_EMS_PCI_NAME=socketcan-driver-sja1000-ems-pci.diff PATCH_DRIVER_SJA1000_EMS_PCI_FILES="\ drivers/net/can/sja1000/ems_pci.c" PATCH_DRIVER_SJA1000_IXXAT_PCI_NAME=socketcan-driver-sja1000-ixxat-pci.diff PATCH_DRIVER_SJA1000_IXXAT_PCI_FILES="\ drivers/net/can/sja1000/ixxat_pci.c" PATCH_DRIVER_SJA1000_KVASER_PCI_NAME=socketcan-driver-sja1000-kvaser-pci.diff PATCH_DRIVER_SJA1000_KVASER_PCI_FILES="\ drivers/net/can/sja1000/kvaser_pci.c" PATCH_DRIVER_SJA1000_PIPCAN_NAME=socketcan-driver-sja1000-pipcan.diff PATCH_DRIVER_SJA1000_PIPCAN_FILES="\ drivers/net/can/sja1000/pipcan.c" PATCH_DRIVER_SJA1000_PCM027_NAME=socketcan-driver-sja1000-pcm027.diff PATCH_DRIVER_SJA1000_PCM027_FILES="\ drivers/net/can/sja1000/pcm027.c" PATCH_DRIVER_SJA1000_PEAK_PCI_NAME=socketcan-driver-sja1000-peak-pci.diff PATCH_DRIVER_SJA1000_PEAK_PCI_FILES="\ drivers/net/can/sja1000/peak_pci.c" PATCH_DRIVER_MSCAN_NAME=socketcan-driver-mscan.diff PATCH_DRIVER_MSCAN_FILES="\ drivers/net/can/mscan/mscan.c \ drivers/net/can/mscan/mscan.h \ drivers/net/can/mscan/mpc52xx_can.c" # # Old files of CAN core and VCAN driver # PATCH_CORE_NAME=socketcan-core.diff PATCH_CORE_FILES="\ include/linux/can.h \ include/linux/can/raw.h \ include/linux/can/bcm.h \ include/linux/can/core.h \ include/linux/can/error.h \ net/can/af_can.c \ net/can/af_can.h \ net/can/proc.c \ net/can/raw.c \ net/can/bcm.c" PATCH_DRIVER_VCAN_NAME=socketcan-driver-vcan.diff PATCH_DRIVER_VCAN_FILES="\ drivers/net/can/vcan.c" usage() { echo "usage: $0 " >&2 exit 1 } # # Main # HERE=$(pwd) SRC_DIR=$HERE/kernel/2.6 SCR_DIR=$HERE/`dirname $0` PATCH_DIR=$SCR_DIR/patches HDR_DIR=$SCR_DIR/headers [ ! -e $1/MAINTAINERS ] && usage KERNEL_DIR=$1 if [ $# -gt 1 ]; then DEST_DIR=$2 else DEST_DIR=${HERE}/socketcan-patches fi echo $DEST_DIR if [ -e $DEST_DIR ]; then echo "error: $DEST_DIR does already exist, exiting" >&2 exit 1 fi # determine kernel version KERNEL_MAJOR=$(grep "^VERSION =" ${KERNEL_DIR}/Makefile | sed -e "s/[ \t]//g" | sed -e "s/VERSION=//g") KERNEL_MINOR=$(grep "^PATCHLEVEL =" ${KERNEL_DIR}/Makefile | sed -e "s/[ \t]//g" | sed -e "s/PATCHLEVEL=//g") KERNEL_MICRO=$(grep "^SUBLEVEL =" ${KERNEL_DIR}/Makefile | sed -e "s/[ \t]//g" | sed -e "s/SUBLEVEL=//g") KERNEL_EXTRA=$(grep "^EXTRAVERSION =" ${KERNEL_DIR}/Makefile | sed -e "s/[ \t]//g" | sed -e "s/EXTRAVERSION=//g") mkdir -p $DEST_DIR export QUILT_PATCHES=$DEST_DIR echo "Creating patches against kernel in $KERNEL_DIR" num=0 for patch in \ DEVICE \ SYSFS \ DRIVER_SJA1000 \ DRIVER_SJA1000_EMS_PCI \ DRIVER_SJA1000_IXXAT_PCI \ DRIVER_SJA1000_KVASER_PCI \ DRIVER_SJA1000_PIPCAN \ DRIVER_SJA1000_PCM027 \ DRIVER_SJA1000_PEAK_PCI \ DRIVER_MSCAN \ DRIVER_VCAN \ CORE do name=PATCH_${patch}_NAME files=PATCH_${patch}_FILES append=PATCH_${patch}_APPEND num=$((num + 1)) [ -z "${!name}" ] && continue patch_name=$(printf "%02i" $num)-${!name} echo "${patch_name}..." cd ${KERNEL_DIR} quilt new ${patch_name} > /dev/null for file in ${!files}; do quilt add ${file} > /dev/null mkdir -p $(dirname ${KERNEL_DIR}/${file}) ${HERE}/strip-src \ -v ${KERNEL_MAJOR}.${KERNEL_MINOR}.${KERNEL_MICRO} \ -i \ ${SRC_DIR}/${file} > ${KERNEL_DIR}/${file} done file=$PATCH_DIR/$patch.diff if [ -r $file ]; then ok=n patch -p1 --dry-run < $file > /dev/null && ok=y if [ $ok = y ]; then quilt add `grep "Index: " $file | cut -d"/" -f 2-` > /dev/null patch -p1 < $file else echo "Couldn't apply patch $file, please fix!" fi fi quilt refresh --diffstat > /dev/null file=$HDR_DIR/$patch.txt if [ -r $file ]; then quilt header --strip-trailing-whitespace -r < $file > /dev/null fi done quilt pop -a > /dev/null # # Check patches and add patch description # file=$DEST_DIR/checkpatch.log echo "Checking patches, please inspect $file" echo "Linux coding style issues reported by checkpatch.pl" > $file for patch in $DEST_DIR/*.diff; do echo >> $file echo "***************************************************" >> $file echo "$patch" >> $file echo >> $file ${KERNEL_DIR}/scripts/checkpatch.pl ${patch} >> $file done