Hack-A-N900/Development Notes: Unterschied zwischen den Versionen
(19 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | + | N900 Development Notes | |
Not meant as a public resources. Just cluttered notes (meaning written in a hurry) that src, cyphunk are sharing with each other for remote collaboration on a project. | Not meant as a public resources. Just cluttered notes (meaning written in a hurry) that src, cyphunk are sharing with each other for remote collaboration on a project. | ||
− | + | = SDK Types = | |
Nokia have switch mental frames of thought for how they want to develop their phones and the result is a few different paths one must choose from. | Nokia have switch mental frames of thought for how they want to develop their phones and the result is a few different paths one must choose from. | ||
Zeile 12: | Zeile 12: | ||
We have tried all 3 but are currently using MADDE which appears to have better Qt Creator integration than Scratchbox does. Also the Meego SDK is specific to n900 phones running Meego, which is not officially support yet. It works, but not well on 64 bit workstations. | We have tried all 3 but are currently using MADDE which appears to have better Qt Creator integration than Scratchbox does. Also the Meego SDK is specific to n900 phones running Meego, which is not officially support yet. It works, but not well on 64 bit workstations. | ||
− | + | = Installing MADDE SDK = | |
− | + | == Download and Install == | |
− | There is one decent installation document[http://wiki.maemo.org/MADDE] but it links to two different installers. Before getting to the installation steps the "Nokia Qt SDK (Release Candidate)" installer | + | There is one decent installation document[http://wiki.maemo.org/MADDE] but it links to two different installers. Before getting to the installation steps the it links first to the "''Nokia Qt SDK (Release Candidate)''" installer but in the actual installation directions it tells you to download an install shell script from "''MADDE downloads''" in step 1. Both might work but we are using the "Nokia Qt SDK (Release Candidate)" installer http://www.forum.nokia.com/info/sw.nokia.com/id/e920da1a-5b18-42df-82c3-907413e525fb/Nokia_Qt_SDK.html |
− | We installed this to ~/nokiaqtsdk, with the default setup. We checked the box to overwrite Qt Creator settings. After completed we created a local link to the QtCreator in the SDK so that we dont get mixed up with the various SDK's weve installed: | + | We installed this to ''~/nokiaqtsdk'', with the ''default'' setup. We checked the box to ''overwrite Qt Creator settings''. After completed we created a local link to the QtCreator in the SDK so that we dont get mixed up with the various SDK's weve installed: |
<pre> | <pre> | ||
ln -s ~/nokiaqtsdk/QtCreator/bin/qtcreator ~/bin/qtcreator_nokiaqtsdk | ln -s ~/nokiaqtsdk/QtCreator/bin/qtcreator ~/bin/qtcreator_nokiaqtsdk | ||
Zeile 23: | Zeile 23: | ||
</pre> | </pre> | ||
− | + | == Configure == | |
− | After installation we used the "QtCreator integration for Linux" guide[http://wiki.maemo.org/MADDE/QtCreator_integration_for_linux]. This will let you deploy applications to either the emulator or phone. For now lets just get the emulator working. Specifically we did the following (more details in the linked guide) from within the qtcreator_nokiaqtsdk: | + | After installation we used the "''QtCreator integration for Linux''" guide[http://wiki.maemo.org/MADDE/QtCreator_integration_for_linux]. This will let you deploy applications to either the emulator or phone. For now lets just get the emulator working. Specifically we did the following (more details in the linked guide) from within the qtcreator_nokiaqtsdk: |
<pre> | <pre> | ||
Tools -> Options -> Qt4 -> Qt Versions | Tools -> Options -> Qt4 -> Qt Versions | ||
Zeile 37: | Zeile 37: | ||
</pre> | </pre> | ||
− | The "Debugging helper" status might show a red "X". If it does, click the "Rebuild" button for both of the above entries. This should be enough to start building example projects. | + | The "''Debugging helper''" status might show a red "X". If it does, click the "''Rebuild''" button for both of the above entries. This should be enough to start building example projects. |
− | + | == Compile Hello World == | |
Simple example (src[http://wiki.maemo.org/MADDE/Qt_example]). The following will create a hello world qt creator project called qthello in the current directory: | Simple example (src[http://wiki.maemo.org/MADDE/Qt_example]). The following will create a hello world qt creator project called qthello in the current directory: | ||
<pre> | <pre> | ||
Zeile 46: | Zeile 46: | ||
</pre> | </pre> | ||
− | Open the qthello project in QtCreator and | + | Open the qthello project in QtCreator. When you open it the first time, and when you create new projects for that matter, it will ask you to setup the targets. Be sure that you enable it for both "''Qt for Fremantle PR1.2 Devices (Nokia Qt SDK)''" and "''Simulator Qt for GCC (Nokia Qt SDK)''". Now compile and run with the Simulator selected as the target and you should see your app show up in a Nokia N900 like window. |
− | === Installing | + | |
+ | = Installing Scratchbox SDK = | ||
+ | http://wiki.maemo.org/Documentation/Maemo_5_Final_SDK_Installation | ||
+ | |||
+ | = Installing Libraries = | ||
There are the nokia closed-source libraries and other libraries from the community that you might want to use in your application. For example, I would like to use TpSession[http://tpsession.garage.maemo.org/] which is an abstraction for the TelepathyQt4 API letting one manage sms's, phone calls, etc. | There are the nokia closed-source libraries and other libraries from the community that you might want to use in your application. For example, I would like to use TpSession[http://tpsession.garage.maemo.org/] which is an abstraction for the TelepathyQt4 API letting one manage sms's, phone calls, etc. | ||
− | + | == In MADDE for Simulator == | |
− | To install TpSession | + | To install TpSession to your MADDE SDK you need to install TelepathyQt4 on your workstation, ''apt-get install libtelepathy-qt4-dev''. Then compile TpSession (git clone https://vcs.maemo.org/git/tpsession) for your workstation and/or target. Then you have to copy the lib to the root dir of your target and add the location to the INCLUDES of the .pro file for the project. (thread discussion with more details[http://talk.maemo.org/showthread.php?t=56602]). Command log for using lib on local emulator: |
<pre> | <pre> | ||
Zeile 67: | Zeile 71: | ||
</pre> | </pre> | ||
− | ==== In MADDE ==== | + | For now we have tested this only with the local emulator. |
− | + | ||
+ | == In Scratchbox for Simulator == | ||
+ | Same steps as for MADDE except that you will need to install the nokia libs which you have to agreed to a ALU for. See steps 7 through 7.2 at http://wiki.maemo.org/Documentation/Maemo_5_Final_SDK_Installation#Installing_Maemo_5_SDK_on_x86-32_Debian_based_distribution | ||
+ | |||
+ | == In MADDE for N900 Target == | ||
+ | The sysroot that comes with the MADDE sdk is "slim" and is missing a slew of libs that were available in the Scratchbox setup. For example, the 3rd party tpsession library requires the 2nd party libtelepathy-qt4. 3 solutions exist for getting telepathy into the sysroot for a Maemo target: | ||
+ | |||
+ | 1. Copy libs from scratchbox. see[http://talk.maemo.org/showthread.php?t=56602] | ||
+ | 2. Install libs locally on the N900 and then copy them back to your workstation. see[http://talk.maemo.org/showthread.php?t=56602] | ||
+ | 3. Download the deb for the lib from the scratchbox installation. Described here: | ||
+ | <pre> | ||
+ | $ wget --mirror --no-parent --no-host-directories --cut-dirs=5 --accept *armel.deb -e robots=off http://repository.maemo.org/extras-d...telepathy-qt4/ | ||
+ | $ cd telepathy-qt4 | ||
+ | $ for i in *.deb; do dpkg-deb --extract $i `echo -n $i | sed 's/.deb//'`; done | ||
+ | </pre> | ||
+ | There are two revisions for each package and to determine which one the MADDE SDK required we can compare some of the telepathy files already installed in the slim sysrootm. For example, the telepathy lib is already installed and if we compare the file size with the downloaded packages we can see that we need revision2: | ||
+ | <pre> | ||
+ | $ ls -l ~/nokiaqtsdk/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/libtelepathy-qt4.so.0.0.0 | ||
+ | -rw-r--r-- 2 user user 2646296 2010-10-11 08:42 libtelepathy-qt4.so.0.0.0 | ||
+ | $ ls -l ./libtelepathy-qt4-0_0.2.0-1maemo5_armel/usr/lib/libtelepathy-qt4.so.0.0.0 | ||
+ | -rw-r--r-- 1 user user 2648944 2010-02-08 20:39 libtelepathy-qt4.so.0.0.0 | ||
+ | $ ls -l ./libtelepathy-qt4-0_0.2.0-2maemo5_armel/usr/lib/libtelepathy-qt4.so.0.0.0 | ||
+ | -rw-r--r-- 1 user user 2646296 2010-04-13 19:58 libtelepathy-qt4.so.0.0.0 | ||
+ | </pre> | ||
+ | |||
+ | Now copy the required telepathy lib .so's to the nokia SDK target sysroot: | ||
+ | |||
+ | <pre> | ||
+ | $ cp ./libtelepathy-qt4-0_0.2.0-1maemo5_armel/usr/lib/libtelepathy-qt4.so.0* /home/user/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/. | ||
+ | </pre> | ||
+ | I question if it is wise to use the headers from the local QT telepathy installation on the local workstation so you "might" consider using the headers from the .deb's as well and then adding it to your INCLUDEPATH of the .pro: | ||
+ | <pre> | ||
+ | $ cp ./libtelepathy-qt4-dev_0.2.0-2maemo5_armel/usr/lib/libtelepathy-qt4.a /home/user/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/. | ||
+ | </pre> | ||
+ | |||
+ | This might be enough but for some reason i had an issue that the link loader in one of my applications was always loading the local libtelepathy-qt4.so. So I added the following in place of the '-ltelepathy': | ||
+ | <pre> | ||
+ | LIBS += /home/user/nokiaqtsdk/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/libtelepathy-qt4.a | ||
+ | </pre> | ||
+ | |||
+ | Also, in the process of debugging I created a small script to compare the symbol tables of two files, should anyone be interested: [[cmpsymtbl.pl]] | ||
− | + | = Qt API's = | |
− | + | == Saving Application Settings == | |
[http://doc.qt.nokia.com/4.6/qsettings.html#details] | [http://doc.qt.nokia.com/4.6/qsettings.html#details] |
Aktuelle Version vom 13. Oktober 2010, 01:16 Uhr
N900 Development Notes
Not meant as a public resources. Just cluttered notes (meaning written in a hurry) that src, cyphunk are sharing with each other for remote collaboration on a project.
SDK Types
Nokia have switch mental frames of thought for how they want to develop their phones and the result is a few different paths one must choose from.
- Maemo Scratchbox
- Maemo MADDE
- Meego SDK
We have tried all 3 but are currently using MADDE which appears to have better Qt Creator integration than Scratchbox does. Also the Meego SDK is specific to n900 phones running Meego, which is not officially support yet. It works, but not well on 64 bit workstations.
Installing MADDE SDK
Download and Install
There is one decent installation document[1] but it links to two different installers. Before getting to the installation steps the it links first to the "Nokia Qt SDK (Release Candidate)" installer but in the actual installation directions it tells you to download an install shell script from "MADDE downloads" in step 1. Both might work but we are using the "Nokia Qt SDK (Release Candidate)" installer http://www.forum.nokia.com/info/sw.nokia.com/id/e920da1a-5b18-42df-82c3-907413e525fb/Nokia_Qt_SDK.html
We installed this to ~/nokiaqtsdk, with the default setup. We checked the box to overwrite Qt Creator settings. After completed we created a local link to the QtCreator in the SDK so that we dont get mixed up with the various SDK's weve installed:
ln -s ~/nokiaqtsdk/QtCreator/bin/qtcreator ~/bin/qtcreator_nokiaqtsdk ln -s ~/nokiaqtsdk/Maemo/4.6.2/bin/mad ~/bin/mad_nokiaqtsdk ln -s ~/nokiaqtsdk/Maemo/4.6.2/bin/mad-admin ~/bin/mad-admin_nokiaqtsdk
Configure
After installation we used the "QtCreator integration for Linux" guide[2]. This will let you deploy applications to either the emulator or phone. For now lets just get the emulator working. Specifically we did the following (more details in the linked guide) from within the qtcreator_nokiaqtsdk:
Tools -> Options -> Qt4 -> Qt Versions
Make certain you have the following entries:
Version name: Simulator Qt for GCC (Nokia Qt SDK) qmake location: /home/user/nokiaqtsdk/Simulator/Qt/gcc/bin/qmake Version name: Qt for Fremantle PR1.2 Devices (Nokia Qt SDK) qmake location: /home/user/nokiaqtsdk/Maemo/4.6.2/targets/fremantle-1030/bin/qmake
The "Debugging helper" status might show a red "X". If it does, click the "Rebuild" button for both of the above entries. This should be enough to start building example projects.
Compile Hello World
Simple example (src[3]). The following will create a hello world qt creator project called qthello in the current directory:
$ mad_nokiaqtsdk pscreate -l $ mad_nokiaqtsdk pscreate -t qt_simple qthello
Open the qthello project in QtCreator. When you open it the first time, and when you create new projects for that matter, it will ask you to setup the targets. Be sure that you enable it for both "Qt for Fremantle PR1.2 Devices (Nokia Qt SDK)" and "Simulator Qt for GCC (Nokia Qt SDK)". Now compile and run with the Simulator selected as the target and you should see your app show up in a Nokia N900 like window.
Installing Scratchbox SDK
http://wiki.maemo.org/Documentation/Maemo_5_Final_SDK_Installation
Installing Libraries
There are the nokia closed-source libraries and other libraries from the community that you might want to use in your application. For example, I would like to use TpSession[4] which is an abstraction for the TelepathyQt4 API letting one manage sms's, phone calls, etc.
In MADDE for Simulator
To install TpSession to your MADDE SDK you need to install TelepathyQt4 on your workstation, apt-get install libtelepathy-qt4-dev. Then compile TpSession (git clone https://vcs.maemo.org/git/tpsession) for your workstation and/or target. Then you have to copy the lib to the root dir of your target and add the location to the INCLUDES of the .pro file for the project. (thread discussion with more details[5]). Command log for using lib on local emulator:
sudo apt-get install libtelepathy-qt4-dev libsqlite3-dev git clone https://vcs.maemo.org/git/tpsession cd tpsession/tpsession-0.1/ find ./ -name Makefile -exec rm -f {} \; qmake && make && make install
Might need to edit the INCLUDES in projects .pro file. For using on a target you need to install the nokia closed source libs and recompile tpsession for the phone and then:
cp tpsession/libtpsession.so* <target_working_lib_dir>
For now we have tested this only with the local emulator.
In Scratchbox for Simulator
Same steps as for MADDE except that you will need to install the nokia libs which you have to agreed to a ALU for. See steps 7 through 7.2 at http://wiki.maemo.org/Documentation/Maemo_5_Final_SDK_Installation#Installing_Maemo_5_SDK_on_x86-32_Debian_based_distribution
In MADDE for N900 Target
The sysroot that comes with the MADDE sdk is "slim" and is missing a slew of libs that were available in the Scratchbox setup. For example, the 3rd party tpsession library requires the 2nd party libtelepathy-qt4. 3 solutions exist for getting telepathy into the sysroot for a Maemo target:
1. Copy libs from scratchbox. see[6] 2. Install libs locally on the N900 and then copy them back to your workstation. see[7] 3. Download the deb for the lib from the scratchbox installation. Described here:
$ wget --mirror --no-parent --no-host-directories --cut-dirs=5 --accept *armel.deb -e robots=off http://repository.maemo.org/extras-d...telepathy-qt4/ $ cd telepathy-qt4 $ for i in *.deb; do dpkg-deb --extract $i `echo -n $i | sed 's/.deb//'`; done
There are two revisions for each package and to determine which one the MADDE SDK required we can compare some of the telepathy files already installed in the slim sysrootm. For example, the telepathy lib is already installed and if we compare the file size with the downloaded packages we can see that we need revision2:
$ ls -l ~/nokiaqtsdk/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/libtelepathy-qt4.so.0.0.0 -rw-r--r-- 2 user user 2646296 2010-10-11 08:42 libtelepathy-qt4.so.0.0.0 $ ls -l ./libtelepathy-qt4-0_0.2.0-1maemo5_armel/usr/lib/libtelepathy-qt4.so.0.0.0 -rw-r--r-- 1 user user 2648944 2010-02-08 20:39 libtelepathy-qt4.so.0.0.0 $ ls -l ./libtelepathy-qt4-0_0.2.0-2maemo5_armel/usr/lib/libtelepathy-qt4.so.0.0.0 -rw-r--r-- 1 user user 2646296 2010-04-13 19:58 libtelepathy-qt4.so.0.0.0
Now copy the required telepathy lib .so's to the nokia SDK target sysroot:
$ cp ./libtelepathy-qt4-0_0.2.0-1maemo5_armel/usr/lib/libtelepathy-qt4.so.0* /home/user/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/.
I question if it is wise to use the headers from the local QT telepathy installation on the local workstation so you "might" consider using the headers from the .deb's as well and then adding it to your INCLUDEPATH of the .pro:
$ cp ./libtelepathy-qt4-dev_0.2.0-2maemo5_armel/usr/lib/libtelepathy-qt4.a /home/user/NokiaQtSDK/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/.
This might be enough but for some reason i had an issue that the link loader in one of my applications was always loading the local libtelepathy-qt4.so. So I added the following in place of the '-ltelepathy':
LIBS += /home/user/nokiaqtsdk/Maemo/4.6.2/sysroots/fremantle-arm-sysroot-1030-slim/usr/lib/libtelepathy-qt4.a
Also, in the process of debugging I created a small script to compare the symbol tables of two files, should anyone be interested: cmpsymtbl.pl