Magellan Linux

Contents of /trunk/hwinfo/emulate-hwsetup.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2677 - (show annotations) (download) (as text)
Fri Jul 24 10:47:30 2015 UTC (8 years, 9 months ago) by niro
File MIME type: application/x-sh
File size: 6993 byte(s)
-detect the primary gfxcard only
1 #!/bin/bash
2
3 export LC_ALL=C
4
5 HWSETUP_DIR=/etc/conf.d/hwsetup
6 HWINFO="/usr/sbin/hwinfo"
7
8 UNSUPPORTED_GFXCARD_DRIVERS=""
9 UNSUPPORTED_NETCARD_DRIVERS=""
10 if [ -f ${HWSETUP_DIR}/unsupported-gfxcard-drivers ]
11 then
12 UNSUPPORTED_GFXCARD_DRIVERS="$(< ${HWSETUP_DIR}/unsupported-gfxcard-drivers)"
13 fi
14 if [ -f ${HWSETUP_DIR}/unsupported-netcard-drivers ]
15 then
16 UNSUPPORTED_NETCARD_DRIVERS="$(< ${HWSETUP_DIR}/unsupported-netcard-drivers)"
17 fi
18
19 clearconfig()
20 {
21 local file="$1"
22 : > ${HWSETUP_DIR}/${file}
23 }
24
25 addconfig()
26 {
27 local file="$1"
28 local data="$2"
29
30 echo "${data}" >> ${HWSETUP_DIR}/${file}
31 }
32
33 # check_unsupported_netcard_drivers UNSUPPORTED_ARRAY DRIVER
34 check_unsupported_drivers()
35 {
36 local unsupported="$1"
37 local driver="$2"
38 local i
39
40 # filter unsupported devices
41 for i in ${unsupported}
42 do
43 [[ ${i} = ${driver} ]] && return 1
44 done
45 return 0
46 }
47
48 get_gfxcard_sysfsid_from_specific_hwid()
49 {
50 local SEARCH_ID="$1"
51 local hwid
52 local sysfsid
53 local counter
54
55 declare -i counter=0
56
57 echo "${GFXCARD_INFO}" | while read line
58 do
59 # get hwinfo device id, its always the first line
60 if [[ ${counter} = 0 ]]
61 then
62 # hwids begins all with ^ID:, sub informations have an empty space
63 hwid=$(echo "${line}" | grep '^[0-9].*' | sed 's:\(^[0-9]*\)\:\ .*:\1:')
64 fi
65
66 # search for device id
67 if [[ ${SEARCH_ID} = ${hwid} ]]
68 then
69 case "${line}" in
70 *'SysFS ID:'*)
71 # subst the id
72 sysfsid="${line#*:}"
73 # trim spaces
74 sysfsid="${sysfsid// }"
75 echo "${sysfsid}"
76 ;;
77 esac
78 fi
79
80 # next hardware item
81 if [[ -z ${line} ]]
82 then
83 counter=0
84 else
85 ((counter++))
86 fi
87 done
88 }
89
90 get_primary_display_hwid()
91 {
92 local hwid
93 hwid="$(echo "${GFXCARD_INFO}" | grep 'Primary display adapter:' | sed 's:.*\:\ \#\([0-9]*\):\1:')"
94 echo "${hwid}"
95 }
96
97
98 # disable probeonly, load all modules by default
99 probeonly=0
100
101 # check getops
102 for i in $*
103 do
104 case $1 in
105 # ignoring -p,-v,-a,-s
106 -p|-v|-a|-s) shift;;
107 # only support dry-run
108 -n) shift; probeonly=1 ;;
109 esac
110 shift
111 done
112
113 echo -n "Autoconfiguring devices... " 1>&2
114
115 GFXCARD_INFO="$(${HWINFO} --gfxcard)"
116 # check for a primary device and rerun hwinfo for this device only
117 primary_display_hwid="$(get_primary_display_hwid)"
118 if [[ -n ${primary_display_hwid} ]]
119 then
120 GFXCARD_INFO="$(${HWINFO} --gfxcard --only $(get_gfxcard_sysfsid_from_specific_hwid ${primary_display_hwid}))"
121 fi
122 NETCARD_INFO="$(${HWINFO} --netcard)"
123 MOUSE_INFO="$(${HWINFO} --mouse)"
124
125 # eval arrays with all modules and descriptions
126 #
127 # graphic
128 eval $(echo GFXCARD_MODULE=\($(echo "${GFXCARD_INFO}" | grep 'XFree86.*Module:' | sed 's:.*\:\ \(.*\)$:\"\1\":')\))
129 eval $(echo GFXCARD_DESC=\($(echo "${GFXCARD_INFO}" | grep 'Model:' | sed 's:.*\:\ \"\(.*\)\"$:\"\1\":')\))
130 # the xserver is always xorg, no array needed
131 GFXCARD_XSERVER="Xorg"
132 #
133 # network
134 eval $(echo NETCARD_MODULE=\($(echo "${NETCARD_INFO}" | grep 'Driver Modules:' | sed 's:.*\:\ \"\(.*\)\"$:\"\1\":')\))
135 eval $(echo NETCARD_DESC=\($(echo "${NETCARD_INFO}" | grep 'Model:' | sed 's:.*\:\ \"\(.*\)\"$:\"\1\":')\))
136 # fallback (only needed for systems without netlink)
137 eval $(echo NETCARD_MODULE_FB=\($(echo "${NETCARD_INFO}" | grep 'Driver Activation Cmd:' | sed 's:.*\:\ \"modprobe\ \(.*\)\"$:\"\1\":')\))
138 #
139 # mouse
140 eval $(echo MOUSE_MODULE=\($(echo "${MOUSE_INFO}" | grep 'Driver Modules:' | sed 's:.*\:\ \"\(.*\)\"$:\"\1\":')\))
141 eval $(echo MOUSE_DESC=\($(echo "${MOUSE_INFO}" | grep 'Model:' | sed 's:.*\:\ \"\(.*\)\"$:\"\1\":')\))
142 eval $(echo MOUSE_DEVICE=\($(echo "${MOUSE_INFO}" | grep 'Device File:' | sed 's:.*\:\ \(.*\)[$\ ].*:\"\1\":')\))
143 eval $(echo MOUSE_GPM_PROTO=\($(echo "${MOUSE_INFO}" | grep 'GPM.*Protocol:' | sed 's:.*\:\ \(.*\)$:\"\1\":')\))
144 eval $(echo MOUSE_X11_PROTO=\($(echo "${MOUSE_INFO}" | grep 'XFree86.*Protocol:' | sed 's:.*\:\ \(.*\)$:\"\1\":')\))
145
146 # get the number of devices for each class
147 GFXCARD_COUNT=$(echo "${GFXCARD_INFO}" | grep -c "[0-9a-zA-Z]\: .*\:\ .*")
148 NETCARD_COUNT=$(echo "${NETCARD_INFO}" | grep -c "[0-9a-zA-Z]\: .*\:\ .*")
149 MOUSE_COUNT=$(echo "${MOUSE_INFO}" | grep -c "[0-9a-zA-Z]\: .*\:\ .*")
150
151
152 # clear all config files
153 clearconfig xserver
154 clearconfig netcard
155 clearconfig knoppix
156 clearconfig mouse
157
158 for ((i=0; i<GFXCARD_COUNT; i++))
159 do
160 # fallback to vesa
161 if [[ -z ${GFXCARD_MODULE[${i}]} ]]
162 then
163 GFXCARD_MODULE[${i}]="vesa"
164 fi
165
166 # exclude unsupported drivers
167 check_unsupported_drivers "${UNSUPPORTED_GFXCARD_DRIVERS}" "${NETCARD_MODULE[${i}]}" || continue
168
169 addconfig xserver "XSERVER=\"${GFXCARD_XSERVER}\""
170 addconfig xserver "XMODULE=\"${GFXCARD_MODULE[${i}]}\""
171 addconfig xserver "XDESC=\"${GFXCARD_DESC[${i}]}\""
172
173 # add them to knoppix too
174 addconfig knoppix "XSERVER=\"${GFXCARD_XSERVER}\""
175 addconfig knoppix "XMODULE=\"${GFXCARD_MODULE[${i}]}\""
176 addconfig knoppix "XDESC=\"${GFXCARD_DESC[${i}]}\""
177
178 # load some needed modules for xorg-servers without udev or hal support, which the driver would normally autoload
179 case "${GFXCARD_MODULE[${i}]}" in
180 intel|i810) modprobe -q intel-agp ;;
181 nv) modprobe -q nvidia-agp ;;
182 sis) modprobe -q sis-agp ;;
183 ati|radeon|r128|mach64) modprobe -q ati-agp ;;
184 via|openchrome|unichrome) modprobe -q via-agp ;;
185 esac
186 done
187
188 for ((i=0; i<NETCARD_COUNT; i++))
189 do
190 # use fallback
191 if [[ -z ${NETCARD_MODULE[${i}]} ]]
192 then
193 NETCARD_MODULE[${i}]="${NETCARD_MODULE_FB[${i}]}"
194 fi
195
196 # exclude this driver if its still empty, the provided kernel does not support this hardware
197 if [[ -z ${NETCARD_MODULE[${i}]} ]]
198 then
199 continue
200 fi
201
202 # exclude unsupported drivers
203 check_unsupported_drivers "${UNSUPPORTED_NETCARD_DRIVERS}" "${NETCARD_MODULE[${i}]}" || continue
204
205 addconfig netcard "FULLNAME=\"${NETCARD_DESC[${i}]}\""
206 addconfig netcard "DRIVER=\"${NETCARD_MODULE[${i}]}\""
207
208 # add them to knoppix too
209 addconfig knoppix "NETCARD_FULLNAME=\"${NETCARD_DESC[${i}]}\""
210 addconfig knoppix "NETCARD_DRIVER=\"${NETCARD_MODULE[${i}]}\""
211
212 # load the netcard modules
213 if [[ ${probeonly} = 0 ]]
214 then
215 modprobe -q "${NETCARD_MODULE[${i}]}"
216 fi
217 done
218
219 for ((i=0; i<MOUSE_COUNT; i++))
220 do
221 # fix mouseproto to be hwsetup compatible (it just guesses the proto :/ )
222 case "${MOUSE_GPM_PROTO[${i}]}" in
223 exps2) MOUSE_GPM_PROTO[${i}]="ps2" ;;
224 "") MOUSE_GPM_PROTO[${i}]="ps2" ;;
225 esac
226 case "${MOUSE_X11_PROTO[${i}]}" in
227 explorerps/2) MOUSE_X11_PROTO[${i}]="IMPS/2" ;;
228 ps/2) MOUSE_X11_PROTO[${i}]="PS/2" ;;
229 "") MOUSE_X11_PROTO[${i}]="PS/2" ;;
230 esac
231
232 addconfig mouse "MOUSETYPE=\"${MOUSE_GPM_PROTO[${i}]}\""
233 addconfig mouse "XMOUSETYPE=\"${MOUSE_X11_PROTO[${i}]}\""
234 addconfig mouse "FULLNAME=\"${MOUSE_DESC[${i}]}\""
235 addconfig mouse "DEVICE=\"${MOUSE_DEVICE[${i}]}\""
236 addconfig mouse "DRIVER=\"${MOUSE_MODULE[${i}]}\""
237
238 # add them to knoppix too
239 addconfig knoppix "MOUSE_MOUSETYPE=\"${MOUSE_GPM_PROTO[${i}]}\""
240 addconfig knoppix "MOUSE_XMOUSETYPE=\"${MOUSE_X11_PROTO[${i}]}\""
241 addconfig knoppix "MOUSE_FULLNAME=\"${MOUSE_DESC[${i}]}\""
242 addconfig knoppix "MOUSE_DEVICE=\"${MOUSE_DEVICE[${i}]}\""
243 addconfig knoppix "MOUSE_DRIVER=\"${MOUSE_MODULE[${i}]}\""
244 done
245
246 echo "Done." 1>&2