Magellan Linux

Contents of /trunk/installer/hwdetection.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 767 - (show annotations) (download) (as text)
Mon Sep 22 22:06:46 2008 UTC (15 years, 7 months ago) by niro
File MIME type: application/x-sh
File size: 4611 byte(s)
-better double spaces fix

1 #!/bin/bash
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/installer/hwdetection.sh,v 1.8 2008-09-22 22:06:46 niro Exp $
3
4 ## hwdetection, needs >= sys-apps/hwinfo
5
6 # hwinfo wrapper to use hwinfo with sudo if requested
7 hwinfo()
8 {
9 local use_sudo=""
10 case ${SUDO} in
11 yes|y|true|1) use_sudo=sudo ;;
12 esac
13
14 ${use_sudo} /usr/sbin/hwinfo $@
15 }
16
17 # get_hwinfo $hw_item
18 get_hwinfo()
19 {
20 local enable_desc="0"
21
22 if [[ $1 = --with-description ]] || [[ $1 = -d ]]
23 then
24 enable_desc=1
25 shift
26 fi
27
28 local item="$1"
29 local all
30 local i
31
32 # handle special items
33 case ${item} in
34 memory) get_hwinfo_memory; return ;;
35 smp) get_hwinfo_smp; return ;;
36 esac
37
38 all=$(hwinfo --short --"${item}")
39
40 declare -i i=0
41 while read device description
42 do
43 # skip the first line
44 (( i++ ))
45 [ ${i} -eq 1 ] && continue
46
47 if [[ ${enable_desc} = 1 ]]
48 then
49 echo "${device};${description}"
50 else
51 echo "${device}"
52 fi
53 done <<< "${all}"
54 }
55
56
57 # special memory case
58 get_hwinfo_memory()
59 {
60 local memory=$(hwinfo --memory | grep "Memory Size" | cut -d: -f2 | sed "s:\ ::")
61 echo "${memory}"
62 }
63
64
65 # special smp case
66 get_hwinfo_smp()
67 {
68 local smp=$(hwinfo --smp | grep "SMP support:" | cut -d: -f2 | sed "s:\ ::")
69 echo "${smp}"
70 }
71
72
73 # get_driver_modules $hw_item
74 get_driver_modules()
75 {
76 local item="$1"
77 local modules
78
79 # being little tricky here :)
80 # does following:
81 # grep:
82 # -> 'Driver Modules: "via82cxxx", "ide_cd"'
83 # cut:
84 # -> ' "via82cxxx", "ide_cd"'
85 # sed1:
86 # -> ' modules="via82cxxx", "ide_cd"'
87 # sed2:
88 # -> ' modules="via82cxxx ide_cd"'
89 # then evaluate -> eval modules="via82cxxx ide_cd"
90 # and we get a variable $modules with all mods
91 #eval $(hwinfo --"${item}" | grep "Driver Modules:" | cut -d: -f2 | sed -e "s:\":modules=\":" -e "s:\",\ \":\ :")
92
93 local i
94 for i in $(hwinfo --"${item}" | grep "Driver Modules:" | cut -d: -f2 )
95 do
96 eval $(echo "${i}" | sed -e "s:\":modules=\"\${modules}\ :" -e "s:,:\ :")
97 done
98 echo "${modules}"
99 }
100
101 # remove_duplicates $list
102 remove_duplicates()
103 {
104 local list="$@"
105 local fixed_list=":"
106 local i
107
108 for i in ${list}
109 do
110 if [[ -z $(echo "${fixed_list}" | fgrep ":${i}:") ]]
111 then
112 fixed_list="${fixed_list}${i}:"
113 fi
114 done
115
116 unset list
117
118 # remove all ':' and show the cleaned list
119 # this way fixes double spaces also
120 for i in $(echo ${fixed_list} | sed "s|:| |g")
121 do
122 list+=" ${i}"
123 done
124
125 echo "${list}"
126 }
127
128 get_x11_driver_modules()
129 {
130 local modules
131 modules="$(hwinfo --gfxcard | grep "XFree86 v4 Server Module:" | cut -d: -f2)"
132
133 # remove duplicates from list and show it
134 remove_duplicates "${modules}"
135 }
136
137 # create_initrd {/path/to/initrd kernelversion </path/to/config>}
138 # when nothing given then /boot/initrd-$(uname -r).img $(uname -r) will be used
139 # default config path is /etc/conf.d/mkinitrd
140 create_initrd()
141 {
142 local initrd="$1"
143 local kernel="$2"
144 local config="$3"
145 local modules
146
147 [[ -z ${initrd} ]] && initrd="/boot/initrd-$(uname -r).img"
148 [[ -z ${kernel} ]] && kernel="$(uname -r)"
149 [[ -z ${config} ]] && config="/etc/conf.d/mkinitrd"
150
151 # get various modules needed to boot
152 modules="${modules} $(get_driver_modules disk)"
153 modules="${modules} $(get_driver_modules scsi)"
154 modules="${modules} $(get_driver_modules cdrom)"
155
156 # remove all duplicate modules
157 modules="$(remove_duplicates ${modules})"
158
159 # create the config and an initrd
160 echo "# autogenerated config file" > ${config}
161 echo "MODULES=\"${modules}\"" >> ${config}
162 echo "IMAGE_TYPE=\"initramfs\"" >> ${config}
163
164 mkinitrd -f ${initrd} ${kernel}
165 }
166
167 # special: memory (size), floppy (modprobe floppy), smp (support y/n)
168 # sound (which module? -> eval $(hwinfo --sound | grep "Driver Modules:" | cut -d: -f2 | sed s:\":a=\":) )
169 #
170
171 # for i in cdrom cpu disk floppy gfxcard keyboard memory monitor mouse
172 # netcard pppoe scsi smp \
173 # sound wlan
174 # do
175 # echo -------- ${i}
176 # get_hwinfo ${i}
177 # echo -------------------------------------------------
178 # echo
179 # done
180
181 # get_driver_modules sound
182 # get_driver_modules wlan
183 # get_driver_modules cdrom
184 # get_driver_modules disk
185 # get_driver_modules gfxcard
186 # get_x11_driver_modules
187
188 # # get a modules list
189 # for i in sound wlan cdrom disk gfxcard
190 # do
191 # ALL_MODULES="${ALL_MODULES} $(get_driver_modules ${i})"
192 # done
193 # ALL_MODULES="${ALL_MODULES} $(get_x11_driver_modules)"
194 # # show a clean list
195 # for i in $(remove_duplicates ${ALL_MODULES})
196 # do
197 # echo ${i}
198 # done
199
200 #create_initrd /root/TEST/initrd
201 #get_driver_modules cdrom
202 #get_driver_modules disk
203 #get_driver_modules scsi
204 #get_driver_modules all
205
206 # network
207 #get_hwinfo --with-description netcard
208 #get_driver_modules netcard
209
210 #get_hwinfo disk
211 #get_hwinfo partition | grep /dev/hda