歡迎您光臨本站 註冊首頁

Linux 的魅力: 開發 Nokia N800

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

OS:CentOS4.5

client oracle : instantclient-sdk-linux32-11.2.0.2.0

:instantclient-basic-linux32-11.2.0.2.0


g test.cpp -I/zrd/sdk/include -L/zrd/lib -locci -lclntsh

報: /usr/bin/ld: warning: libnnz11.so, needed by /zrd/lib/libclntsh.so, not found (try using -rpath or -rpath-link)

/zrd/lib/libclntsh.so: undefined reference to `nzos_ServiceWriteQueue'
/zrd/lib/libclntsh.so: undefined reference to `nzosCipherSpecToStr'
/zrd/lib/libclntsh.so: undefined reference to `C_SetCRLBER'
/zrd/lib/libclntsh.so: undefined reference to `B_SetAlgorithmInfo'
/zrd/lib/libclntsh.so: undefined reference to `nzos_setCRLPath'
...

libnnz11.so 跟 libclntsh.so 在同一個lib下的. 期待你的解答.謝謝

圍繞 Nokia N800 電話/Internet tablet/Webcam 核心並詳細探查基於 scratchbox 的構建環境.

在移動和嵌入式應用程序方面,Linux 受到當之無愧的歡迎,這是因為它能夠根據小型設備有效運行所需的資源開銷按比例進行縮減.Nokia N800 利用了這項功效,並提供了大量多用途的功能供開發人員利用.但是在本期和下兩期 Linux 的魅力 中,目的不是討論功能,而是通過可運行示例(使用照相機功能來創建 Webcam)的方式,展示如何開始構建應用程序.

Nokia N800 是相當成熟的產品.它的前身 Nokia 770 就遠遠超前於早期基於 Linux 的客戶端設備,N800 則明確針對客戶端需求開發.開發時的艱難早已成為過去,現在,對該設備使用最普通配置的情況下,就可以添加或刪除 stylus(最近推出的 Nokia N810 將在將來的文章中討論).

N800 並非提供單個 “RS-MMC” 插槽,而是提供兩個針對常規 SD 卡的插槽.架子是內置的.最為引人注目的是,可用內存、快閃記憶體和處理器速度都增加了.附帶的東西甚至包含一個安裝好的屏幕保護膜(有一件關於屏幕保護膜的經歷很令人驚奇 — 我曾經在手機的屏幕保護膜下面逮到一隻貓 — 我非常推崇屏幕保護膜).閱讀下面關於 N800 的一些更重要的 技術規格和物理參數.

大多數功能都得到了擴展,儘管並非盡善盡美;例如,WiFi 代碼尚不支持信任的 root 證書權威認證,儘管存在一個針對它的空白下拉菜單.這在將來的版本中可能會得到更新.

我發現 770 最令人印象深刻的事情之一是其基於 scratchbox 的構建環境.讓我們研究一下構建環境實際如何工作.

N800 有一個內置的照像機.通過彈出將其打開時,N800 就會啟動一個視頻友好的聊天程序.這很簡潔,但不是我想要的.我想要一個簡單的老式 Webcam.N800 似乎是 Webcam 的理想平台:它是小型的、攜帶型、聯網的平台,並且(不要忘了)它有一架照相機.因此讓我們討論實質問題並開始編寫代碼.

設置工作

我使用一個終端程序設置系統並獲得 root 訪問許可權.您實際上不必如此;這是因為我喜歡隨意探索.我從 maemo Wiki 的應用程序編目頁(請參閱 參考資料 中的鏈接)下載了一個終端程序.該程序實際上是針對 770 設計的,但是它不依賴於內核修改之類的細節,因此用起來很不錯.

獲得 root 訪問許可權略有難度:必須將設備設成 “R&D” 模式,這是使用 flasher 實用程序實現的,可以從 maemo 站點下載該程序.Flasher 實用程序需要 x86 Linux 主機,而這也是運行 scratchbox 的首選環境.如果沒有 x86 Linux box,可以以犧牲一頓早餐為代價獲得一台足夠強大的 x86 機器(而 Linux 可免費下載).我的主機平台是 Kubuntu,但是似乎沒有關係;我也使用 SuSE 實現過,我認為 maemo 網站上的人喜歡簡單的 Debian.

Maemo 安裝說明就足夠了.必須先安裝 scratchbox.使用提供的安裝程序即可,儘管它的默認行為(即刪除已經下載的所有文件以再次下載)不可理喻(也可以手動安裝,但是我認為不必如此).

安裝 Scratchbox 需要 root 訪問許可權,但是安裝完之後使用 scratchbox 時不必擁有 root 訪問許可權.如果您使用提供的 maemo scratchbox 安裝程序,則只需作為 root 用戶使用您的用戶名運行 /scratchbox/sbin/sbox_ctl start/scratchbox/sbin/sbox_adduser <user>.註銷並再次登錄,以便新的組成員(組 sbox)生效,如此即可.

然後再也不需要 root 訪問許可權.實際上,maemo SDK 安裝程序(我使用的是 maemo-sdk-install_3.1.sh;新近的 3.2 更新是從 SDK 內部更新的)將不會作為 root 用戶運行,只需擁有 scratchbox 訪問的常規用戶即可.系統管理員的負擔減輕了.

實際上,我發現擁有在不必要的情況下不需要 root 許可權的安裝程序非常方便.在運行 maemo 安裝程序之前,不必實際設置目標;請忽略警告您先運行 sb-menu 的消息(如果轉移注意力,可能會在安裝程序繼續運行時錯過它們).特別感謝 Freenode 的 #maemo 頻道的朋友,他們讓我確信該錯誤消息是無害的.

如果您以前從未使用過 scratchbox,則需要簡要的介紹.歷史上,交叉編譯帶來了許多挑戰.最著名的是難以在目標環境中運行測試程序以及類似程序,如果它與主機環境不同,配置起來相當麻煩.

Scratchbox 以儘可能直接的方式解決了這個問題:在使用 CPU 模擬的本地環境中運行本地二進位文件.假設我的主機 CPU 速度大約是目標 CPU 速度的 8 倍,那麼這是相當好的解決方案;節省開發時間能帶來令人難以置信的好處.這是典型的技術進步例子:可以簡單地忽略曾經難以克服的障礙.

Scratchbox 允許您擁有多個構建環境,您可以在其中搭配使用目標和主機二進位文件.如果在 x86 處理器上使用 ARM scratchbox,ARM 二進位文件就能神奇地進行工作,而 “cc” 創建 ARM 二進位文件.這相當酷.Nokia 可能通過該設備和其他類似的設備為其開發提供基金.

順便提一下,如果過了一會兒您只收到晦澀的消息 “Scratchbox is not properly set up!”,那麼可能需要啟動它.請作為 root 用戶,運行 /scratchbox/sbin/sbox_ctl start,應該就能工作.

如果在嘗試停止系統之前,沒有運行 sbox_ctl stop,則系統可能不會利落地關閉.如果您像我一樣出於安裝 scratchbox 和嘗試安裝 SDK 之類的不相干的原因重新引導系統,並且從未將系統設置為引導時運行 scratchbox,那麼這可能是您意想不到的.

另一個常見的意外情況是 apt-get 在 scratchbox 中運行失敗,不能解析 repository.maemo.org.要改正這個問題,請編輯 /scratchbox/etc/nsswitch.conf 並確保 “hosts:” 行中為 “dns”,而不是 “mdns”(注意這不同於 scratchbox 環境中的 nsswitch.conf).

熟悉的情形:實現 “hello, world!” 程序

第一步總是實現 “hello, world!” 程序.這不難,但是開始之前,必須選擇一個目標.目標是一組相對於特定設備(N800)的設置和工具.對於典型的 scratchbox 環境,必須創建一個目標.Maemo 設置實際上創建了一對目標,順理成章地命名為 SDK_X86 和 SDK_ARMEL.可以使用 sb-conf 命令在兩者之間切換;例如,sb-conf select SDK_ARMEL 將選擇 ARM 目標.

現在,分析代碼:


清單 1. hello, world!

                      #include <stdio.h>      /* stop me if you've heard this one */   int   main(void) {               printf("hello, world!n");               return 0;    }   

將樣例代碼清單保存倒一個文件.下面是複雜的部分,交叉編譯:


清單 2. 交叉編譯

                      [sbox-SDK_ARMEL: ~] > cc -o hello hello.c   [sbox-SDK_ARMEL: ~] > file hello   hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.4.17,     dynamically linked (uses shared libs), not stripped   [sbox-SDK_ARMEL: ~] > ./hello   hello, world!   

就這麼簡單.您可能想知道如何將該文件放到 tablet 上?如果 tablet 上安裝了 shell,並且兩個插槽上都安裝了 SD 卡,那麼很簡單:將 tablet 插入 Linux box,在出現的驅動器上裝載該文件系統,並複製該文件.卸載、拔除然後觀察,驅動器就能神奇地重新裝載到 tablet 上.當然,文件在該處的某些位置沒有執行許可權,但是可以將其複製到卡以外,然後使用 chmod x.

這對一個文件可行,假設您已經安裝了一個終端程序.這種情況下,由於該程序實際上不必在 shell 中運行,這樣做比較合理.

然而,在實際的應用程序中,您不希望這麼做,圖形應用程序尤其如此.對於這種情況,您將希望創建合適的軟體包文件(N800 使用 Debian 軟體包)並讓用戶以正確的方式安裝.那麼,當它正常工作起來而不是採用 quick hack 時,就不會像目前這樣.

創建 maemo 軟體包

developerWorks 擁有關於創建 Debian 軟體包的最好文檔(請參閱 參考資料).當然,針對 maemo 有更多,因為將程序安裝到 /usr/bin 是不夠的;還需要一種方式使 UI 識別軟體包並運行它.本文中到 “hello, world!” 樣例應用程序的鏈接不會正常工作,但是沒關係;只需在 scratchbox 環境中執行 apt-get source hello-world-app.該軟體包布置所有內容,包括圖標和啟動程序配置.

構建它相當簡單:運行 autogen.sh 以生成配置腳本,然後運行 dpkg-buildpackage -rfakeroot.如果因為 $PATH 中沒有 dpkg-buildpackage 而失敗,請運行 sb-menu,並確保安裝了 debian devkit.不要 安裝 debian-sarge devkit;它會使 Debian 工具認為您在構建 arm 架構而不是 armel,這樣就不能盡善盡美了.,N800 會拒絕安裝您的軟體包,因為它們針對不兼容的架構.因此,不要這樣做.

Maemo 應用程序是使用 Gtk widget 構建的.還有一點不可思議的地方是 “osso_...” 系列函數,它們是常規 Gnome dbus 函數的包裝器.如果不使用這些函數,您的應用程序可能不能在 maemo 環境中正常工作.“hello world” 樣例是了解該環境的好起點.觀察它,構建軟體包,並確保適應這種方式.

了解這些內容之後,讓我們構建一些應用程序.雖然 Hello World 應用程序是非常完善的示例,但是它的內容過多.一般的應用程序不需要在控制面板的狀態欄上顯示,如 DBUS 服務和常規應用程序以及主頁上的 applet 那樣.實際上,通常顯示一個或兩個程序就足夠了.此外,執行以上所有工作的需要解答了為何將應用程序實現為所有不同組件使用的共享庫.這是共享代碼並使各個示例著重處理其實現所特有任務的最簡單途徑.它適合教學和作為示例;不一定是應用程序的最佳模板.但我們的目標是什麼應用程序呢?

N800 有一項十分簡潔的功能:一架小型的彈出式照相機.默認情況下,如果通過彈出將其打開,它會立即啟動一個小型的互動式聊天程序.很簡潔,但是不太靈活.擁有一個可以抓拍單張圖片並且自動將其上載到遠程站點的應用程序可能會更好.這利用了 N800 連接各種網路的便捷,並對要發送哪些幀提供了更多控制.

這實際上是一個相當棘手的過程,因此我不會開發一個完美的 app.而將重點研究使其運行起來的基本要素.方便的是,大部分工作已經以 gstreamer 的方式完成了,gstreamer 是處理媒體流的庫.目標是以特定的間隔從照相機提取幀並將其保存到某個位置,另一台機子更好,並且可能還允許用戶通過按一個按鈕來保存幀.

結束語

在本系列的第 2 部分中,將研究一個程序,它實際完成構建 gstreamer 管道以便從 Web 照相機向屏幕或另一個系統傳輸圖像的核心工作.目標是從照相機獲得圖像,將其轉換成 JPEG 並上載到某個位置.

同時,如果您不熟悉 gstreamer,請繼續閱讀相關知識. Gstreamer 環境有很大一組概念需要掌握.另外,請花一些時間安裝一個終端程序;推薦使用 osso-xterm.

通常,Nokia N800 是攜帶型 Internet tablet,允許通過以下技術訪問 Web:

  • 高解析度寬屏幕顯示
  • Opera 8 瀏覽器
  • Adobe Flash 9 瀏覽器插件
  • Internet 通信
  • Skype 支持
  • 帶有集成 Webcam 的 Internet 電話
  • 即時消息
  • 多協議電子郵件客戶端
  • 全屏幕拇指鍵盤
  • 立體聲揚聲器
  • Media player
  • UPnP 架構
  • Real Rhapsody
  • 可擴展的大容量內存

  • 800 x 480-象素、65,536-色 觸摸屏

標準的銀色/黑色款規格:

  • 體積:137cc
  • 重量:206g
  • 長:75mm
  • 寬:144mm

它的內存是 DDR RAM 128MB;還有 Flash 256MB 和 128 MiniSD 擴展.兩個內置內存卡插槽兼容 SD、MicroSD、MiniSD、MMC 和 RS-MMC.最多支持 8GB 內存卡.超過 2GB 的 SD 卡必須是 SDHC 兼容的.

BP-5L 電池可使瀏覽時間長達 3.5 小時(待機 13 天).

內在設置支持以下文件格式:

  • 音頻:AAC、AMR、AWB、M4A、MP2、MP3、RA(RealAudio)、WAV、WMA
  • 圖像:BMP、GIF、ICO、JPEG、PNG、TIFF、SVG-tiny
  • 視頻:3GP、AVI、H.263、MPEG-1、MPEG-4、RV(Real Video)
  • Internet 音頻播放清單:M3U、PLS

連接方式:

  • WLAN:802.11b/g
  • Bluetooth 規格:2.0(針對 Internet 連接和通過電話傳輸文件)
  • Nokia AV connector 3.5mm.支持的模式:撥號網路、文件傳輸、通用訪問、SIM 訪問、對象推送模式、人機介面模式和串口模式
  • 針對 PC 連接的 USB 2.0 高速設備模式

本文出自 「linux培訓」 博客,請務必保留此出處http://vfast1.blog.51cto.com/2576713/460184


[火星人 ] Linux 的魅力: 開發 Nokia N800已經有606次圍觀

http://coctec.com/docs/linux/show-post-48007.html