Hi,
i am now working on QTE running on debian rootfs with
recent kernel (latest andy-tracking).

Right now i think i have working all that i was using
with QTE 4.4.3 from here [1]. This basically is:

* working SMS/calls
* GPRS
* suspend/resume

Attached are patches that i used and work-in progress
howto. I will upload whole rootfs during this week.

As for the patches - 0001 is taken from here [2] and
adjusted to apply to current git.

0002 fixes problem when alsa scenarios are being
loaded from /etc/alsa which make troubles for debian
rootfs where this dir is used for something else. It
uses just /usr/share/openmoko/scenarios/ which is now
standard location for all distros.

0003 handles renaming of PMU input events

0005 gets rid of apm in favour of sysfs for suspending

All those patches should not break 2.6.24 compatibility
so maybe it makes sense to apply them to QTE improved?

Cheers

Radek


[1] http://dashi-x02.karadog.net/~lihouyu/qtextended/4.4.3/
[2] http://pastebin.com/m4cf5bb93
>From 696d0283506a1a30a047c15443719405673796b4 Mon Sep 17 00:00:00 2001
From: Radek Polak <pson...@seznam.cz>
Date: Sun, 29 Mar 2009 16:11:23 +0200
Subject: [PATCH] patch for 2.6.28 kernels

---
 devices/neo/configure-common       |    2 +-
 devices/neo/custom.cpp             |    8 +++++++-
 devices/neo/server/neobattery.cpp  |   11 +++++++++++
 devices/neo/server/neohardware.cpp |   10 +++++-----
 4 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/devices/neo/configure-common b/devices/neo/configure-common
index ab8a0f3..665d961 100644
--- a/devices/neo/configure-common
+++ b/devices/neo/configure-common
@@ -9,7 +9,7 @@
 -pictureflow
 
 # FIXME Enable this once it actually works
-#-add-mediaengine gstreamer
+-add-mediaengine gstreamer
 # Features that are controlled via modules.
 
 -add-mediaengine cruxus
diff --git a/devices/neo/custom.cpp b/devices/neo/custom.cpp
index 1a54846..cf3c793 100644
--- a/devices/neo/custom.cpp
+++ b/devices/neo/custom.cpp
@@ -41,8 +41,11 @@ QTOPIABASE_EXPORT int qpe_sysBrightnessSteps()
     if (QFileInfo("/sys/class/backlight/gta01-bl/max_brightness").exists() ) {
         //ficgta01
         maxBrightness.setFileName("/sys/class/backlight/gta01-bl/max_brightness");
+    } else if (QFileInfo("/sys/class/backlight/gta02-bl/max_brightness").exists() ) {
+        //ficgta02, recent kernel (> 2.6.28 )
+        maxBrightness.setFileName("/sys/class/backlight/gta02-bl/max_brightness");
     } else {
-        //ficgta02
+        //ficgta02, 'older' kernel (< 2.6.28 )
         maxBrightness.setFileName("/sys/class/backlight/pcf50633-bl/max_brightness");
     }
     if(!maxBrightness.open(QIODevice::ReadOnly | QIODevice::Text)) {
@@ -74,6 +77,9 @@ QTOPIABASE_EXPORT void qpe_setBrightness(int b)
     if (QFileInfo("/sys/class/backlight/gta01-bl/brightness").exists() ) {
         brightness.setFileName("/sys/class/backlight/gta01-bl/brightness");
         //ficgta01
+    } else if (QFileInfo("/sys/class/backlight/gta02-bl/brightness").exists() ) {
+        //ficgta02, recent kernel (> 2.6.28 )
+        brightness.setFileName("/sys/class/backlight/gta02-bl/brightness");
     } else {
         brightness.setFileName("/sys/class/backlight/pcf50633-bl/brightness");
         //ficgta02
diff --git a/devices/neo/server/neobattery.cpp b/devices/neo/server/neobattery.cpp
index 5bf58b1..1555923 100644
--- a/devices/neo/server/neobattery.cpp
+++ b/devices/neo/server/neobattery.cpp
@@ -67,6 +67,9 @@ NeoBattery::NeoBattery(QObject *parent)
     if ( QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/status").exists()) {
         QTimer::singleShot( 10 * 1000, this, SLOT(updateSysStatus()));
         isSmartBattery = true;
+    }else if ( QFileInfo("/sys/class/power_supply/battery/status").exists()) {
+        QTimer::singleShot( 10 * 1000, this, SLOT(updateSysStatus()));
+        isSmartBattery = true;
     } else {
 // 1973 only has dumb battery and must use apm
         QTimer::singleShot( 10 * 1000, this, SLOT(updateDumbStatus()));
@@ -204,6 +207,8 @@ bool NeoBattery::isCharging()
     if (QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/status").exists()) {
          //freerunner
         chargeFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/status";
+    }else if ( QFileInfo("/sys/class/power_supply/battery/status").exists()) {
+        chargeFile = "/sys/class/power_supply/battery/status";
     }
 
 
@@ -255,6 +260,8 @@ int NeoBattery::getCapacity()
     if (QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/capacity").exists()) {
          //freerunner
         strCapacityFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/capacity";
+    }else if ( QFileInfo("/sys/class/power_supply/battery/capacity").exists()) {
+        strCapacityFile = "/sys/class/power_supply/battery/capacity";
     }
 
     int capacity = 0;
@@ -287,6 +294,8 @@ int NeoBattery::getTimeToFull()
     if (QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_full_now").exists()) {
          //freerunner
         timeToFullFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_full_now";
+    }else if ( QFileInfo("/sys/class/power_supply/battery/time_to_full_now").exists()) {
+        timeToFullFile = "/sys/class/power_supply/battery/time_to_full_now";
     }
 
     int time = 0;
@@ -314,6 +323,8 @@ int NeoBattery::getTimeRemaining()
     if (QFileInfo("/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_empty_now").exists()) {
          //freerunner
         timeToEmptyFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_empty_now";
+    }else if ( QFileInfo("/sys/class/power_supply/battery/time_to_empty_now").exists()) {
+        timeToEmptyFile = "/sys/class/power_supply/battery/time_to_empty_now";
     }
 
     int time = 0;
diff --git a/devices/neo/server/neohardware.cpp b/devices/neo/server/neohardware.cpp
index e259094..24709cd 100644
--- a/devices/neo/server/neohardware.cpp
+++ b/devices/neo/server/neohardware.cpp
@@ -169,6 +169,10 @@ bool NeoHardware::getCableStatus()
          //freerunner
         chargeFile = "/sys/devices/platform/bq27000-battery.0/power_supply/bat/status";
     }
+    else if (QFileInfo("/sys/class/power_supply/usb/online").exists()) {
+         //freerunner kernel > 2.6.28
+        chargeFile = "/sys/class/power_supply/usb/online";
+    }
 
 
     QString charge;
@@ -181,11 +185,7 @@ bool NeoHardware::getCableStatus()
     // Charging  Discharging  Not charging
     // ac        battery      ac/full
     chargeState.close();
-    if (charge != ("Discharging")) {
-        return true;
-    } else {
-        return false;
-    }
+    return (charge != ("Discharging") && charge != "0" );
 }
 
 #endif // QT_QWS_NEO
-- 
1.5.5.1

>From e7c9921833fa169ed758ae0562d5ba68d95a1e64 Mon Sep 17 00:00:00 2001
From: Radek Polak <pson...@seznam.cz>
Date: Sun, 29 Mar 2009 16:13:39 +0200
Subject: [PATCH] never use /etc/alsa for audio scenarios, because this dir is created on debian system during alsa-utils installation

---
 .../plugins/audiohardware/neo/neoaudioplugin.cpp   |    6 +-----
 1 files changed, 1 insertions(+), 5 deletions(-)

diff --git a/devices/neo/src/plugins/audiohardware/neo/neoaudioplugin.cpp b/devices/neo/src/plugins/audiohardware/neo/neoaudioplugin.cpp
index 8cbdf5b..6badb89 100644
--- a/devices/neo/src/plugins/audiohardware/neo/neoaudioplugin.cpp
+++ b/devices/neo/src/plugins/audiohardware/neo/neoaudioplugin.cpp
@@ -74,11 +74,7 @@ static const char* mode_to_string[] = {
 
 static bool setAudioScenario(NeoAudioScenario audioScenario)
 {
-    QString confDir;
-    if (QDir("/etc/alsa").exists())
-        confDir = "/etc/alsa/";
-    else
-        confDir = "/usr/share/openmoko/scenarios/";
+    QString confDir = "/usr/share/openmoko/scenarios/";
 
     const char* mode = mode_to_string[static_cast<int>(audioScenario)];
     QString cmd = "/usr/sbin/alsactl -f " + confDir + mode + ".state restore";
-- 
1.5.5.1

>From 02f20e6957b9caf68ecde0dcb33abee9d406ff1f Mon Sep 17 00:00:00 2001
From: Radek Polak <pson...@seznam.cz>
Date: Sun, 29 Mar 2009 22:38:18 +0200
Subject: [PATCH] handle renamed inputs in recent kernels

---
 .../qtopiacore/kbddrivers/neo/neokbdhandler.cpp    |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/devices/neo/src/plugins/qtopiacore/kbddrivers/neo/neokbdhandler.cpp b/devices/neo/src/plugins/qtopiacore/kbddrivers/neo/neokbdhandler.cpp
index 81cce5b..0f6dbe4 100644
--- a/devices/neo/src/plugins/qtopiacore/kbddrivers/neo/neokbdhandler.cpp
+++ b/devices/neo/src/plugins/qtopiacore/kbddrivers/neo/neokbdhandler.cpp
@@ -155,7 +155,10 @@ NeoKbdHandler::NeoKbdHandler()
 
     powerHandler = new FicLinuxInputEventHandler(this);
     if (QFileInfo("/dev/input/event4").exists()){
-        ok =  powerHandler->openByName("GTA02 PMU events");
+        ok =  powerHandler->openByName("PCF50633 PMU events");
+        if(!ok) {
+            ok =  powerHandler->openByName("GTA02 PMU events");
+        }
         isFreerunner = true;
     } else {
         ok =  powerHandler->openByName("FIC Neo1973 PMU events");
-- 
1.5.5.1

>From f8faca36e46c8d825caf5d5a8c5713241b1ab89e Mon Sep 17 00:00:00 2001
From: Radek Polak <pson...@seznam.cz>
Date: Sun, 29 Mar 2009 23:43:09 +0200
Subject: [PATCH] power management for recent kernels

---
 devices/neo/server/neosuspend.cpp |    6 +-----
 1 files changed, 1 insertions(+), 5 deletions(-)

diff --git a/devices/neo/server/neosuspend.cpp b/devices/neo/server/neosuspend.cpp
index 29f7595..3023b70 100644
--- a/devices/neo/server/neosuspend.cpp
+++ b/devices/neo/server/neosuspend.cpp
@@ -66,10 +66,7 @@ bool NeoSuspend::suspend()
 {
     qLog(PowerManagement)<< __PRETTY_FUNCTION__;
 
-      QProcess apm;
-      apm.start("apm", QStringList() << "-s");
-      apm.waitForFinished(-1);
-/*      QFile powerStateFile("/sys/power/state");
+    QFile powerStateFile("/sys/power/state");
     if( !powerStateFile.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)) {
         qWarning()<<"File not opened";
     } else {
@@ -77,7 +74,6 @@ bool NeoSuspend::suspend()
         out << "mem";
         powerStateFile.close();
     }
-*/
     return true;
 }
 
-- 
1.5.5.1

Debian rootfs
=============

Use instructions from http://wiki.openmoko.org/wiki/Manual_Debian

I am installing to NFS dir, so that i can make tarbal on my PC. Mount your NFS
dir to /media/card for simplicity.

Always use ext3 on SD cards - ext2 often gets corrupted during reboots.

Step 1
======

* Install cdebootstrap-static binary on your Neo. This can be done only once.

wget 
http://ftp.de.debian.org/debian/pool/main/c/cdebootstrap/cdebootstrap-static_0.5.4_armel.deb
ar -x cdebootstrap-static_0.5.4_armel.deb data.tar.gz
tar -xz -C / -f data.tar.gz
rm data.tar.gz cdebootstrap-static_0.5.4_armel.deb
wget 
http://ftp.de.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2009.01.31_all.deb
ar -x debian-archive-keyring_2009.01.31_all.deb data.tar.gz
tar -xz -C / -f data.tar.gz
rm data.tar.gz debian-archive-keyring_2009.01.31_all.deb


Step 2
======

cdebootstrap-static --flavour=minimal 
--include=ifupdown,udev,procps,netbase,nano,module-init-tools,wget,openssh-server,screen,mc,libasound2,libts-0.0-0,alsa-utils,ppp
 stable /media/card/ http://ftp.de.debian.org/debian/

Step 3
======

* Complete installation. Copy paste below in shell:

echo "neo1973-debian" > /media/card/etc/hostname
cat > /media/card/etc/network/interfaces <<__END__
auto lo
iface lo inet loopback
auto usb0
iface usb0 inet static
    address 192.168.0.202
    netmask 255.255.255.0
    network 192.168.0.0
    gateway 192.168.0.200
    up echo nameserver 192.168.0.200 >/etc/resolv.conf
__END__
cat > /media/card/etc/fstab << __END__
rootfs  /                auto    defaults,errors=remount-ro,noatime 0 1
proc    /proc            proc    defaults                           0 0
tmpfs   /etc/network/run tmpfs   defaults,noatime                   0 0
tmpfs   /tmp             tmpfs   defaults,noatime                   0 0
tmpfs   /var/lock        tmpfs   defaults,noatime                   0 0
tmpfs   /var/run         tmpfs   defaults,noatime                   0 0
tmpfs   /var/tmp         tmpfs   defaults,noatime                   0 0
__END__
cat > /media/card/etc/apt/apt.conf.d/99no-install-recommends << __END__
APT::Install-Recommends "0";
__END__
sed -i 's/\(PermitEmptyPasswords\) no/\1 yes/' /media/card/etc/ssh/sshd_config
chroot /media/card /bin/sh -e <<__END_CHROOT__
echo root: | chpasswd
apt-get --yes --purge remove cdebootstrap-helper-rc.d
__END_CHROOT__

Step 4
======

* Nameservers and udev rules for ttySAC node

* edit /media/card/etc/resolv.conf

nameserver 208.67.222.222
nameserver 208.67.220.220

* Modem device nodes via USB - this does not work yet, any ideas?

echo "# Samsung UARTS" >> /media/card/etc/udev/rules.d/50-udev.rules
echo "KERNEL=="s3c2410_serial[0-9]",   NAME=\"ttySAC%n\"" >> 
/media/card/etc/udev/rules.d/50-udev.rules

* Unpack alsa scenarios to /usr/share/openmoko - you can find these files
  in any openmoko distro.

* Edit /etc/ppp/options and replace "auth" with "noauth"

Step 5
======

* Fix incompatible libts version

cd /media/card/usr/lib
ln -s libts-0.0.so.0 libts-1.0.so.0

* Remove .udev dir, that confuses udev. This dir is here after instalation and
  causes some error/warnings during init. Not sure what's the exact problem.

cd /media/card/dev
rm -rf .udev

Step 6
======

* Copy your QTE install

cd /media/card
tar xzvpf qtopia-update.tar.gz

Step 7
======

* Add this to /etc/rc.local

mknod /dev/ttySAC0 c 204 64 -m 660
chgrp dialout /dev/ttySAC0
echo 1 > /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on
source /opt/Trolltech/Qtopia/qpe.env
qpe &

Step 8 - launching via qpe.sh, i dont use this
==============================================

* Edit init script for qtopia:

nano /media/card/opt/Trolltech/Qtopia/qpe.sh

* On the very top change interpreter from /bin/ash to /bin/sh

* For 2.6.28 kernels we dont have /dev/input/touchscreen0 so fix it like this:

#export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_TSDEVICE=/dev/input/event1

* And after export handle creating modem dev node:

mknod /dev/ttySAC0 c 204 64 -m 660
chgrp dialout /dev/ttySAC0

* Make QTE to launch automatically:

cp /media/card/opt/Trolltech/Qtopia/qpe.sh /media/card/etc/init.d/qpe.sh
cd /media/card/etc/rc5.d
ln -s ../init.d/qpe.sh S98qpe.sh

Step 9
======

* Compile and copy kernel to /media/card/boot

cd /media/card/boot
echo "console=tty0 loglevel=8 rootdelay=1" > append-GTA02
scp /home/radek/linux-2.6/GTA02/uImage-GTA02.bin 
r...@192.168.0.202:/media/card/boot/uImage-GTA02.bin

Step 10
=======

* Pack it all

cd /media/card
tar -czvf ../qte-debian.tar.gz .
_______________________________________________
Openmoko community mailing list
community@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/community

Reply via email to