320 рядки
7.8 KiB
Plaintext
320 рядки
7.8 KiB
Plaintext
|
#/bin/sh
|
||
|
# Copyright(C) 2006 Nokia Corporation.
|
||
|
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License version 2 as
|
||
|
# published by the Free Software Foundation.
|
||
|
|
||
|
# This program is distributed in the hope that it will be useful, but
|
||
|
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
# General Public License for more details.
|
||
|
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program; if not, write to the Free Software
|
||
|
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
||
|
# USA
|
||
|
|
||
|
#Modified by NIN101(http://nin101.uni.cx).
|
||
|
#Provides: Shell if demanded by user; maps an LUKS encrypted partition
|
||
|
#Requires busybox-power or at least the applets "loadkmap" & "watchdog"
|
||
|
|
||
|
#WARNING: Charging WON'T work when device is turned off before the
|
||
|
#user pluggs in the charger. Or: It will, but you have to enter
|
||
|
#your LUKS password at a state where the screen is very very dark :-).
|
||
|
#This is because home gets mounted before BME starts.
|
||
|
|
||
|
|
||
|
umask 022
|
||
|
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||
|
MODULES="twl4030-vibra
|
||
|
dspbridge
|
||
|
iommu2
|
||
|
omap3-iommu
|
||
|
omap34xxcam-mod
|
||
|
omap_previewer_hack
|
||
|
board-rx51-camera
|
||
|
et8ek8
|
||
|
ad5820
|
||
|
adp1653
|
||
|
vs6555
|
||
|
uinput"
|
||
|
|
||
|
if [ -L /var/run ]
|
||
|
then
|
||
|
rm -f /var/run
|
||
|
mkdir /var/run
|
||
|
fi
|
||
|
|
||
|
mount -n -t proc proc /proc
|
||
|
mount -n -t sysfs sysfs /sys
|
||
|
mount -n -t tmpfs -o size=1M,noatime tmpfs /tmp
|
||
|
mount -n -t tmpfs -o size=256k,mode=0755,nosuid,noatime tmpfs /var/run
|
||
|
|
||
|
#MODE=`getbootstate`
|
||
|
|
||
|
# This doesn't really belong here, but we have start this so early
|
||
|
start_bootchart(){
|
||
|
if [ -e /bootchart -a -e /etc/init.d/bootchart ]
|
||
|
then
|
||
|
/etc/init.d/bootchart start
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
start_softupd()
|
||
|
{
|
||
|
echo "Starting software updater"
|
||
|
/etc/init.d/softupd.rcS
|
||
|
}
|
||
|
|
||
|
in_flash_mode()
|
||
|
{
|
||
|
grep update /proc/component_version 1>/dev/null 2>/dev/null
|
||
|
}
|
||
|
|
||
|
mount_devpts() {
|
||
|
TTYGRP=5
|
||
|
TTYMODE=620
|
||
|
|
||
|
if [ ! -d /dev/pts ]
|
||
|
then
|
||
|
mkdir /dev/pts
|
||
|
fi
|
||
|
|
||
|
if [ ! -c /dev/ptmx ]
|
||
|
then
|
||
|
mknod /dev/ptmx c 5 2
|
||
|
chmod 666 /dev/ptmx
|
||
|
fi
|
||
|
|
||
|
mount -n -t devpts -ogid=$TTYGRP,mode=$TTYMODE devpts /dev/pts
|
||
|
rm -rf /var/tmp/*
|
||
|
}
|
||
|
|
||
|
# I hate this hack. -- Md
|
||
|
make_extra_nodes () {
|
||
|
if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
|
||
|
cp -a /lib/udev/devices/* /dev/
|
||
|
fi
|
||
|
grep '^[^#]' /etc/udev/links.conf | \
|
||
|
while read type name arg1; do
|
||
|
[ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
|
||
|
case "$type" in
|
||
|
L)
|
||
|
ln -s $arg1 /dev/$name
|
||
|
;;
|
||
|
D)
|
||
|
mkdir -p /dev/$name
|
||
|
;;
|
||
|
M)
|
||
|
mknod /dev/$name $arg1 && chmod 600 /dev/$name
|
||
|
;;
|
||
|
*)
|
||
|
echo "unparseable line ($type $name $arg1)"
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
}
|
||
|
|
||
|
load_extra_modules () {
|
||
|
echo -n "Loading extra modules..."
|
||
|
for i in $MODULES; do
|
||
|
echo "Loading $i"
|
||
|
modprobe -q $i ||:
|
||
|
done
|
||
|
echo "done."
|
||
|
}
|
||
|
|
||
|
# Mount home and paging partitions if they are available
|
||
|
mount_mmc(){
|
||
|
device=$1
|
||
|
swap=$device"p1"
|
||
|
home=$device"p2"
|
||
|
test=$device"p3"
|
||
|
|
||
|
if [ -e $test ]
|
||
|
then
|
||
|
echo "Mounting partition $swap for paging"
|
||
|
# swap disabled as a workaround for Xorg bug, per NB#111807.
|
||
|
swapon $swap
|
||
|
modprobe ext3
|
||
|
echo "Mounting partition $home as home directory"
|
||
|
mount -t ext3 -o noatime,commit=1,data=writeback $home /home
|
||
|
else
|
||
|
echo "No paging partition available as $swap"
|
||
|
echo "No home partition available as $home"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
prepare_start_udev()
|
||
|
{
|
||
|
. /etc/udev/udev.conf
|
||
|
|
||
|
if [ -z "$tmpfs_size" ]; then
|
||
|
tmpfs_size="1M"
|
||
|
fi
|
||
|
|
||
|
ACTION=add
|
||
|
echo -n "Mounting a tmpfs over /dev..."
|
||
|
mount -n -o size=$tmpfs_size,mode=0755,noatime -t tmpfs none /dev
|
||
|
echo "done."
|
||
|
mkdir -p /dev/.udev/db /dev/.udev/queue
|
||
|
echo "" > /sys/kernel/uevent_helper
|
||
|
echo -n "Creating extra device nodes... "
|
||
|
make_extra_nodes
|
||
|
echo "done."
|
||
|
}
|
||
|
|
||
|
start_udev()
|
||
|
{
|
||
|
prepare_start_udev
|
||
|
/sbin/udevd --daemon
|
||
|
}
|
||
|
|
||
|
make_nodes()
|
||
|
{
|
||
|
echo -n "Creating device nodes... "
|
||
|
|
||
|
if [ -x /sbin/udevtrigger ]; then
|
||
|
/sbin/udevtrigger
|
||
|
else
|
||
|
/sbin/udevadm trigger
|
||
|
#wait for all events
|
||
|
/sbin/udevadm settle
|
||
|
fi
|
||
|
echo "done."
|
||
|
}
|
||
|
|
||
|
# When modifying this script, do not forget that between the time that
|
||
|
# the new /dev has been mounted and udevtrigger has been run there will be
|
||
|
# no /dev/null. This also means that you cannot use the "&" shell command.
|
||
|
|
||
|
start_bootchart
|
||
|
|
||
|
if in_flash_mode; then
|
||
|
start_softupd
|
||
|
reboot
|
||
|
fi
|
||
|
|
||
|
# here only in non-flash mode
|
||
|
|
||
|
# No need to start udev before softupd anymore
|
||
|
|
||
|
start_udev
|
||
|
make_nodes
|
||
|
load_extra_modules
|
||
|
|
||
|
mount_devpts
|
||
|
mount -n -o size=64M,nosuid,nodev,noatime -t tmpfs tmpfs /dev/shm
|
||
|
|
||
|
# mount_mmc "/dev/mmcblk0"
|
||
|
|
||
|
/sbin/hwclock -s || true
|
||
|
|
||
|
watchdog -t 10 /dev/twl4030_wdt
|
||
|
watchdog -t 10 /dev/watchdog
|
||
|
modprobe dm_mod
|
||
|
modprobe dm_loop
|
||
|
|
||
|
#LED part taken from a post on talk.maemo.org by Mentalist Traceur. Thx
|
||
|
modprobe leds-lp5523
|
||
|
for i in 1 2 3 4 5 6; do
|
||
|
echo 25 > /sys/class/leds/lp5523\:kb$i/brightness
|
||
|
done
|
||
|
|
||
|
loadkmap < /nokia-n900.kmap
|
||
|
|
||
|
CONT=0
|
||
|
while [ "$CONT" -ne 1 ] ; do
|
||
|
cryptsetup luksOpen /dev/mmcblk0p2 home_luks
|
||
|
if [ "$?" -eq 0 ] || [ -b /dev/mapper/home_luks ] ; then
|
||
|
CONT=1
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
echo "Press any key to enable shell"
|
||
|
read -n 1 -t 2 shellmode
|
||
|
if [ -n "$shellmode" ] ; then
|
||
|
sh
|
||
|
fi
|
||
|
|
||
|
killall watchdog
|
||
|
|
||
|
|
||
|
# cannot collect product data if we are under SDK
|
||
|
# it should not be run there, but explicit check is better
|
||
|
OPI=`which osso-product-info`
|
||
|
|
||
|
if [ x$OPI != x ]; then
|
||
|
|
||
|
# Make sure /etc/hostname and /etc/hosts exist and are not empty. They do not
|
||
|
# exist if this is the very first boot, and they may be empty if power cut
|
||
|
# happended before the contents has reached the media.
|
||
|
if [ ! -f /etc/hostname -o ! -s /etc/hostname -o ! -f /etc/hosts -o ! -s /etc/hosts ]; then
|
||
|
hostname="`$OPI -qOSSO_PRODUCT_SHORT_NAME | sed 's/ /-/g'`"
|
||
|
echo $hostname > /etc/hostname
|
||
|
echo "127.0.0.1 $hostname localhost" > /etc/hosts
|
||
|
chmod 644 /etc/hosts
|
||
|
fi
|
||
|
|
||
|
# Similarly, make sure /etc/issue and /etc/issue.net are fine
|
||
|
if [ ! -f /etc/issue -o ! -s /etc/issue -o ! -f /etc/issue.net -o ! -s /etc/issue.net -o -f /home/user/first-boot-flag ]; then
|
||
|
full_name=`$OPI -qOSSO_PRODUCT_RELEASE_FULL_NAME`
|
||
|
echo "$full_name \n \l" > /etc/issue
|
||
|
echo "" >> /etc/issue
|
||
|
echo "$full_name %h" > /etc/issue.net
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Note, normally we would have to sync the FS to make sure the files have
|
||
|
# reached the media. But because the files are small, they would be either
|
||
|
# empty or non-existing in case of an unclean reboot, and we handle both
|
||
|
# cases.
|
||
|
|
||
|
hostname -F /etc/hostname
|
||
|
ifup lo &
|
||
|
|
||
|
#echo /sbin/udevsend > /proc/sys/kernel/hotplug
|
||
|
|
||
|
#: > /var/run/utmp
|
||
|
#chmod 664 /var/run/utmp
|
||
|
#chgrp utmp /var/run/utmp
|
||
|
|
||
|
rm -f /etc/mtab
|
||
|
cat /proc/mounts > /etc/mtab
|
||
|
|
||
|
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
|
||
|
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
|
||
|
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
|
||
|
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
|
||
|
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
|
||
|
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
|
||
|
echo "49152 65535" > /proc/sys/net/ipv4/ip_local_port_range
|
||
|
echo 6000 > /sys/class/bluetooth/hci0/idle_timeout
|
||
|
|
||
|
# adjust other kernel parameters to minimize memory consumption
|
||
|
# and optimize IO pressure
|
||
|
echo 16 > /proc/sys/kernel/pty/max
|
||
|
echo 1024 > /proc/sys/kernel/threads-max
|
||
|
echo 8192 > /proc/sys/fs/file-max
|
||
|
echo 100 > /proc/sys/vm/swappiness
|
||
|
echo 5 > /proc/sys/vm/page-cluster
|
||
|
echo 500 > /proc/sys/vm/dirty_expire_centisecs
|
||
|
echo 65536 > /proc/sys/net/core/rmem_default
|
||
|
echo 16384 > /proc/sys/net/core/wmem_default
|
||
|
echo 20 > /proc/sys/net/unix/max_dgram_qlen
|
||
|
|
||
|
# Finalize SSU in case it has been interrupted by power failure
|
||
|
if test -x /usr/libexec/ham-rescue.sh; then
|
||
|
/usr/libexec/ham-rescue.sh
|
||
|
fi
|
||
|
|
||
|
# Disable sysrq to avoid accidental console-carbage resets.
|
||
|
echo 0 > /proc/sys/kernel/sysrq
|
||
|
|
||
|
echo "/what/me/worry" > /proc/sys/kernel/core_pattern
|
||
|
echo 1 > /proc/sys/kernel/panic
|
||
|
echo 1 > /proc/sys/kernel/panic_on_oops
|
||
|
|
||
|
exit 0
|