<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    嵌入式linux應(yīng)用程序移植方法總結(jié)

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

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

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

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费成人激情视频| 国产成人一区二区三区视频免费| 日本片免费观看一区二区| 亚洲永久精品ww47| eeuss影院免费直达入口| 国产午夜亚洲精品理论片不卡| 国产精品亚洲综合天堂夜夜| 国产一级淫片a视频免费观看| 亚洲av成本人无码网站| 免费又黄又硬又爽大片| 国产精品永久免费| 国产精品亚洲精品日韩已满| 香蕉成人免费看片视频app下载| 久久久久久亚洲精品| 18成禁人视频免费网站| 久久精品亚洲AV久久久无码| 国产精品视频永久免费播放| 亚洲Av永久无码精品一区二区| 吃奶摸下高潮60分钟免费视频| jizz免费在线观看| 91亚洲自偷手机在线观看| 永久免费AV无码国产网站| 久久综合亚洲色hezyo| 国产亚洲精品免费视频播放 | 亚洲αⅴ无码乱码在线观看性色| 午夜时刻免费入口| 国产福利电影一区二区三区,免费久久久久久久精 | 美女免费视频一区二区| 亚洲午夜福利精品无码| 日韩中文字幕免费视频| 亚洲va久久久久| 亚洲日本中文字幕天堂网| 特级精品毛片免费观看| 亚洲人成欧美中文字幕| 亚洲中文字幕无码爆乳AV| 2021精品国产品免费观看| 精品久久久久亚洲| 99ri精品国产亚洲| 亚洲国产av一区二区三区| 91香蕉国产线观看免费全集| 亚洲国产成人精品无码区二本|