1. 程式人生 > >ARM開發板修改設定靜態IP

ARM開發板修改設定靜態IP

轉載自:http://blog.csdn.net/good123_2014/article/details/50222289

此方法可用在開發板中,也可執行在linux虛擬機器中

有些嵌入式裝置中為了節省成本或者體積原因都沒有配備掉電儲存電池,每次上電之後就需要人為手動的更新系統時間,而且系統時間也不準確。有些需要得到實時的比較準確的時間,以和伺服器或是裝置之間進行時間同步,但是很多嵌入式裝置又不能通過人工設定時間的方式來同步時間,需要自動從網路上獲取時間,這就需要用到NTP。NTP是網路時間協議(Network Time Protocol)的簡稱,它是用來同步網路中各個計算機裝置的時間的協議。目前有第三方的程式碼可以支援NTP,本文講訴ntpclient的用法。

ntpclient is an NTP (RFC-1305) client for unix-alike computers. Its functionality is a small subset of xntpd, but IMHO performs better (or at least has the potential to function better) within that limited scope. Since it is much smaller than xntpd, it is also more relevant for embedded computers.
ntpclient is Copyright (C) 1997-2015 Larry Doolittle, and may be freely copied and modified according to the terms of the GNU General Public License, version 2.

下載好後,解壓,進入解壓後的目錄進行交叉編譯

首先需要修改Makefile

  1. # To cross-compile  
  2.     CC = arm-linux-gcc  
將上面這行的註釋去掉,進行交叉編譯

然後之需要make,後會得到ntpclient檔案,這個就是嵌入式裝置上的可執行檔案

將他拷貝到開發板中,我使用的nfs檔案系統,所以拷貝到nfs目錄中

Linux@ubuntu:~/arm/ntp/ntpclient-2015$ cp ntpclient /nfsroot/rootfs/root/
然後我們需要一個網路授時伺服器網址,

這個是授時中心網頁,在這個上面可以找到需要的首飾中心網址

然後我們在開發板上執行程式

[email protected] ~# ./ntpclient -s -d -c 1 -i 5 -h 202.108.6.95

裝置會返回如下

  1. Configuration:  
  2.   -c probe_count 1  
  3.   -d (debug)     1  
  4.   -g goodness    0  
  5.   -h hostname    202.108.6.95  
  6.   -i interval    5  
  7.   -l live        0  
  8.   -p local_port  0  
  9.   -q min_delay   800.000000  
  10.   -s set_clock   1  
  11.   -x cross_check 1  
  12. Listening...  
  13. Sending ...  
  14. packet of length 48 received  
  15. Source: INET Port 123 host 202.108.6.95  
  16. LI=0  VN=3  Mode=4  Stratum=2  Poll=4  Precision=-23  
  17. Delay=1144.4  Dispersion=43899.5  Refid=10.69.2.34  
  18. Reference 3689931396.917562  
  19. (sent)    3689931541.832492  
  20. Originate 3689931541.832492  
  21. Receive   3689931541.824087  
  22. Transmit  3689931541.824131  
  23. Our recv  3689931541.838811  
  24. Total elapsed:   6750.00  
  25. Server stall:      42.14  
  26. Slop:            6707.86  
  27. Skew:          -11369.57  
  28. Frequency:             0  
  29.  day   second     elapsed    stall     skew  dispersion  freq  
  30. set time to 1480942741.824131000  
  31. 42707 46741.839    6750.0     42.1  -11369.6  43899.5         0  
我為什麼沒有使用域名呢?因為我使用域名的時候出現無法連線的情況,具體原因我也不知道,然後就是換幾個ip嘗試,

其中那些引數可以閱讀解壓後的目錄下的README檔案,裡面有詳細的說明,需要提示的是-g不能使用,可能是嵌入式裝置不支援。

這時候我們使用date來檢視一下系統時間

  1. [email protected] ~# date  
  2. Mon Dec  5 12:59:05 UTC 2016  
其中時區不是中國的東八區,需要使用一個環境變數

export TZ=CST-8
設定後就可以顯示中國時間了

  1. [email protected] ~# date  
  2. Mon Dec  5 21:06:30 CST 2016  

然後我根據我的開發板將這個命令寫到啟動指令碼中,當開發板上電後自動通過網路更新系統時間。

我的開發板啟動指令碼是/etc/rc.d/init.d/start_userapp

修改下面幾句話

#date -s "2015-09-01 00:00:00" &> /dev/null

/root/ntpclient -s -d -c 1 -i 5 -h 202.108.6.95 >/dev/null &

然後是新增系統環境變數,讓開機後自動使用東八區

開發板檔案系統/etc/profile中新增

export TZ=CST-8

然後就可以當開發板上電自動同步時間了,但是必須確認開發板上電時可以訪問網路,否則無法從伺服器獲取系統時間。

但是如果你需要將ntpclient整合到你自己的程式碼裡面中,需要怎麼做呢,其實也很簡單,下載原始碼後,例如我下載的是ntpclient_2015_365.tar.gz,解壓tar -zxvf ntpclient_2015_365.tar.gz,解壓後將ntpclient.c,ntpclient.h,phaselock.c這三個檔案放入你的專案中,更改ntpclient.c中的main()函式即可。

  1. void ntp_test(void)   
  2. {  
  3.     int usd;  /* socket */
  4.     int c;  
  5.     /* These parameters are settable from the command line 
  6.        the initializations here provide default behavior */
  7.     shortint udp_local_port=0;   /* default of 0 means kernel chooses */
  8.     char *hostname=NULL;          /* must be set */
  9.     int initial_freq;             /* initial freq value to use */
  10.     struct ntp_control ntpc;  
  11.     ntpc.live=0;  
  12.     ntpc.set_clock=0;  
  13.     ntpc.probe_count=0;           /* default of 0 means loop forever */
  14.     ntpc.cycle_time=600;          /* seconds */
  15.     ntpc.goodness=0;  
  16.     ntpc.cross_check=1;  
  17.     //hostname = "210.72.145.44"; //中國國家授時中心
  18.     //hostname = "ntp.sjtu.edu.cn"; //上海交通大學NTP伺服器,202.120.2.101
  19.     (ntpc.set_clock)++;  
  20.     ntpc.probe_count = 1;  
  21.     hostname = "time.nist.gov";  
  22.     if (ntpc.set_clock && !ntpc.live && !ntpc.goodness && !ntpc.probe_count) {  
  23.         ntpc.probe_count = 1;  
  24.     }  
  25.     /* respect only applicable MUST of RFC-4330 */
  26.     if (ntpc.probe_count != 1 && ntpc.cycle_time < MIN_INTERVAL) {  
  27.         ntpc.cycle_time = MIN_INTERVAL;  
  28.     }  
  29.         printf("Configuration:\n"
  30.         "  -c probe_count %d\n"
  31.         "  -d (debug)     %d\n"
  32.         "  -g goodness    %d\n"
  33.         "  -h hostname    %s\n"
  34.         "  -i interval    %d\n"
  35.         "  -l live        %d\n"
  36.         "  -p local_port  %d\n"
  37.         "  -q min_delay   %f\n"
  38.         "  -s set_clock   %d\n"
  39.         "  -x cross_check %d\n",  
  40.         ntpc.probe_count, debug, ntpc.goodness,  
  41.         hostname, ntpc.cycle_time, ntpc.live, udp_local_port, min_delay,  
  42.         ntpc.set_clock, ntpc.cross_check );  
  43.     /* Startup sequence */
  44.     if ((usd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)  
  45.     {  
  46.         printf ("ntp socket error!\n");  
  47.     }  
  48.     setup_receive(usd, INADDR_ANY, udp_local_port);  
  49.     setup_transmit(usd, hostname, NTP_PORT, &ntpc);  
  50.     primary_loop(usd, &ntpc);  
  51.     close(usd);  
  52. }  
編譯執行,在需要的地方呼叫就可以了。

相關推薦

ARM開發修改設定靜態IP

轉載自:http://blog.csdn.net/good123_2014/article/details/50222289 此方法可用在開發板中,也可執行在linux虛擬機器中 有些嵌入式裝置中為了節省成本或者體積原因都沒有配備掉電儲存電池,每次上電之後就需要人為手動

CentOS7 修改設定靜態IP和DNS

用虛擬機器裝CentOS7,使用的NAT的網路模式,為了防止再次啟動系統的時候網路IP發生變化,因此設定靜態IP和DNS。 由於CentOS是最小化安裝,沒有ifconfig命令,因此可以採用ip命令檢視。 檢視IP分配情況: #ip addr

【linux】ARM開發設定RTC時間,斷電重啟後,設定失效的原因分析

問題描述 linux中使用date設定時間後用hwclock -w同步到RTC,斷電重啟後,有時會失效 原因分析 儲存時間戳 1、使用命令關機(halt)會呼叫rc0.d中的指令碼; 2、使用命令重啟(reboot)會呼叫rc6.d中的指令碼;

修改arm開發IP地址

修改arm開發板的IP,使用的yaffs2檔案系統,修改方法如下:1、修改/etc/init.d/rcS檔案在/sbin/ifconfig lo 127.0.0.0下新增一行/sbin/ifconfig eth0 172.23.11.4 up這裡172.23.11.4 是你要

修改arm開發ip和uboot的環境變數ip

一,修改開發板uboot環境變數ipaddr 1.使用secureCRT串列埠工具連線開發板。 2.啟動開發板,倒數2秒按任意鍵進入boot選單介面。 3.輸入命令pri指令,得到開發板uboot

關於ARM開發通過有線接入網際網路自動獲取IP地址問題

參考網頁,以備後用: 1. 配置核心: [*] Networking support  ---> Networking options  --->   <*> Packet socket   <*> Unix domain so

ARM開發搭建NFS網絡文件系統方法

安裝 http ext 博客 主機 文件 oot ini first 前邊 已經提到過吧vmare的IP改成了靜態IP,對於上網來說,這個是個麻煩的事。現在重新配置Vmware的IP VMware-Edit-Virtual network editor 選擇PC機的無線網

產品研發ARM開發如何選擇?飛思卡爾I.MX6Q開發

pow 清分 工作 images logs 時鐘 網通 https 處理器 處理器:迅為-i.MX6開發板恩智浦Cortex-A9 四核i.MX6Q處理器,主頻1GHz,內存2G,存儲16GB。 系統支持:i.MX6開發板系統支持LINUX,Android,Ubuntu系統

嵌入式開發ARM開發-迅為4418開發接口基本介紹

4418開發板 接口介紹 迅為4418開發板無縫兼容6818平臺,是北京迅為電子有限公司研發設計的一款開發板平臺,核心板尺寸小,引出腳多,能夠幫助工程師們快速開發新產品。行業應用:iTOP-4418開發板/6818開發板可廣泛適用於工控、智能家居、醫療、多媒體、安防、車載、金融、消費電子、手持設備、顯

移植wpa_supplicant2.5到arm開發

this func gnu error netlink eabi err erro arm-linux 編譯libnl1-1: ./configure --host=arm-linux --enable-static --prefix=/usr/local/ssl CC

初試ARM開發

style min 學習 down win7 too 顯示 pan 成功 博主剛開始學習嵌入式開發,在老師指導下進行了led點亮的實驗。 一、準備工作 開發板型號:Friendly mini 2451 環境:win7+minitools 二、進入usb下載模式 使用 Min

ARM開發 CPU 處理器參數

各arm開發板 cpu 處理器參數ARMV7L S3C2440[JZ2440] ARM920T 400M ARMV6 BCM2835[Raspberry PiB+] ARM11 700M ARMV7L

用shell實現將動態ip修改靜態ip靜態ip修改為其它靜態ip

linux 用shell修改ip (1) 將動態ip修改為靜態ip的思路 ① 修改ip之前,先備份ifcfg-eth0文件 ② 進入網卡配置目錄 /etc/sysconfig/network-scripts/ifcfg-eth0 ③ 修改BOOTPROTO=static ④ 修

buildroot構建項目(三)--- u-boot 2017.11 適配開發修改 1

型號 mmu mman body 成功 -c 存儲器 介紹 我們   當前雖然編譯成功了,但是對於我們自己的目標板並不太適用。還得做一系列得修改。 一、lds 文件分析   u-boot 中最重要得鏈接文件即是,u-boot.lds。我們可以查看我們編譯出來得 u-boot

buildroot構建項目(四)--- u-boot 2017.11 適配開發修改 2 ---- 系統啟動初始化之一

鏈接 extc 信號 分析 col clock -h 17.1 標誌位 一、代碼分析   上一節已經分析了鏈接文件,知道了首先代碼是從 _start 開始,之後設置了中斷向量表,然後從 start.s 開始運行。 _start:vectors.S (arch\arm\li

buildroot構建項目(五)--- u-boot 2017.11 適配開發修改 4 ---- 系統啟動初始化之三

vid def include cmp ble soft setup.s bubuko 賦值 一、內存控制器   在關閉了MMU和caches 之後 就進入lowlevel_init 函數,對內存控制器進行初始化。lowlevel_init.S (board\samsung

buildroot構建項目(七)--- u-boot 2017.11 適配開發修改 4 ---- 系統啟動初始化之四

ack tar span mov tel 變量初始化 清零 ppi ntb   設置完寄存器控制器後,則跳出cpu_init_crit,進入_main 函數。即進入crt0.S (arch\arm\lib)   跟著代碼流程慢慢走 一、crt0.S 1.1 第一步執行代碼

arm開發上找不到/dev/i2c-*設備

linu arm The iic oar fig com 在一起 直接 最近在調試arm與外設iic通訊是,想來個投機取巧,先不寫單獨的驅動,直接通過iic bus設備是否可以連接到外設,然後發現在板子上找不到“/dev/i2c-n”的設備,標準的系統應該都是有的。 回去看

Ubuntu16.04NFS配置與ARM開發互傳文件_掛載和卸載

分享 all http ini mnt 文件夾 linux系統 don lin 第一步:安裝NFS服務 sudo apt-get install nfs-kernel-server portmap 第二步:增加NFS配置文件 sudo vim /etc/exports 在v

為Docker容器設定靜態IP

此文已由作者袁歡授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 建立docker容器 docker run -it --name=yh -h yh --net=none debian:sshd bash   ### 確保使用--net=none引數,此時新建的容器內不會建