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 |