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