qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          嵌入式linux應用程序移植方法總結

           前段時間一直在做openCapwap的移植和調試工作,現在工作已接近尾聲,編寫本文檔對前段工作進行一個總結,分享下openCapwap移植過程中的經驗和感悟。江浩寫的《CAPWAP移植進展.docx》對openCapwap的移植過程有了比較詳細的描述,所以在此就不涉及技術細節了,本文檔主要以openCapwap的移植為例,總結嵌入式linux應用程序移植的一般方法和步驟,為以后可能需要的移植工作提供一些的思路。
            嵌入式linux應用程序移植的步驟包括:
            1、準備好交叉編譯環境
            在安裝有Linux操作系統的PC上安裝對于平臺的交叉編譯器,并將交叉編譯器加到環境變量中,如export PATH=$PATH:/opt /toolchain/rsdk-1.3.6-5281-EB-2.6.30-0.9.30/bin, 然后在終端界面里看交叉編譯器版本,如敲mips-linux-gcc –v,顯示版本號則表示安裝成功。
            (交叉編譯器一般是平臺廠商提供的,比如我們的交叉編譯器就是mips-linux-gcc,是瑞昱提供的。)
            2、準備好源代碼
            準備好需要編譯的源代碼庫包,如capwap-0.93.3,需要注意的是,不僅需要準備要編譯的源代碼庫包,還需要準備該源碼包依賴的包,例如capwap-0.93.3依賴安全加密相關的包openssl和多線程相關的包pthread,這些包也需通過編譯成靜態庫或動態庫供主承銷包調用。
            3、修改Makefile
            一般的源碼庫可以通過運行./Configure來制定編譯器gcc,目標板的架構已經生產應用程序和庫的目錄。如果沒有Configure文件就需要手動打開Makefile文件來修改,主要需要修改的地方有:(1)編譯器的類型,(2)需要庫的頭文件路徑;(3)需要庫的鏈接路徑(4)生成應用程序的路徑。如openCapwap移植過程,將CC=gcc行用CC=mips-linux-gcc替換。
            4、編譯源代碼
            在源碼包的主路徑下運行Make,除非運氣特別好,一般情況下是會報錯的,需要根據報錯的類型進行相應的修改。常見的報錯類型有:(1)依賴的庫包不支持該CPU架構,需要更換該架構的庫包,如Capwap自帶的openssl庫不支持mips。#error "This openssl-devel package does not work your architecture?"(2)依賴的庫沒有經過交叉編譯就拿來用了,如#error“./static/libssl.a: could not read symbols: File in wrong format”即libssl.a庫文件格式是X86架構下的不支持mips架構。(3)源代碼中有c語言方面的錯誤,一般是和交叉編譯器版本不匹配引起的。
            一步步解決完這些錯誤后,然后終于可以生產對應目標板的應用程序了。但是生產相應的應用程序才是萬里長征的第一步,讓程序正確的運行才是最終目標。
            5、安裝應用程序
            安裝應用程序有兩種方法,一是將應用程序放到目標板的文件系統中,通過燒鏡像的方法將程序下載到目標板上;另一種是通過像tftp的方法下載到目標板上。后一種方法便捷靈活,在調試程序的過程中應用較多。需要注意的是,還需要將應用程序需要的動態庫也下載到目標板上,應用程序才能跑。例如在我們移植capwap中出現,在完成燒錄后,運行WTP報錯。Error:系統化找不到pthread.so。分析:在終端中進入lib目錄,發現缺少libpthread.so動態庫。故原因在于RTL8198目標板SDK編譯時沒有將libpthread.so動態庫添加到目標板系統的lib庫文件當中。
            6、運行調試應用程序
            調試應用程序讓其能夠正確的工作,才是移植工作最重要的部分,這需要對應用程序的流程很熟悉,然后通過打印日志的方法看程序運行的路徑,分析日志與正確的流程的差異來確定出錯的地方。常見的出錯地方有:(1)內存分配函數;(2)系統位數不一樣;(3)字節順序問題(大端小端);(4)浮點數的表示問題等。如我們在移植過程中遇到的malloc函數行為不同的問題。以上都是平時移植過程中需要重點注意的地方。

          posted on 2013-12-24 11:51 順其自然EVO 閱讀(432) 評論(0)  編輯  收藏 所屬分類: linux

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大冶市| 板桥市| 宜黄县| 嘉禾县| 高邑县| 贺州市| 宿松县| 兖州市| 西丰县| 广南县| 广灵县| 仪陇县| 如东县| 萨迦县| 丰台区| 海原县| 广灵县| 肇东市| 方山县| 环江| 九寨沟县| 安龙县| 潜江市| 牙克石市| 贡觉县| 远安县| 太仆寺旗| 建水县| 铜山县| 咸阳市| 河曲县| 城口县| 辽阳市| 临朐县| 潢川县| 涿州市| 渝北区| 玛多县| 阿拉尔市| 扶余县| 睢宁县|