率剑士 发表于 2022-11-3 12:01:31

使用QtSdk为N9 harmattan开发程序

转自贴吧-      王利卫吧-愤恨的歌
https://tieba.baidu.com/p/2250481951
N9可以说是首款真正的Qt powered phone。要在N9上开发程序,有很多环境和机制,但最为强大,也是诺基亚官方推荐的开发平台,就是Qt Sdk。因为CivilNet Blog 2012发布在即,gemfield本文使用了很少的插图,以减轻2012年gemfield博客迁移的难度和工作量。所以,阅读此文将需要更多的耐心,如果有任何疑问,可以在http://syszux.com/qt上提问。

gemfield本文的平台基于windows 7(PC)+Qt Sdk 1.1.4+nokia N9。
第一、准备平台。
1、如果你的PC不是windows 7系统,那么此文将会和你的实际情况有细微的差异(差异部分会在gemfield下文提到),你可以到http://syszux.com/qt上寻求帮助;
2、从http://qt.nokia.com/downloads/sdk-windows-cpp-offline处下载Qt Sdk ,安装到windows平台上;
3、有一个N9设备。
第二、在N9上打开开发者模式。应用程序界面——设置——安全性——开发人员模式——开发人员模式,拨动开关至开,弹出对话框(是否启动开发人员模式?),点击“确认”按钮,弹出“关联项通知”对话框(这个时候需要下载2.6M的应用程序),点击“接受”按钮,然后出现下载“developer mode package”的进度条,进度条完成后会自动重启N9。
第三、N9自动重启后,最直观的改变是,应用程序界面多了2个程序图标:一个是linux上大名鼎鼎的terminal(命令行),一个是SDK connection(连接电脑和手机)。其实,还安装了2个在terminal上可以打开的程序:
1、ssh: ssh客户端,gemfield的N9可以使用这个登陆到其他电脑或手机;
2、devel-su: Harmattan平台上的su工具,使用过debian、ubuntu的人应该很熟悉,通过devel-su可以获得root权限(实际上是受限的root)。
此外,还安装了一些服务:
1、openssh-server: 有了这个,gemfield的电脑才可以通过ssh协议登陆到手机上;
2、develsh: N9解析 openssh-server的shell;
3、sysklogd: 内核登陆及其他信息服务;
4、gdbserver: 调试工具。
第四、让你的N9连接到电脑上。从N9应用程序界面上打开sdk-connection,点击“usb”按钮,然后N9通过usb数据线接到电脑上。在手机弹出的模式选择对话框里选择“SDK模式”。这个时候,N9和电脑同时在完成一些工作:
1、对于N9来说,SDK Connectivity 工具在Connectivity Details界面上显示了一个IP地址:192.168.2.15,并生成一个由6个字母组成的密码。注意,要使用Qt Sdk,这个程序不能关闭。
2、在windows 7电脑上,Windows 7将会自动安装Linux USB Ethernet connection 驱动. 如果这个驱动没有自动安装,拔掉USB线试试电脑的其他USB口。(windows xp在此会弹出安装驱动的对话框,选择自动安装的方式)。然后到开始——控制面板——查看方式:小图标——网络和共享中心——更改适配器设置,刚才windows 7自动安装的Linux USB Ethernet connection 驱动会显示为一个新的本地连接:Nokia Ethernet/RNDIS based Device。右键这个本地连接,选择“属性”,在弹出的对话框中双击“Internet 协议版本4”,自动获得IP(默认就是这个)。你也可以在命令提示符里使用ipconfig命令查看这个本地连接的IP。
第五、设置电脑上的Qt Sdk 1.1.4。从“开始”里打开Qt creator,工具——选项——linux设备,在这个页面上点击“添加”按钮来设置一个新的N9设备,点击按钮之后,出来一个配置向导:
1、选择“设备拥有MADDE支持(例如:Freemantal,Harmattan,MeeGo)”,点击“开启向导”按钮;
2、说明配置的名称处填写“gemfield的N9”,或你喜欢的名字。系统运行在设备:MeeGo 1.2 Harmattan。点击“下一步”;
3、点击“下一步”;
4、点击“下一步”创建新密钥;
5、点击“密钥创建按钮”,再点击“下一步”;
6、设备地址:192.168.2.15,密码:N9上的Connectivity Details界面上那6个字母;然后点击“部署密钥”按钮,向导开始部署,成功后弹出“对话框”。点击“确定”关闭该提示框,然后点击“下一步”;
7、点击“完成”按钮;
8、Qt Creator将会进行与N9的连接测试,成功的话将会显示下面的消息:
****************************************************************************
硬件架构:armv7l
内核版本:2.6.32.39-dfl61-20113701
已经安装的Qt包列表:
libqt-noa 0.1.36+0m6
libqt4 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-core 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-dbus 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-declarative 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-gui 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-meego 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-meegographicssystem 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-meegographicssystemhelper 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-network 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-opengl 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-phonon 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-script 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-sql 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-sql-sqlite 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-svg 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-test 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-xml 4.7.4~git20110728-pr11-0maemo11+0m6
libqt4-xmlpatterns 4.7.4~git20110728-pr11-0maemo11+0m6
libqtcontacts-calendaractions 0.10.9-2+0m6
libqtcontacts-emaileditoractions 0.10.9-2+0m6
libqtcontacts-extensions-tracker0 4.15.4.1-1+0m6
libqtcontacts-mapactions 0.10.9-2+0m6
libqtcontacts-simcard 0.10.9-2+0m6
libqtcontacts-social 0.10.9-2+0m6
libqtcontacts-telepathy 0.1.1-2+0m6
libqtcontacts-telepathyactions 0.10.9-2+0m6
libqtcontacts-tracker 4.15.4.1-1+0m6
libqtcontacts-webactions 0.10.9-2+0m6
libqtcore4 4.7.4~git20110728-pr11-0maemo11+0m6
libqtgui4 4.7.4~git20110728-pr11-0maemo11+0m6
libqtm-connectivity 1.2.1+198+0m6
libqtm-contacts 1.2.1+198+0m6
libqtm-feedback 1.2.1+198+0m6
libqtm-gallery 1.2.1+198+0m6
libqtm-location 1.2.1+198+0m6
libqtm-messaging 1.2.1+198+0m6
libqtm-multimedia 1.2.1+198+0m6
libqtm-organizer 1.2.1+198+0m6
libqtm-publishsubscribe 1.2.1+198+0m6
libqtm-sensors 1.2.1+198+0m6
libqtm-serviceframework 1.2.1+198+0m6
libqtm-systeminfo 1.2.1+198+0m6
libqtm-versit 1.2.1+198+0m6
libqtm-versitorganizer 1.2.1+198+0m6
libqtsparql-tracker 0.1.2+0m6
libqtsparql-tracker-direct 0.1.2+0m6
libqtsparql-tracker-extensions0 0.0.11+0m6
libqtsparql-tracker-live0 0.0.11+0m6
libqtsparql0 0.1.2+0m6
libqtwebkit-meegotouchplugin 0.1.2-5+0m6
libqtwebkit-qmlwebkitplugin 2.1.1~git20110418-0maemo4+0m6
libqtwebkit4 2.1.1~git20110418-0maemo4+0m6
所有指定的端口都可用。
*************************************************************************************
9、点击“关闭”按钮回到linux 设备界面,检查以下设置:
***********************************************************************************
设备类型: 物理设备
验证类型:密钥
主机名称(H):192.168.2.15
SSH 端口(S): 22
空闲端口: 10000-10100
连接超时: 30s
用户名: developer
***********************************************************************************
10、点击“确定”按钮,关闭选项页面。
第六、运行Hello World程序到N9上。以下的操作都在Qt creator上。
1、文件——新建文件或工程——左边:Qt Quick项目,右边:Qt Quick应用程序——点击“选择”;
2、输入工程名称:gemfield-N9,并确保“名称”和“创建路径”中没有包含空格,点击“下一步”;
3、在“Qt Quick应用类型”中选择“MeeGo/Harmattan的Qt Quick组件”;点击“下一步”;
4、在“目标设置”向导框中选择“Harmattan”,点击“下一步”;
5、点击“下一步”;
6、点击“完成”;
7、在弹出的对话框中选择“是”;
第七、在下图中:

1、检查1处是在“Harmattan”设备上;
2、无误后点击2处的按钮;
3、在3处可以看程序编译的过程,编译信息大致如下:
                  ***************************************************************************************
为项目gemfieldN9执行构建步骤 …
正在启动 “c:\qtsdk\madde\targets\harmattan_10.2011.34-1\bin\qmake.exe” F:\gemfield.pro\gemfieldN9\gemfieldN9.pro -r -spec default -unix -after “OBJECTS_DIR=obj” “MOC_DIR=moc” “UI_DIR=ui” “RCC_DIR=rcc”
{1〃?} {2?}
-unix is deprecated.
进程”c:\qtsdk\madde\targets\harmattan_10.2011.34-1\bin\qmake.exe”正常退出。
正在启动 “C:\qtsdk\madde\bin\make.exe” -w
{1〃?} {2?}
make: Entering directory `/f/gemfield.pro/gemfieldN9′
g++ -c -pipe -O2 -g -Wno-psabi -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -I/usr/include/applauncherd -Wall -W -D_REENTRANT -DHARMATTAN_BOOSTER -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/share/qt4/mkspecs/default -I. -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtCore -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtGui -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtDeclarative -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4 -Iqmlapplicationviewer -Imoc -o obj/main.o main.cpp
g++ -c -pipe -O2 -g -Wno-psabi -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -I/usr/include/applauncherd -Wall -W -D_REENTRANT -DHARMATTAN_BOOSTER -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/share/qt4/mkspecs/default -I. -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtCore -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtGui -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtDeclarative -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4 -Iqmlapplicationviewer -Imoc -o obj/qmlapplicationviewer.o qmlapplicationviewer/qmlapplicationviewer.cpp
C:/QtSDK/Madde/targets/harmattan_10.2011.34-1/bin/moc.exe -DHARMATTAN_BOOSTER -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/share/qt4/mkspecs/default -I. -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtCore -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtGui -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtDeclarative -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4 -Iqmlapplicationviewer -Imoc qmlapplicationviewer/qmlapplicationviewer.h -o moc/moc_qmlapplicationviewer.cpp
g++ -c -pipe -O2 -g -Wno-psabi -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -I/usr/include/applauncherd -Wall -W -D_REENTRANT -DHARMATTAN_BOOSTER -DQT_NO_DEBUG -DQT_DECLARATIVE_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/share/qt4/mkspecs/default -I. -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtCore -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtGui -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4/QtDeclarative -Ic:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/include/qt4 -Iqmlapplicationviewer -Imoc -o obj/moc_qmlapplicationviewer.o moc/moc_qmlapplicationviewer.cpp
g++ -Wl,-O1 -o gemfieldN9 obj/main.o obj/qmlapplicationviewer.o obj/moc_qmlapplicationviewer.o -LC:/QtSDK/Madde/sysroots/harmattan_sysroot_10.2011.34-1_slim/usr/lib -pie -rdynamic -lmdeclarativecache -lQtDeclarative -lQtGui -lQtCore -lpthread
make: Leaving directory `/f/gemfield.pro/gemfieldN9′
进程”C:\qtsdk\madde\bin\make.exe”正常退出。
创建包文件…
生成包:运行命令’c:/qtsdk/madde/bin/mad dpkg-buildpackage -nc -uc -us’.
dpkg-buildpackage: set CFLAGS to default value: -g -O2
dpkg-buildpackage: set CPPFLAGS to default value:
dpkg-buildpackage: set LDFLAGS to default value:
dpkg-buildpackage: set FFLAGS to default value: -g -O2
dpkg-buildpackage: set CXXFLAGS to default value: -g -O2
which: pgp: unknown command
dpkg-buildpackage: source package gemfieldn9
dpkg-buildpackage: source version 0.0.1
dpkg-buildpackage: source changed by unknown <>
dpkg-buildpackage: host architecture armel
debian/rules build
dh_testdir
# qmake PREFIX=/usr# Uncomment this line for use without Qt Creator
touch configure-stamp
dh_testdir
# Add here commands to compile the package.
# /usr/bin/make # Uncomment this line for use without Qt Creator
#docbook-to-man debian/gemfieldn9.sgml > gemfieldn9.1
touch build-stamp
debian/rules binary
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/gemfieldn9.
/usr/bin/make INSTALL_ROOT=”/f/gemfield.pro/gemfieldN9〃/debian/gemfieldn9 install
make: Entering directory `/f/gemfield.pro/gemfieldN9′
cp -f -r f:/gemfield.pro/gemfieldN9/qml/gemfieldN9 /f/gemfield.pro/gemfieldN9/debian/gemfieldn9/opt/gemfieldN9/qml/
install -m 644 -p f:/gemfield.pro/gemfieldN9/gemfieldN980.png /f/gemfield.pro/gemfieldN9/debian/gemfieldn9/usr/share/icons/hicolor/80×80/apps/
install -m 644 -p f:/gemfield.pro/gemfieldN9/gemfieldN9_harmattan.desktop /f/gemfield.pro/gemfieldN9/debian/gemfieldn9/usr/share/applications/
install -m 755 -p “gemfieldN9〃 “/f/gemfield.pro/gemfieldN9/debian/gemfieldn9/opt/gemfieldN9/bin/gemfieldN9〃
make: Leaving directory `/f/gemfield.pro/gemfieldN9′
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installexamples
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps # Uncomment this line for use without Qt Creator
dh_gencontrol
dpkg-shlibdeps: warning: dependency on libgcc_s.so.1 could be avoided if “debian/gemfieldn9/opt/gemfieldN9/bin/gemfieldN9〃 were not uselessly linked against it (they use none of its symbols).
dpkg-shlibdeps: warning: dependency on libpthread.so.0 could be avoided if “debian/gemfieldn9/opt/gemfieldN9/bin/gemfieldN9〃 were not uselessly linked against it (they use none of its symbols).
dpkg-gencontrol: warning: unknown substitution variable ${misc:Depends}
dh_md5sums
dh_builddeb
aegis-manifest: No findings in ‘gemfieldn9′.
dpkg-genchanges -b -u.. >../gemfieldn9_0.0.1_armel.changes
dpkg-buildpackage: binary only upload (no source included)
dpkg-genchanges: binary-only upload – not including any source code
Can’t locate Debian/Debhelper/Dh_Lib.pm in @INC (@INC contains: /usr/lib/perl5/5.8/msys /usr/lib/perl5/5.8 /usr/lib/perl5/site_perl/5.8/msys /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/msys /usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at c:/qtsdk/madde/madbin/dh_clean line 10.
BEGIN failed–compilation aborted at c:/qtsdk/madde/madbin/dh_clean line 10.
打包完成.
正在安装包至sysroot…
Package ‘gemfieldn9′ installed.
正在连接设备…
准备创建SFTP连接…
Starting upload…
上传包文件成功.
正在安装包至设备…
Selecting previously deselected package gemfieldn9.
(Reading database … 40499 files and directories currently installed.)
Unpacking gemfieldn9 (from …/gemfieldn9_0.0.1_armel.deb) …
aegis-installing gemfieldn9 (from ”)
Setting up gemfieldn9 (0.0.1) …
Processing triggers for desktop-file-utils …
Processing triggers for hicolor-icon-theme …
包安装成功.
部署完成.

第八、一切无误后,程序将运行在你的N9上,点击“Click here!”按钮,弹出“hello world!”。
没错,hello world就这样运行在N9上了。不过还是有人表现出了失望之情:不就是一个“hello world”嘛,没什么实际意义。但gemfield还是要补充3点:
1、千里之行,始于足下;
2、gemfield的N9系列的下文将是《基于Qt QUICK的SYSZUXsame》;
3、一个多月前,C语言之父丹尼斯·里奇(Dennis Ritchie)辞世的时候,CivilNet如此纪念这位巨星的陨落:printf(“Goodbye world.\n”);
备注:本文属于gemfield的CivilNet Blog(http://syszux.com/gemfield)【Qt乐园】版块;bug提交至gemfield@syszux.com;资料发布及讨论区:http://syszux.com/qt;转载此文时,请保证包括【备注】在内的文章的完整性。This entry was posted in Qt乐园 and tagged harmattan, MeeGo, N9, Qt on 2012 年 1 月 13 日 by gemfield.

安装过程中USBDriver 安装失败的,会导致QTCreater与连接公钥部署时连接失败:等待server响应超时。
将安装目录QTSDK\Madde\usbdriver中的DPInst.exe或者DPInst64.exe运行一遍,还是不行的话将设备管理器中查看N9驱动文件路径,再将其拷贝至此文件夹,就可以解决问题。


********************************************************

https://imgsa.baidu.com/forum/w%3D580/sign=d65532a3f636afc30e0c3f6d8319eb85/7548bb13632762d02219dbdca1ec08fa503dc6d7.jpg


率剑士 发表于 7 天前

已经按照教程走了一部分流程。最大的障碍是Qt SDK下载失效,现提供新的可用链接:https://n9.dy.fi/2015/08/install-qtsdk-1-2-1-with-the-offline-installer/
页: [1]
查看完整版本: 使用QtSdk为N9 harmattan开发程序