ARM移植ntp(先移植openssl)

移植openssl

  1. Makefile中CC/AR等路徑引用是通過CROSS_COMPILE前綴索引的,所以只要設置CROSS_COMPILE的值爲你的交叉編譯器前綴即可,如:”arm-none-linux-gnueabi-“
  2. 要刪掉CFLAGS中-m32選項,(我的)交叉編譯器沒有此選項。
  3. Make install後,到安裝目錄的bin目錄下,看到有openssl和c_rehash兩個可執行文件,我們執行下./openssl,如果提示文件格式錯誤,說明設置的交叉編譯器起作用了,再把openssl複製到目標板上,加上權限,運行下,如果進入openssl命令行下,說明openssl移植就ok了。
    使用:把lib目錄下的libcrypto.*和libssl.*文件複製到目標板用戶庫文件位置,確保上電後應用程序可以訪問到。
    注:
  4. 通過apt-get sourse獲取的源碼,編譯成so文件後,在編譯ntp時一直出錯(libcrypto不兼容、dlopen等函數未聲明等各種問題,後來用上面這個源碼一次就成功了)
  5. 編譯器相關配置更改後,在make之前先make clean,避免出現新舊兩種平臺目標文件重疊,從而ld命令提示文件格式錯誤之類提示。

移植ntp

  1. Configure命令來自參考1;MOD_NANO定義來自參考2;
  2. 我的配置命令:
    我的配置命令其中,”—with-yielding-select=yes”、”—host=”選項不能少,”–with-openssl-incdir/libdir”必選(指明依賴的openssl庫所在位置)
  3. 執行完configure命令後,打開Makefile文件確認下CC等是否編程我們期待的交叉編譯器路徑。
    使用:將ntpdate目錄下的ntpdate文件複製到目標板上並添加執行權限,確保上面的openssl庫文件已經存在且ntp server服務已開啓!執行”ntpdate ntp-server-ip”命令,觀察運行結果。
    正常運行結果:
    缺少openssl的運行結果
    缺少openssl的執行結果:
    正常執行結果

注:

  1. 在Ubuntu14.04上運行ntpdate命令,從局域網內電腦ntp server獲取時間時,提示:
    “no server suitable for synchronization found debian”
    google以後,看到的解決方法都沒能解決,大多數提到的都是下面這種錯誤(https://askubuntu.com/questions/429306/ntpdate-no-server-suitable-for-synchronization-found):
    "ntpdate -d Server dropped Strata too high"關於strata這個值的設定,然而,最後才發現是ntp server上的w32time服務沒有啓動。

  2. 在arm板上運行ntpdate命令,對應的提示爲:” no server suitable for synchronization found”

  3. 此版本ntp不能用openssl-0.9.8,編譯時會提示"NID_cmac undeclared",在https://github.com/openssl/openssl/blob/master/include/openssl/evp.h發現是老版本的openssl的evp.h中缺少對NIC_cmac的宏定義,暫時不能用!

  4. 通過apt-get source ntpdate獲取源碼並解壓後,在編譯過程中發現缺少部分文件。
    ——解決:從github上下載ntpdate的源碼後,補充對應文件到對應目錄下,重新編譯即可。

  5. ntp依賴的crypto在openssl中有,不用再去移植。

  6. 如果ntpdate會造成阻塞的話,需要在腳本里執行ntpdate命令前判斷網絡通斷情況:
    ——ping -c1 -W3 hostname #ping一次,超時時間3S,$?=0繼續執行ntpdate,否則不執行;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章