From a33ae91627f1dba54d785056ee2ea6541adfc8fa Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Wed, 21 May 2008 16:22:34 +0000 Subject: modules build now git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@4318 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- build_tools/genmodconf | 107 ++++++++++++++++++++++++++++++++++++ build_tools/genudevrules | 35 ++++++++++++ build_tools/make_firmware_object.in | 11 ++++ build_tools/make_svn_branch_name | 61 ++++++++++++++++++++ build_tools/make_tree | 8 +++ build_tools/make_version | 56 +++++++++++++++++++ build_tools/make_version_h | 9 +++ build_tools/menuselect-deps.in | 1 + build_tools/test_kernel_git | 80 +++++++++++++++++++++++++++ build_tools/uninstall-modules | 41 ++++++++++++++ build_tools/zaptel_svn_tarball | 90 ++++++++++++++++++++++++++++++ 11 files changed, 499 insertions(+) create mode 100755 build_tools/genmodconf create mode 100755 build_tools/genudevrules create mode 100755 build_tools/make_firmware_object.in create mode 100755 build_tools/make_svn_branch_name create mode 100755 build_tools/make_tree create mode 100755 build_tools/make_version create mode 100755 build_tools/make_version_h create mode 100644 build_tools/menuselect-deps.in create mode 100755 build_tools/test_kernel_git create mode 100755 build_tools/uninstall-modules create mode 100755 build_tools/zaptel_svn_tarball (limited to 'build_tools') diff --git a/build_tools/genmodconf b/build_tools/genmodconf new file mode 100755 index 0000000..ada453e --- /dev/null +++ b/build_tools/genmodconf @@ -0,0 +1,107 @@ +#!/bin/sh + +# this script makes an attempt to build a proper set of rules +# for loading the Zaptel modules and automatically running ztcfg +# +# it accepts three parameters: +# the kernel major version being targeted (either linux24 or linux26) +# the root prefix to be used for finding/creating the files +# the list of module names being installed +# +# the process is as follows: +# +# for linux24, the file can be located either at /etc/modules.conf (combined +# with all other rules) or in /etc/modutils/zaptel (only the Zaptel rules) +# +# for linux26, the file can be located at /etc/modprobe.conf (combined with all +# other rules), /etc/modprobe.d/zaptel (Zaptel only) or /etc/modules.d/zaptel +# (Zaptel only) +# +# when the file is Zaptel rules only, then we don't preserve the existing +# contents of the file; the system administrator can put desired options and +# overrides in a separate file with a name that appears earlier in the sort +# order, so there is no need to edit the file produced by this script +# +# when the file is combined with all other rules, then we make a backup +# of it and remove all the old Zaptel rules we can find, replacing them with +# new ones +# +# in addition, for linux26, versions of module-init-tools 3.2.0 and later +# have the ability to pass module parameters specified on the modprobe command +# line to commands in 'install' rules, thus keeping them from being lost, so +# we try to determine what version is installed and take advantage of that + +if [ "${1}" = "linux24" ]; then + if [ -d ${2}/etc/modutils ]; then + target=${2}/etc/modutils/zaptel + elif [ -f ${2}/etc/modules.conf ]; then + target=${2}/etc/modules.conf + combined=1 + else + echo No suitable location for module rules can be found... exiting. + exit 1 + fi +elif [ "${1}" = "linux26" ]; then + toolver=`/sbin/modprobe --version 2>/dev/null| awk '{print $3}' | cut -d. -f2 | cut -d- -f1` + if [ ${toolver} -ge 2 ]; then + cmdopts=\$CMDLINE_OPTS + fi + if [ -d ${2}/etc/modprobe.d ]; then + target=${2}/etc/modprobe.d/zaptel + elif [ -d ${2}/etc/modules.d ]; then + target=${2}/etc/modules.d/zaptel + elif [ -f ${2}/etc/modprobe.conf ]; then + target=${2}/etc/modprobe.conf + combined=1 + elif [ -f ${2}/etc/conf.modules ]; then + target=${2}/etc/conf.modules + combined=1 + else + echo No suitable location for module rules can be found... exiting. + exit 1 + fi +else + echo Unknown kernel build version requested... exiting. + exit 1 +fi + +if [ -n "${combined}" ]; then + if [ -f ${target} ]; then + mv ${target} ${target}.bak + cat ${target}.bak | grep -v "alias char-major-250" | grep -v "alias char-major-196" > ${target} + fi +else + if [ -f ${target} ]; then + mv ${target} ${target}.bak + fi + echo "# automatically generated file; do not edit" > ${target} +fi + +echo Building ${target}... + +if [ "${1}" = "linux24" ]; then + for mod in ${3}; do + if ! grep -q "post-install ${mod} " ${target}; then + echo "post-install ${mod} /sbin/ztcfg" >> ${target} + fi + done +elif [ "${1}" = "linux26" ]; then + for mod in ${3}; do + if ! grep -q "install ${mod} " ${target}; then + echo "install ${mod} /sbin/modprobe --ignore-install ${mod} ${cmdopts} && /sbin/ztcfg" >> ${target} + fi + done +fi + +if [ -z "${combined}" ]; then + echo "***" + echo "*** WARNING:" + echo "*** If you had custom settings in ${target}," + echo "*** they have been moved to ${target}.bak." + echo "***" + echo "*** In the future, do not edit ${target}, but" + echo "*** instead put your changes in another file" + echo "*** in the same directory so that they will not" + echo "*** be overwritten by future Zaptel updates." + echo "***" +fi diff --git a/build_tools/genudevrules b/build_tools/genudevrules new file mode 100755 index 0000000..17e1f90 --- /dev/null +++ b/build_tools/genudevrules @@ -0,0 +1,35 @@ +#!/bin/sh + +ver=`udevinfo -V | cut -f3 -d" "` + +if [ -z "${ver}" ]; then + # nobody has that old version, anyway. + ver=54 +fi + +# udev versions prior to 055 use a single '=' for matching key values +# udev versions 055 and later support '==' for that purpose, and versions +# beyond 092 will probably make it mandatory +# +# very old versions of udev required naming rules and permissions rules to be +# in separate files, but it's not clear at what version number that changed + +if [ ${ver} -gt 54 ]; then + match="==" +else + match="=" +fi + +cat <" +echo +echo "" +cat zaptel.xml +cat firmware/firmware.xml +echo "" diff --git a/build_tools/make_version b/build_tools/make_version new file mode 100755 index 0000000..d710ffa --- /dev/null +++ b/build_tools/make_version @@ -0,0 +1,56 @@ +#!/bin/sh + +if [ -f ${1}/.version ]; then + cat ${1}.version +elif [ -f ${1}/.svnrevision ]; then + echo SVN-`cat ${1}/.svnbranch`-r`cat ${1}/.svnrevision` +elif [ -d .svn ]; then + PARTS=`LANG=C svn info ${1} | grep URL | awk '{print $2;}' | sed -e s:^.*/svn/zaptel/:: | sed -e 's:/: :g'` + BRANCH=0 + TEAM=0 + + REV=`svnversion -c ${1} | cut -d: -f2` + + if [ "${PARTS}" = "trunk" ] + then + echo SVN-'trunk'-r${REV} + exit 0 + fi + + for PART in $PARTS + do + if [ ${BRANCH} != 0 ] + then + RESULT="${RESULT}-${PART}" + break + fi + + if [ ${TEAM} != 0 ] + then + RESULT="${RESULT}-${PART}" + continue + fi + + if [ "${PART}" = "branches" ] + then + BRANCH=1 + RESULT="branch" + continue + fi + + if [ "${PART}" = "tags" ] + then + BRANCH=1 + RESULT="tag" + continue + fi + + if [ "${PART}" = "team" ] + then + TEAM=1 + continue + fi + done + + echo SVN-${RESULT##-}-r${REV} +fi diff --git a/build_tools/make_version_h b/build_tools/make_version_h new file mode 100755 index 0000000..01d9c31 --- /dev/null +++ b/build_tools/make_version_h @@ -0,0 +1,9 @@ +#!/bin/sh +cat << END +/* + * version.h + * Automatically generated + */ +#define ZAPTEL_VERSION "${ZAPTELVERSION}" + +END diff --git a/build_tools/menuselect-deps.in b/build_tools/menuselect-deps.in new file mode 100644 index 0000000..1c26316 --- /dev/null +++ b/build_tools/menuselect-deps.in @@ -0,0 +1 @@ +LIBNEWT=@PBX_LIBNEWT@ diff --git a/build_tools/test_kernel_git b/build_tools/test_kernel_git new file mode 100755 index 0000000..59c196d --- /dev/null +++ b/build_tools/test_kernel_git @@ -0,0 +1,80 @@ +#!/bin/sh + +set -e + +GIT_URL=git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git +CONF_FILE=build_tools/git_test.conf + +usage() { + me=`basename $0` + echo "$me: test building Zaptel vs. kernel from git" + echo "Usage:" + echo " $me checkout Pull a kernel version into " + echo " $me update Update (pull) the kernel tree." + echo " $me setver Set the kernel version" + echo " $me test Test-build" + echo "" + echo " $me versions [pattern] List available versions." +} + +# Set a variable in $CONF_FILE +# The format of CONF_FILE is assumed to be: +# VAR=value +# in shell syntax. "value" may be quoted. +# "value should not contain a '|' character. +set_var() { + var="$1" + val="$2" + if grep -q "^$var=" $CONF_FILE 2>/dev/null; then + sed -i -e "s|^$var=.*|$var=\"$val\"|" $CONF_FILE + else + echo "$var=\"$val\"" >>$CONF_FILE + fi +} + +if [ -r "$CONF_FILE" ]; then . "$CONF_FILE"; fi + +if echo "$CONF_FILE" | grep -qv '^/'; then + # make CONF_FILE an absolute path: + CONF_FILE="$PWD/$CONF_FILE" +fi + +command="$1" + +case "$command" in + checkout) + kernel_dir="$2" + cd "$kernel_dir" + git clone $GIT_URL + set_var kernel_dir "$kernel_dir/linux-2.6" + ;; + update) + cd "$kernel_dir" + git pull + ;; + versions) + cd "$kernel_dir" + git tag -l $2 | cut -c2- + ;; + setver) + kernel_ver="$2" + tag="v$kernel_ver" + cd "$kernel_dir" + git-reset --hard "$tag" + make defconfig prepare + set_var kernel_ver "$kernel_ver" + ;; + test) + # you can pass extra parameters to the make command in + # two ways: + # 1. Set th value of MAKE_PARAMS in git_test.conf . + # 2. Any extra command-line parameter. + shift + make KSRC="$kernel_dir" KVERS=$kernel_ver $MAKE_PARAMS "$@" + ;; + *) + echo "$0: no such command $command. Aborting." + usage + exit 1 + ;; +esac diff --git a/build_tools/uninstall-modules b/build_tools/uninstall-modules new file mode 100755 index 0000000..a654c21 --- /dev/null +++ b/build_tools/uninstall-modules @@ -0,0 +1,41 @@ +#!/bin/sh +# uninstall-modules +# +# Remove all the modules passed in on the command line from the modules +# directory. This script is called by the makefile. + +KERNEL_MODULES_DIR=$1 +shift +MODULES="$*" + +usage() { + echo "$0: Used to delete kernel modules from the modules directory." + echo "" + echo "Usage:" + echo " $0 MODULES_BASE_DIR mod1 [mod2 [...]]" + echo "" + echo " MODULES_BASE_DIR - typically /lib/modules/KVERS" + echo " modN - (optionally partial) module name to remove." +} + +if [ -z "$KERNEL_MODULES_DIR" ]; then + echo "Missing kernel module directory." + usage + exit 1; +fi + +if [ -z "$MODULES" ]; then + echo "Missing one or more modules to delete." + usage + exit 1; +fi +for mod in $MODULES; do + BASE=`basename $mod` + for file in `cat $KERNEL_MODULES_DIR/modules.dep | cut -d : -f 1 | grep "$BASE$"`; do + if [ -e "$file" ]; then + #echo "Deleting $file." + rm -f $file + fi + done +done +exit 0 diff --git a/build_tools/zaptel_svn_tarball b/build_tools/zaptel_svn_tarball new file mode 100755 index 0000000..38a6ce8 --- /dev/null +++ b/build_tools/zaptel_svn_tarball @@ -0,0 +1,90 @@ +#!/bin/sh + +# upload_zaptel: upload a zaptel tarball to updates.xorcom.com +# + +set -e + +BRANCH_NAME=1.4 +REV=HEAD +ZAPTEL_BASE=http://svn.digium.com/svn/zaptel +TARBALLS_DIR=$PWD + +me=`basename $0` + +say() { + echo "$me: $@" +} + +usage() { + echo >&2 "$0: Generate snapshot from Zaptel SVN" + echo >&2 ' ($Id$)' + echo >&2 "" + echo >&2 "$0 [-r REV] [-2] [-s]" + echo >&2 "$0 <-h | --help>: This message" + echo >&2 "" + echo >&2 "Options:" + echo >&2 " -2 --zap12: Use Asterisk 1.2. Implies -u." + echo >&2 " -r --rev REV: extract xpp-zaptel from this revision ($REV)." + echo >&2 " -s --show: Just show versions. Do nothing" + +} + +opt_showonly=no + +options=`getopt -o 2hr:s --long zap12,help,rev:,revision:,show -- "$@"` +if [ $? != 0 ] ; then echo >&2 "Terminating..." ; exit 1 ; fi + +# Note the quotes around `$TEMP': they are essential! +eval set -- "$options" + +while true ; do + case "$1" in + -2|--zap12) BRANCH_NAME=1.2;; + -s|--show) opt_showonly=yes ;; + -r|--rev|--revision) REV="$2"; shift ;; + -h|--help) usage; exit 0;; + --) shift ; break ;; + esac + shift; +done + +BRANCH=branches/$BRANCH_NAME +ZAPTEL_URL=$ZAPTEL_BASE/$BRANCH + +set -e + +# Get the name of the "previous version" for this release. +# The idea is to look at the latest tag for that branhch. Tags are +# global, and hence we filter tag names by branch name. +# +# Note: this strips any minor version number. +# e.g: if last releast was 1.4.5.1, this will still return 1.4.5 . Here +# we rely on the fact that the revision number will be added. +zap_ver=`svn ls -r $REV $ZAPTEL_BASE/tags | grep "^$BRANCH_NAME" \ + | sed -e "s/\($BRANCH_NAME\.[0-9]\+\)[/.-].*/\1/" \ + | sort -nu -t . -k 3 | tail -n 1` + +real_rev=`svn info -r $REV $ZAPTEL_URL \ + | awk '/^Last Changed Rev: /{print $4}'` + +ver_full="$zap_ver.9.svn.$real_rev" +tar_name="zaptel-$ver_full" +tar_ball_full="$TARBALLS_DIR/$tar_name.tar.gz" + +say "Version: $ver_full (ver: $zap_ver, rev: $real_rev)" +say "Tarball: $tar_ball_full" + +if [ "$opt_showonly" = 'yes' ]; then + exit 0; +fi + +ZAP_CHECKOUT_DIR=`mktemp -d zaptel_checkout_dir_XXXXXX` + +# Package a tarball from the subversion, using 'make dist': +svn export -q -r $REV $ZAPTEL_URL $ZAP_CHECKOUT_DIR/$tar_name +echo "$ver_full" >$ZAP_CHECKOUT_DIR/$tar_name/.version +tar cz -C $ZAP_CHECKOUT_DIR -f $tar_ball_full $tar_name + +rm -rf $ZAP_CHECKOUT_DIR + -- cgit v1.2.3