Magellan Linux

Contents of /alx-src/branches/alxconf-060/bin/alx-hwdetection.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5585 - (show annotations) (download) (as text)
Wed Apr 23 13:18:35 2014 UTC (10 years ago) by niro
File MIME type: application/x-sh
File size: 3967 byte(s)
added a hotfix for i845 devices to fix graphic issues by using the x11 vesa driver
1 #!/bin/bash
2
3 # hwinfo wrapper to use hwinfo with sudo if requested
4 hwinfo()
5 {
6 local use_sudo=""
7 case ${SUDO} in
8 yes|y|true|1) use_sudo=sudo ;;
9 esac
10
11 ${use_sudo} /usr/sbin/hwinfo $@
12 }
13
14 # get_hwinfo $hw_item
15 get_hwinfo()
16 {
17 local enable_desc="0"
18
19 if [[ $1 = --with-description ]] || [[ $1 = -d ]]
20 then
21 enable_desc=1
22 shift
23 fi
24
25 local item="$1"
26 local all
27 local i
28
29 # handle special items
30 case ${item} in
31 memory) get_hwinfo_memory; return ;;
32 smp) get_hwinfo_smp; return ;;
33 esac
34
35 all=$(hwinfo --short --"${item}")
36
37 declare -i i=0
38 while read device description
39 do
40 # skip the first line
41 (( i++ ))
42 [ ${i} -eq 1 ] && continue
43
44 if [[ ${enable_desc} = 1 ]]
45 then
46 echo "${device};${description}"
47 else
48 echo "${device}"
49 fi
50 done <<< "${all}"
51 }
52
53 # remove_duplicates $list
54 remove_duplicates()
55 {
56 local list="$@"
57 local fixed_list=":"
58 local i
59
60 for i in ${list}
61 do
62 if [[ -z $(echo "${fixed_list}" | fgrep ":${i}:") ]]
63 then
64 fixed_list="${fixed_list}${i}:"
65 fi
66 done
67
68 unset list
69
70 # remove all ':' and show the cleaned list
71 # this way fixes double spaces also
72 local counter
73 declare -i counter=0
74 for i in $(echo ${fixed_list} | sed "s|:| |g")
75 do
76 (( counter++ ))
77 if [[ ${counter} -eq 1 ]]
78 then
79 list="${i}"
80 else
81 list+=" ${i}"
82 fi
83 done
84
85 echo "${list}"
86 }
87
88 get_x11_driver_modules()
89 {
90 local modules
91 modules="$(hwinfo --gfxcard | grep 'XFree86 v4 Server Module:' | sed 's/.*Module:\ \(.*\)/\1/')"
92
93 # use vesa if nothing was found
94 [[ -z ${modules} ]] && modules="vesa"
95
96 # use openchrome module on dell optiplex fx130
97 if [[ ! -z $(hwinfo --bios | grep -i -A1 dell | grep -i fx130) ]]
98 then
99 modules="${modules//unichrome/openchrome}"
100 fi
101
102 # remove duplicates from list and show it
103 remove_duplicates "${modules}"
104 }
105
106 get_drm_driver_modules()
107 {
108 local modules
109 modules="$(hwinfo --gfxcard | grep 'Driver:' | sed 's/.*: \"\(.*\)\"/\1/;q')"
110
111 # use vesa if nothing was found
112 [[ -z ${modules} ]] && modules="uvesafb"
113
114 # remove duplicates from list and show it
115 remove_duplicates "${modules}"
116 }
117
118 get_wlan_driver_modules()
119 {
120 local device="$1"
121 local modules
122
123 if [[ -z ${device} ]]
124 then
125 echo "Error: get_netcard_driver_module(): no device given"
126 return 1
127 fi
128
129 modules=$(hwinfo --wlan | grep -B1 "Device File: ${device}" | sed 's/.*Modules: \"\(.*\)\"/\1/;q')
130 remove_duplicates "${modules}"
131 }
132
133 get_netcard_driver_modules()
134 {
135 local device="$1"
136 local modules
137
138 if [[ -z ${device} ]]
139 then
140 echo "Error: get_netcard_driver_module(): no device given"
141 return 1
142 fi
143
144 modules=$(hwinfo --netcard | grep -B1 "Device File: ${device}" | sed 's/.*Modules: \"\(.*\)\"/\1/;q')
145 remove_duplicates "${modules}"
146 }
147
148 get_system_type()
149 {
150 local hwinfo
151 local systemtype
152
153 hwinfo="$(hwinfo --bios --storage --gfxcard)"
154
155 if [[ ! -z $(echo "${hwinfo}" | grep -i zotac) ]]
156 then
157 systemtype="zotac"
158 elif [[ ! -z $(echo "${hwinfo}" | grep -i CLE266) ]]
159 then
160 systemtype="rangee"
161 elif [[ ! -z $(echo "${hwinfo}" | grep -i i810) ]]
162 then
163 systemtype="maxdata"
164 elif [[ ! -z $(echo "${hwinfo}" | grep -i i815) ]]
165 then
166 systemtype="maxdata"
167 elif [[ ! -z $(echo "${hwinfo}" | grep -i i845) ]]
168 then
169 systemtype="i845"
170 else
171 systemtype="standard"
172 fi
173
174 echo "${systemtype}"
175 }
176
177 intel_framebuffer_quirk_required()
178 {
179 local retval=0
180 local fbdev
181
182 if [[ -e /proc/fb ]]
183 then
184 if [[ ! -z $(grep 'inteldrmfb' /proc/fb) ]]
185 then
186 fbdev=$(grep 'inteldrmfb' /proc/fb | sed 's:\([0-9]\).*:\1:')
187 if [[ ${fbdev} != 0 ]]
188 then
189 retval="${fbdev}"
190 fi
191 fi
192 fi
193
194 echo "${retval}"
195 }
196
197 # debug
198 #echo "LAN: $(get_netcard_driver_modules eth0)"
199 #echo "WLAN: $(get_wlan_driver_modules wlan0)"
200 #echo "X11: $(get_x11_driver_modules)"
201 #echo "KMS/FB: $(get_drm_driver_modules)"
202
203 case $1 in
204 wlan) get_wlan_driver_modules wlan0 ;;
205 lan) get_netcard_driver_modules eth0 ;;
206 vga) get_x11_driver_modules ;;
207 console) get_drm_driver_modules ;;
208 system) get_system_type ;;
209 intel-fb-quirk) intel_framebuffer_quirk_required ;;
210 esac