Magellan Linux

Contents of /trunk/installer/hwdetection.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 769 - (show annotations) (download) (as text)
Wed Sep 24 10:15:46 2008 UTC (15 years, 7 months ago) by niro
File MIME type: application/x-sh
File size: 5402 byte(s)
-chroot and better argv handling for the create_initrd() function

1 #!/bin/bash
2 # $Header: /home/cvsd/magellan-cvs/magellan-src/installer/hwdetection.sh,v 1.9 2008-09-24 10:15: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
143 local kernel
144 local config
145 local chroot
146 #local root
147 local modules
148
149 # very basic getops
150 for i in $*
151 do
152 case $1 in
153 #--root|-r) shift; root="$1" ;;
154 --initrd|-i) shift; initrd="$1" ;;
155 --config|-c) shift; config="$1" ;;
156 --kernelversion|-v) shift; kernel="$1" ;;
157 esac
158 shift
159 done
160
161 [[ -z ${initrd} ]] && initrd="/boot/initrd-$(uname -r).img"
162 [[ -z ${kernel} ]] && kernel="$(uname -r)"
163 [[ -z ${config} ]] && config="/etc/conf.d/mkinitrd"
164
165 if [[ ! -z ${INSTALL_ROOT} ]]
166 then
167 config="${INSTALL_ROOT}/${config}"
168 chroot="chrooted"
169 fi
170
171 # get various modules needed to boot
172 modules="$(get_driver_modules disk)"
173 modules+=" $(get_driver_modules scsi)"
174 modules+=" $(get_driver_modules cdrom)"
175
176 # check for special ide_disk drivers (ata support)
177 if [[ ! -z $(echo ${modules} | grep ide_disk) ]]
178 then
179 modules+=" $(grep ide_disk /proc/modules | cut -d' ' -f4 | sed '/-/d;s:,:\ :g')"
180 fi
181
182 # remove all duplicate modules
183 modules="$(remove_duplicates ${modules})"
184
185 # create the config and an initrd
186 echo "# autogenerated config file" > ${config}
187 echo "MODULES=\"${modules}\"" >> ${config}
188 echo "IMAGE_TYPE=\"initramfs\"" >> ${config}
189
190 ${chroot} mkinitrd -f ${initrd} ${kernel}
191 }
192
193 chrooted()
194 {
195 local cmd="$@"
196
197 mount -t sysfs sysfs ${INSTALL_ROOT}/sys
198 mount -t proc proc ${INSTALL_ROOT}/proc
199 mount -o bind /dev ${INSTALL_ROOT}/dev
200
201 chroot ${INSTALL_ROOT} ${cmd}
202
203 umount ${INSTALL_ROOT}/dev
204 umount ${INSTALL_ROOT}/proc
205 umount ${INSTALL_ROOT}/sys
206 }
207
208 # special: memory (size), floppy (modprobe floppy), smp (support y/n)
209 # sound (which module? -> eval $(hwinfo --sound | grep "Driver Modules:" | cut -d: -f2 | sed s:\":a=\":) )
210 #
211
212 # for i in cdrom cpu disk floppy gfxcard keyboard memory monitor mouse
213 # netcard pppoe scsi smp \
214 # sound wlan
215 # do
216 # echo -------- ${i}
217 # get_hwinfo ${i}
218 # echo -------------------------------------------------
219 # echo
220 # done
221
222 # get_driver_modules sound
223 # get_driver_modules wlan
224 # get_driver_modules cdrom
225 # get_driver_modules disk
226 # get_driver_modules gfxcard
227 # get_x11_driver_modules
228
229 # # get a modules list
230 # for i in sound wlan cdrom disk gfxcard
231 # do
232 # ALL_MODULES="${ALL_MODULES} $(get_driver_modules ${i})"
233 # done
234 # ALL_MODULES="${ALL_MODULES} $(get_x11_driver_modules)"
235 # # show a clean list
236 # for i in $(remove_duplicates ${ALL_MODULES})
237 # do
238 # echo ${i}
239 # done
240
241 #create_initrd /root/TEST/initrd
242 #get_driver_modules cdrom
243 #get_driver_modules disk
244 #get_driver_modules scsi
245 #get_driver_modules all
246
247 # network
248 #get_hwinfo --with-description netcard
249 #get_driver_modules netcard
250
251 #get_hwinfo disk
252 #get_hwinfo partition | grep /dev/hda