slitaz-tools annotate tinyutils/tazhw @ rev 304

hwconf: fix --get-firmware when started from box
author Christophe Lincoln <pankso@slitaz.org>
date Thu Feb 26 14:17:24 2009 +0100 (2009-02-26)
parents 44848c607076
children 67d086ba0452
rev   line source
pankso@299 1 #!/bin/sh
pankso@299 2 #
pankso@299 3 # SliTaz Hardware configuration tool. Auto-detect and configure in a
pankso@299 4 # simple way all PCI, PCMCIA and USB devices. Some Wireless Adapaters
pankso@299 5 # need non-free firmware not installed by default, users must use the
pankso@299 6 # option --get-firmware to force installation. GUI use GTKdialog, is
pankso@299 7 # called by arg such as all box functions.
pankso@299 8 #
pankso@299 9 # (c) 2009 SliTaz GNU/Linux - GNU gpl v3
pankso@299 10 #
pankso@299 11
pankso@299 12 usage()
pankso@299 13 {
pankso@299 14 echo -e "\nSliTaz Hardware configuration\n
pankso@299 15 \033[1mUsage: \033[0m `basename $0` [command] [--option]
pankso@299 16 \033[1mCommands: \033[0m\n
pankso@299 17 usage Print this short usage.
pankso@299 18 box Start in graphical mode.
pankso@299 19 init Used at boot time to configure devices.
pankso@299 20 detect-pci Detect all PCI devices.
pankso@299 21 detect-usb Detect all USB devices.
pankso@299 22 detected-modules List all detected Kernel modules.
pankso@299 23
pankso@299 24 \033[1mOptions: \033[0m\n
pankso@299 25 --get-firmware Get and install non-free firmware (PCI and USB).\n"
pankso@299 26 }
pankso@299 27
pankso@299 28 # Check if user is root to install, or remove packages.
pankso@299 29 check_root()
pankso@299 30 {
pankso@299 31 if test $(id -u) != 0 ; then
pankso@299 32 echo -e "\nYou must be root to run `basename $0` with this option."
pankso@299 33 echo -e "Please use 'su' and root password to become super-user.\n"
pankso@299 34 exit 0
pankso@299 35 fi
pankso@299 36 }
pankso@299 37 box_check_root()
pankso@299 38 {
pankso@299 39 if test $(id -u) != 0 ; then
pankso@299 40 exec subox tazhw box
pankso@299 41 exit 0
pankso@299 42 fi
pankso@299 43 }
pankso@299 44
pankso@299 45 check_firmware()
pankso@299 46 {
pankso@299 47 if [ -x /usr/bin/get-$mod-firmware ]; then
pankso@299 48 if [ ! -d /var/lib/tazpkg/installed/$mod-firmware ]; then
pankso@299 49 # We need and active connection to install firmware and we
pankso@299 50 # only install firmware if specified from cmdline.
pankso@299 51 if ifconfig | grep -q "inet addr"; then
pankso@299 52 # Ensure module is not loaded and get files.
pankso@299 53 if [ "$firmware" == "get" ]; then
pankso@299 54 rmmod $mod 2>/dev/null
pankso@299 55 get-$mod-firmware
pankso@299 56 else
pankso@299 57 echo "* Use --get-firmware option to install missing files."
pankso@299 58 fi
pankso@299 59 else
pankso@299 60 echo "* No active connection to get and install firmware."
pankso@299 61 fi
pankso@299 62 else
pankso@299 63 echo "> Firmware in use: $mod-firmware"
pankso@299 64 fi
pankso@299 65 fi
pankso@299 66 }
pankso@299 67
pankso@299 68 load_module()
pankso@299 69 {
pankso@299 70 if ! lsmod | grep -q "^$mod"; then
pankso@299 71 if [ -f "$(modprobe -l $mod)" ]; then
pankso@299 72 echo " Loading Kernel module: $mod"
pankso@299 73 /sbin/modprobe $mod
pankso@299 74 else
pankso@299 75 echo "! Missing module: $mod"
pankso@299 76 fi
pankso@299 77 else
pankso@299 78 echo "> Found module: $mod"
pankso@299 79 fi
pankso@299 80 # Add module to rcS.conf and avoid duplication.
pankso@299 81 . /etc/rcS.conf
pankso@299 82 if ! echo "$LOAD_MODULES" | grep -q "$mod"; then
pankso@299 83 sed -i s/"LOAD_MODULES=\"$LOAD_MODULES\""/"LOAD_MODULES=\"$LOAD_MODULES $mod\""/ \
pankso@299 84 /etc/rcS.conf
pankso@299 85 fi
pankso@299 86 }
pankso@299 87
pankso@299 88 # Retry a Ethernet connection with DHCP after detection (used at boot).
pankso@299 89 # TODO: try a wireless connection but stop eth0 to avoid conflict.
pankso@299 90 start_network()
pankso@299 91 {
pankso@299 92 if ifconfig -a | grep -q "eth0"; then
pankso@299 93 if [ ! -f /var/run/udhcpc.eth0.pid ]; then
pankso@299 94 echo "Starting udhcpc client on: eth0... "
pankso@299 95 /sbin/udhcpc -b -i eth0 -p /var/run/udhcpc.eth0.pid
pankso@299 96 fi
pankso@299 97 fi
pankso@299 98 }
pankso@299 99
pankso@299 100 # Detect PCI devices and load kernel module only at first boot,
pankso@299 101 # in LiveCD mode or with the command 'detect-pci'.
pankso@299 102 detect_pci_devices()
pankso@299 103 {
pankso@299 104 if [ ! -s /var/lib/detected-modules ]; then
pankso@299 105 . /etc/rcS.conf
pankso@299 106 # We need module_name to match output of lsmod.
pankso@299 107 list=`lspci -k | grep "modules" | cut -d ":" -f 2 | sed s/-/_/g`
pankso@299 108 echo "$list" > /var/lib/detected-modules
pankso@299 109 for mod in $list
pankso@299 110 do
pankso@299 111 check_firmware
pankso@299 112 load_module
pankso@299 113 done
pankso@299 114 # yenta_socket = laptop
pankso@299 115 if `lsmod | grep -q "yenta_socket"`; then
pankso@299 116 for mod in ac battery
pankso@299 117 do
pankso@299 118 load_module
pankso@299 119 echo " $mod" >> /var/lib/detected-modules
pankso@299 120 done
pankso@299 121 sed -i 's/= cpu/= batt\n}\n\nPlugin {\n type = cpu/' \
pankso@299 122 /etc/lxpanel/default/panels/panel 2> /dev/null
pankso@299 123 fi
pankso@299 124 fi
pankso@299 125 }
pankso@299 126
pankso@299 127 # Detect all USB devices.
pankso@299 128 detect_usb_devices()
pankso@299 129 {
pankso@299 130 if [ ! -s /var/lib/detected-usb-modules ]; then
pankso@299 131 rm -f /var/lib/detected-usb-modules
pankso@299 132 cat /proc/bus/usb/devices | grep "Vendor" | while read line ; do
pankso@299 133 ID=`echo "$line" | awk '{ print $2,$3 }' | sed 's/ / /' | \
pankso@299 134 sed 's/Vendor=/0x/' | sed 's/ProdID=/0x/'`
pankso@299 135 if grep -q "$ID" /lib/modules/*-slitaz/modules.usbmap; then
pankso@299 136 mod=`grep "$ID" /lib/modules/*-slitaz/modules.usbmap | \
pankso@299 137 awk '{ print $1 }'`
pankso@299 138 prod=`grep -A 2 "$line" /proc/bus/usb/devices | grep Product | \
pankso@299 139 cut -d "=" -f 2`
pankso@299 140 echo "$prod"
pankso@299 141 check_firmware
pankso@299 142 load_module
pankso@299 143 echo " $mod" >> /var/lib/detected-usb-modules
pankso@299 144 fi
pankso@299 145 done
pankso@299 146 fi
pankso@299 147 }
pankso@299 148
pankso@299 149 display_line()
pankso@299 150 {
pankso@299 151 echo "================================================================================"
pankso@299 152 }
pankso@299 153
pankso@299 154 # Box functions and dialog
pankso@299 155
pankso@299 156 box_list()
pankso@299 157 {
pankso@299 158 for mod in `cat /var/lib/detected-modules /var/lib/detected-usb-modules 2>/dev/null`
pankso@299 159 do
pankso@299 160 desc=`modinfo $mod | grep ^description | cut -d ":" -f 2`
pankso@299 161 [ -z "$desc" ] && desc="N/A"
pankso@299 162 echo "$mod | $desc"
pankso@299 163 done
pankso@299 164 }
pankso@299 165
pankso@299 166 box_detect_devices()
pankso@299 167 {
pankso@299 168 if [ $INSTALL_FIRMARE != true ]; then
pankso@299 169 xterm -T "Detect devices" \
pankso@299 170 -geometry 80x24 \
pankso@299 171 -e "$0 detect-pci; $0 detect-usb; \
pankso@299 172 echo -e \"----\nPress ENTER to close...\"; \
pankso@299 173 read i; exit 0"
pankso@299 174 else
pankso@304 175 xterm -T "Detect and get firmware" \
pankso@299 176 -geometry 80x24 \
pankso@304 177 -e "$0 detect-pci --get-firmware; \
pankso@304 178 $0 detect-usb --get-firmware; \
pankso@304 179 echo -e \"----\nPress ENTER to close...\"; \
pankso@299 180 read i; exit 0"
pankso@299 181 fi
pankso@299 182 }
pankso@299 183
pankso@299 184 box()
pankso@299 185 {
pankso@299 186 export BIN=$0
pankso@299 187 export MAIN_DIALOG='
pankso@299 188 <window title="Tazhw Box" icon-name="computer">
pankso@299 189 <vbox>
pankso@299 190
pankso@299 191 <text width-chars="54" use-markup="true">
pankso@299 192 <label>"
pankso@299 193 <b>Hardware auto-detection and configuration tool</b>
pankso@299 194 "</label>
pankso@299 195 </text>
pankso@299 196 <tree>
pankso@299 197 <width>520</width><height>180</height>
pankso@299 198 <variable>MODULE</variable>
pankso@299 199 <label>Kernel Module|Description</label>
pankso@299 200 <input>$BIN box_list</input>
pankso@299 201 <action>refresh:MODULE</action>
pankso@299 202 </tree>
pankso@299 203 <hbox>
pankso@299 204 <checkbox>
pankso@299 205 <label>Auto install non-free Firmware</label>
pankso@299 206 <variable>INSTALL_FIRMARE</variable>
pankso@299 207 <default>false</default>
pankso@299 208 </checkbox>
pankso@299 209 <button>
pankso@299 210 <label>Detect PCI/USB devices</label>
pankso@299 211 <input file icon="forward"></input>
pankso@299 212 <action>$BIN box_detect_devices</action>
pankso@299 213 <action>refresh:MODULE</action>
pankso@299 214 </button>
pankso@299 215 <button>
pankso@299 216 <label>Exit</label>
pankso@299 217 <input file icon="exit"></input>
pankso@299 218 <action type="exit">Exit</action>
pankso@299 219 </button>
pankso@299 220 </hbox>
pankso@299 221 </vbox>
pankso@299 222 </window>'
pankso@299 223 gtkdialog --center --program=MAIN_DIALOG >/dev/null
pankso@299 224 }
pankso@299 225
pankso@299 226 # Get firmware used by check_firmware()
pankso@299 227 if [ "$2" == "--get-firmware" ]; then
pankso@299 228 firmware='get'
pankso@299 229 fi
pankso@299 230
pankso@299 231 # What to do.
pankso@299 232 case "$1" in
pankso@299 233 init)
pankso@299 234 check_root
pankso@299 235 echo "Detecting PCI devices Kernel modules..."
pankso@299 236 detect_pci_devices
pankso@299 237 echo "Detecting USB devices Kernel modules..."
pankso@299 238 detect_usb_devices
pankso@299 239 start_network ;;
pankso@299 240 detect-pci)
pankso@299 241 check_root
pankso@299 242 echo -e "\nDetected PCI devices Kernel modules" && display_line
pankso@299 243 rm -f /var/lib/detected-modules
pankso@299 244 detect_pci_devices
pankso@299 245 display_line && echo "" ;;
pankso@299 246 detect-usb)
pankso@299 247 check_root
pankso@299 248 echo -e "\nDetected USB devices Kernel modules" && display_line
pankso@299 249 rm -f /var/lib/detected-usb-modules
pankso@299 250 detect_usb_devices
pankso@299 251 display_line && echo "" ;;
pankso@299 252 box*)
pankso@299 253 box_check_root
pankso@299 254 $1 ;;
pankso@299 255 detected-modules)
pankso@299 256 echo -e "\nDetected PCI and USB modules" && display_line
pankso@299 257 cat /var/lib/detected-modules
pankso@304 258 cat /var/lib/detected-usb-modules 2>/dev/null
pankso@299 259 display_line && echo "" ;;
pankso@299 260 *)
pankso@299 261 usage ;;
pankso@299 262 esac
pankso@299 263
pankso@299 264 exit 0