最近做了一下ntp的移植,把心得和大家共享一下,雖然網(wǎng)上有很多關(guān)于ntp的移植文件,但是都很簡單,好像沒有遇到任何的問題,可是我卻遇到了不少啊。
第一步:設(shè)定交叉編譯器的路徑
初學(xué)者經(jīng)常漏掉的一步,萬一沒設(shè)定就是以主機的gcc在編,變成主機執(zhí)行了。
export PATH=:$PATH:/home/jlass/***
***就是你們自己的交叉編譯器的路徑
第二步:編譯ntp
下載源文件,解壓后進入文件夾,新建一個source文件夾(我個人的習(xí)慣而已)
注:以3.4.1個arm-linux-gcc是可以直接編譯通過的,可是我的arm-linux-gcc是我自己用4.2.4版本編的,有一些問題。
。/configure --prefix=http://www.eda-china.com/home/jlass/marwell/rootfs/ntp-4.2.4p4/source/ --exec-prefix=http://www.eda-china.com/home/jlass/marwell/rootfs/ntp-4.2.4p4/source/ --host=arm-linux
注:網(wǎng)上的參考文件還有--enable-all-clocks --enable-parse-clocks參數(shù),但我沒加,也沒覺得有什么問題。
make
錯誤一:
/home/jlass/marwell/rootfs/ntp-4.2.4p4/libntp/。/。。/libisc/ifiter_ioctl.c:487: undefined reference to `index‘
/home/jlass/marwell/rootfs/ntp-4.2.4p4/libntp/。/。。/libisc/ifiter_ioctl.c:487: undefined reference to `index’
檢查源文件可發(fā)現(xiàn)index應(yīng)該是某種算法,可是這個版本的gcc可能沒有了。
查看gcc中的string.h文件能看到# define index(s,c) strchr((s), (c))字段
我覺得strchr的算法和index應(yīng)該是一樣的,所以在ifiter_ioctl.c中用strchr替代了index。
注:這里我偷懶了,應(yīng)該有能好的解決方法
錯誤二:
tickadj.c:185:22: error: sys/var.h: No such file or directory
查看gcc的include/sys/目錄下有個socketvar.h文件名字最接近了,直接把tickadj.c中的# include 改成# include
注:估計直接//注釋掉應(yīng)該也可以
錯誤三:
tickadj.c:436: error: ‘txc’ undeclared (first use in this function)
查看436行,tick = PRESET_TICK;沒看到txc啊,奇怪,仔細一查發(fā)現(xiàn)另一個文件里定義了#define PRESET_TICK txc.tick
在查看看tickadj.c文件的開頭有
#ifdef HAVE___ADJTIMEX/* Linux */
#include
struct timex txc;
估計是這個版本的gcc沒定義HAVE___ADJTIMEX引起的,不管了,把
#include
struct timex txc;
放到最上面去。
總算是編譯通過了。
make install
第三步:安裝ntp
去source/bin下把需要的文件拷到開發(fā)板上吧
注:source/lib下沒有文件,不需要拷。
在開發(fā)板的etc下新建ntp.conf文件,并寫入
restrict 127.0.0.1
restrict 192.168.1.0 mask 255.255.0.0 nomodify notrap //根據(jù)自己的實際情況更改
server 127.127.1.0 //以本機作為時間服務(wù)器
fudge 127.127.1.0 stratum 5 //優(yōu)先級為5
其實關(guān)鍵就是server 127.127.1.0(不要錯寫成127.0.0.1了)這一句,其他的都可以不寫,直接使用默認值。
然后執(zhí)行ntpd,ntpd服務(wù)就起來了。
注:實際需要等待幾分鐘,ntpd服務(wù)才真正起來,所以不要太著急了
在另一塊板子上執(zhí)行ntpdata serverIP,就能實現(xiàn)時間同步了。
注:如果你的板子已經(jīng)起了ntpd,再運行ntpdata是會有錯誤提示ntpdate[2006]: the NTP socket is in use, exiting
另外:我在第一次處理的時候不小心把3.4.1編譯生成的ntpd考到4.2.4的板卡上,執(zhí)行時出現(xiàn)-sh:ntpd not found的錯誤,所以如果出現(xiàn)相同的錯誤請確認你所使用的交叉編譯器和你板卡上的arm-linux-gcc是否統(tǒng)一。
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
4913瀏覽量
97088 -
編譯器
+關(guān)注
關(guān)注
1文章
1617瀏覽量
49019 -
NTP
+關(guān)注
關(guān)注
1文章
155瀏覽量
13872
發(fā)布評論請先 登錄
相關(guān)推薦
評論