Magellan Linux

Diff of /trunk/virtualbox/virtualbox-config.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1683 by niro, Sat Mar 3 02:48:55 2012 UTC revision 1684 by niro, Sun Mar 4 11:32:46 2012 UTC
# Line 11  VBOXMODULE=vboxdrv Line 11  VBOXMODULE=vboxdrv
11  VBOXNETMODULE=vboxnetflt  VBOXNETMODULE=vboxnetflt
12  VBOXNETADPMODULE=vboxnetadp  VBOXNETADPMODULE=vboxnetadp
13  VBOXPCIMODULE=vboxpci  VBOXPCIMODULE=vboxpci
14  KERNELMODULES="${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} ${VBOXPCIMODULE}"  KERNELMODULES=( "${VBOXMODULE}" "${VBOXNETMODULE}" "${VBOXNETADPMODULE}" "${VBOXPCIMODULE}" )
15    
16  COLRED="\033[1;6m\033[31m"  COLRED="\033[1;6m\033[31m"
17  COLGREEN="\033[1;6m\033[32m"  COLGREEN="\033[1;6m\033[32m"
# Line 26  fi Line 26  fi
26    
27  die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }  die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }
28  mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; }  mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; }
29    usage()
30    {
31     echo "Usage: $(basename $0 .sh) [opts]"
32     echo "Options are:"
33     echo " --kernel-version - build modules for given kernel version not current"
34     echo " --kernel-sources - use kernel sources different from default path"
35     echo " --force          - force a rebuild of the kernel modules even if they exist"
36     echo " --verbose        - be verbose while building the modules"
37     echo " --help           - show this help"
38     exit
39    }
40    
41  # must be root  # must be root
42  [[ $(id -u) != 0 ]] && die "You must be r00t!"  [[ $(id -u) != 0 ]] && die "You must be r00t!"
# Line 36  do Line 47  do
47   case $1 in   case $1 in
48   --kernel-version) shift; KERNEL_VERSION="$1" ;;   --kernel-version) shift; KERNEL_VERSION="$1" ;;
49   --kernel-sources) shift; KERNEL_SOURCES="$1" ;;   --kernel-sources) shift; KERNEL_SOURCES="$1" ;;
50     --force) FORCED_REBUILD="1" ;;
51     --verbose) VERBOSE="1" ;;
52     --help) usage ;;
53   esac   esac
54   shift   shift
55  done  done
# Line 43  done Line 57  done
57  # some sane defaults  # some sane defaults
58  [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"  [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"
59  [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source"  [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source"
60    [[ -z ${FORCED_REBUILD} ]] && FORCED_REBUILD="0"
61    [[ -z ${VERBOSE} ]] && VERBOSE="0"
62    [[ ${VERBOSE} = 0 ]]  && makequiet="-s"
63    
64  mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..."  mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..."
65    
66  # check module version and recompile if it doesen't fit else break here  # check module version and recompile if it doesen't fit else break here
67  compile="yes"  compile="yes"
68  for module in ${KERNELMODULES}  for module in ${KERNELMODULES[*]}
69  do  do
70   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
71   then   then
72   myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:")   myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:")
73   if [[ ${VBOXVERSION} = ${myver} ]]   if [[ ${VBOXVERSION} = ${myver} ]] && [[ ${FORCED_REBUILD} = 0 ]]
74   then   then
75   compile="no"   compile="no"
76   fi   fi
77     fi
78  done  done
79    
80  for module in ${KERNELMODULES}  # try to unload the modules in reverse order to honor dependencies
81    count=${#KERNELMODULES[*]}
82    for (( i=count-1; i>=0; i-- ))
83  do  do
84   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${KERNELMODULES[${i}]}.${VBOXMODEXT} ]]
85   then   then
86   # try to unload the modules   if [[ -n $(grep "${KERNELMODULES[${i}]} " /proc/modules 2> /dev/null) ]]
  if [[ -n $(grep "${module} " /proc/modules 2> /dev/null) ]]  
87   then   then
88   mecho "Unloading ${module} module ..."   mecho "Unloading ${KERNELMODULES[${i}]} module ..."
89   modprobe -r ${module}   modprobe -r ${KERNELMODULES[${i}]}
90   fi   fi
91   fi   fi
92  done  done
# Line 79  then Line 98  then
98   die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."   die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."
99   fi   fi
100    
101   for module in ${KERNELMODULES}   for module in ${KERNELMODULES[*]}
102   do   do
103   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
104   then   then
# Line 89  then Line 108  then
108   done   done
109    
110   # compile the modules   # compile the modules
111   pushd ${INSTALL_DIR}/src   pushd ${INSTALL_DIR}/src > /dev/null
112   for module in ${KERNELMODULES}   for module in ${KERNELMODULES[*]}
113   do   do
114   make -C ${module} KBUILD_VERBOSE=1 clean || die "mod-compile ${module}"   mecho "Compiling ${module} module ..."
115     make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} clean || die "mod-compile ${module}"
116    
117   # need some symver from vboxmodule (must be run after clean!)   # need some symver from vboxmodule (must be run after clean!)
118   if [[ ${module} = ${VBOXNETMODULE} ]] ||   if [[ ${module} = ${VBOXNETMODULE} ]] ||
# Line 102  then Line 122  then
122   [[ -f ${VBOXMODULE}/Module.symvers ]] && cp ${VBOXMODULE}/Module.symvers ${module}   [[ -f ${VBOXMODULE}/Module.symvers ]] && cp ${VBOXMODULE}/Module.symvers ${module}
123   fi   fi
124    
125   make -C ${module} KBUILD_VERBOSE=1 || die "mod-compile ${module}"   make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} || die "mod-compile ${module}"
126    
127   # install the modules   # install the modules
128   install -d /lib/modules/${KERNEL_VERSION}/misc   install -d /lib/modules/${KERNEL_VERSION}/misc
129   install -m0644 ${module}/${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"   install -m0644 ${module}/${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"
130     done
131     # do no clean before all modules are build, or required symbols and objects get deleted
132     for module in ${KERNELMODULES[*]}
133     do
134   # clean up   # clean up
135   make -C ${module} KBUILD_VERBOSE=1 clean || die "mod-compile ${module}"   make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} clean || die "mod-compile ${module}"
136   done   done
137   popd   popd > /dev/null
138    
139   # calc module dependencies   # calc module dependencies
140   mecho "Calculating module dependencies ..."   mecho "Calculating module dependencies ..."
# Line 128  fi Line 151  fi
151  # load the module  # load the module
152  if [[ x$(uname -r) = x${KERNEL_VERSION} ]]  if [[ x$(uname -r) = x${KERNEL_VERSION} ]]
153  then  then
154   for module in ${KERNELMODULES}   for module in ${KERNELMODULES[*]}
155   do   do
156   mecho "Loading kernel-module ${module} ..."   mecho "Loading kernel-module ${module} ..."
157   modprobe ${module}   modprobe ${module}

Legend:
Removed from v.1683  
changed lines
  Added in v.1684