Magellan Linux

Annotation of /trunk/mkinitrd-magellan/livecd/linuxrc.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 673 - (hide annotations) (download) (as text)
Fri Jan 25 11:12:52 2008 UTC (16 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 4414 byte(s)
-only load pata modules, if requested not automatically. fixes some issues with nforce boards and linux-2.6.21

1 niro 532 #!/bin/sh
2 niro 673 # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/livecd/linuxrc.sh,v 1.5 2008-01-25 11:12:52 niro Exp $
3 niro 532
4     # loads given kernel modules
5     load_kernel_modules()
6     {
7     local type="$1"
8     local module
9     local args
10    
11     echo -e "-- Loading ${type} modules:"
12     ( cat /etc/modules.${type}; echo) | while read module args
13     do
14     case "${module}" in
15     \#*|"") continue ;;
16     esac
17    
18     if [ -e /lib/${module}.ko ]
19     then
20     insmod -f /lib/${module}.ko ${args} > /dev/null 2>&1
21     [ $? -eq 0 ] && echo -e "-- ${module}"
22     fi
23     done
24     echo
25     }
26    
27     # check_drives $devices $fstype
28     check_drives()
29     {
30     local devices="$1"
31     local fs="$2"
32    
33     for dev in ${devices}
34     do
35     mount -t ${fs} ${dev} /sysroot/mnt/cdrom >/dev/null 2>&1
36     media_found=$?
37    
38     # if mount was ok check if cdid exists
39     if [ "${media_found}" -eq 0 ]
40     then
41     [ -e /sysroot/mnt/cdrom/livecdrootfs.sqsh ] && media_id_ok=$?
42     umount /sysroot/mnt/cdrom
43    
44     if [ "${media_id_ok}" -eq 0 ]
45     then
46     echo -e "Magellan boot device found."
47     BOOT_DEVICE="${dev}"
48 niro 663 FSTYPE="${fs}"
49 niro 532 break
50     fi
51     fi
52     done
53     }
54    
55     ## some defaults ##
56     DOSCSI=no
57     DOUSB=no
58     DOSATA=no
59 niro 663 DOFB=no
60 niro 673 DOPATA=no
61 niro 663 FORCED_ROOTFS=""
62 niro 532
63     ## starts here ##
64    
65     # mount essential filesystems
66     mount -t proc proc /proc
67     mount -t sysfs sysfs /sys
68    
69     # silencio
70     echo 0 > /proc/sys/kernel/printk
71    
72     # check command line for params
73     for i in $(cat /proc/cmdline)
74     do
75     case "${i}" in
76     doscsi)
77     DOSCSI=yes
78     ;;
79     dousb)
80     DOUSB=yes
81     ;;
82     dosata)
83     DOSATA=yes
84     ;;
85 niro 663 dofb)
86     DOFB=yes
87     ;;
88 niro 673 dopata)
89     DOPATA=yes
90 niro 532 ;;
91 niro 663 rootfs=*)
92 niro 671 FORCED_ROOTFS="${i#*=}"
93 niro 663 ;;
94 niro 532 esac
95     done
96    
97     # now load all needed modules
98 niro 671 [ "${DOFB}" = "yes" ] && load_kernel_modules "framebuffer"
99 niro 532 load_kernel_modules "generic"
100 niro 673 [ "${DOPATA}" = "yes" ] && load_kernel_modules "pata"
101 niro 532 [ "${DOSCSI}" = "yes" ] && load_kernel_modules "scsi"
102     [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
103     [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
104    
105     # create newroot mount point
106     mkdir -p /sysroot
107     # fake a new filesystem (also needed with an initramfs!!)
108     mount -t tmpfs tmpfs /sysroot
109    
110     mkdir -p /sysroot/mnt/cdrom
111     mkdir -p /sysroot/mnt/cloop
112     mkdir -p /sysroot/mnt/magellan
113    
114    
115     # needed for the usbstick, the timeout maybe to short
116     if [ "${DOUSB}" = "yes" ]; then
117     echo "-- Waiting 8 seconds for possible usb mount ..."
118     sleep 8
119     fi
120    
121     # searching cdrom with cdid
122     BOOT_DEVICE=""
123     FSTYPE=""
124    
125     echo "Searching for a boot device ..."
126    
127     # searching usbstick
128     if [ "${DOUSB}" = "yes" ]; then
129 niro 663 ROOTFS="vfat"
130     [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
131     check_drives "/dev/sd*" "${ROOTFS}"
132     check_drives "/dev/sg*" "${ROOTFS}"
133 niro 532 fi
134    
135     # for cdrom_device in $CDROM_LIST (ide)
136 niro 663 ROOTFS="iso9660"
137     [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
138     check_drives "/dev/cdroms/*" "${ROOTFS}"
139     check_drives "/dev/hd*" "${ROOTFS}"
140 niro 532
141     # scsi cdroms
142     if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
143 niro 663 ROOTFS="iso9660"
144     [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
145     check_drives "/dev/sr*" "${ROOTFS}"
146     check_drives "/dev/sg*" "${ROOTFS}"
147     check_drives "/dev/scd*" "${ROOTFS}"
148 niro 532 fi
149    
150     # mount our rootfs from cdrom
151     if [ "${BOOT_DEVICE}" = "" ]
152     then
153     echo "No Magellan boot CD/USBStick found!!!"
154     ash
155     exit 1
156     else
157     echo -e "Booting from: $BOOT_DEVICE ..."
158     mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1
159    
160     # write our boot_device to /mnt/.bootdev for later use (mtab)
161     echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev
162     echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev
163    
164     # mount squashfs
165     echo -e "Mounting squashfs system image ..."
166     echo
167     [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
168     mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop
169    
170     # symlinking cloop rootfs to /mnt as newroot
171     cd /sysroot
172    
173 niro 605 for x in bin sbin lib lib64 boot usr opt
174 niro 532 do
175 niro 605 [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x}
176 niro 532 done
177     mkdir -p initrd proc tmp sys var/tmp dev media
178    
179     # make /sysroot/dev/console & /mnt/dev/null
180     [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1
181     [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3
182    
183     (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)
184    
185     # ensure the right permissions
186     chmod 1777 /sysroot/tmp
187     chmod 1777 /sysroot/var/tmp
188     fi
189    
190     cd /
191    
192     # de-silencio
193     echo 3 > /proc/sys/kernel/printk
194    
195     echo "-- Switching to real sysroot ..."
196     umount /sys
197     umount /proc
198    
199     exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console