You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
319 lines
7.8 KiB
319 lines
7.8 KiB
#/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
|
|
|