欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種Linux串口通信日志記錄的方法

文檔序號:6338685閱讀:3336來源:國知局
專利名稱:一種Linux串口通信日志記錄的方法
技術(shù)領(lǐng)域
本發(fā)明涉及串口通信領(lǐng)域,尤其是一種Linux串口通信日志記錄的方法。
背景技術(shù)
隨著計算機(jī)系統(tǒng)的應(yīng)用和微機(jī)網(wǎng)絡(luò)的發(fā)展,計算機(jī)與外界的信息交換越來越顯得重要。串口通信是在一根傳輸線上一位一位的傳送信息,所用的傳輸線少,并且可以借助現(xiàn)成的電話網(wǎng)進(jìn)行信息傳送。因此,串口通信特別適合于遠(yuǎn)距離的數(shù)據(jù)傳輸。如圖1所示,一臺工控機(jī)或者pc機(jī)上可能有多個串口,每一個串口分別與終端串口設(shè)備連接,這樣組成了一對多的連接結(jié)構(gòu)。每個終端串口設(shè)備通過串口與工控機(jī)或者PC 機(jī)上的串口連接,進(jìn)而與工控機(jī)或者PC機(jī)進(jìn)行串口通信。在實際的串口通信應(yīng)用中,為了檢驗串口通信過程的可靠性,往往需要能夠在不影響串口正常通信的情況下,將串口通信的過程的信息(包括串口通信數(shù)據(jù)、串口通信動作等)以日志的方式記錄下來。然而,在Linux平臺下,串口通信過程中的數(shù)據(jù)具有“唯一性”,這里是指一次串口通信完成后,串口通信數(shù)據(jù)等將會被內(nèi)核清空而無法保存。若在串口通信的具體應(yīng)用程序中,將串口通信的數(shù)據(jù)預(yù)先復(fù)制一份,這樣的話,一方面會影響串口通信的效率,另一方面該方案本身不具備任何的可移植性,也就是說,一旦串口通信的應(yīng)用程序發(fā)生變化時,串口日志功能就需要在應(yīng)用程序中重新開發(fā)。在串口通信過程中,Linux內(nèi)核可能會把串口通信數(shù)據(jù)分割成很小的數(shù)據(jù)段,如果按照這種原始數(shù)據(jù)格式記錄的話,一方面會使得日志可讀性變得較差,另一方面與串口通信數(shù)據(jù)的實際時間節(jié)點不符。

發(fā)明內(nèi)容
基于上述原因,本發(fā)明旨在通過在Linux內(nèi)核中建立與應(yīng)用層進(jìn)行交互的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中可以通過數(shù)據(jù)通道,獲悉Linux內(nèi)核層中串口通信過程的方式來實現(xiàn)串口通信日志的記錄。本發(fā)明的總體構(gòu)思是在不影響正常的串口通信過程的情況下,在內(nèi)核層中建立與用戶層進(jìn)行交互的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中通過該數(shù)據(jù)通道獲得Linux內(nèi)核層中串口通信過程的信息,從而達(dá)到記錄串口通信過程的目的。并且在應(yīng)用層提供了配置接口,使得可以通過應(yīng)用層選擇合適的數(shù)據(jù)通道方式,從而滿足實際應(yīng)用環(huán)境的不同需求。本發(fā)明的目的是提供一種串口通信日志記錄的方法,該日志記錄的時間精度是可以根據(jù)實際應(yīng)用環(huán)境中的不同需求,在應(yīng)用層進(jìn)行配置,精度范圍是毫秒(ms) 微秒 (μ s)。具體是根據(jù)串口通信數(shù)據(jù)的實際應(yīng)用情況,在應(yīng)用層提供一個可以配置的時間間隔接口,當(dāng)在前后兩條同一類通信數(shù)據(jù)的時間間隔小于配置時間間隔的情況下,將這兩條通信數(shù)據(jù)記錄為一條,從而大大提高串口通信日志文件的可讀性,而且與實際串口通信更加吻合。本發(fā)明采用的技術(shù)手段是本發(fā)明通過在Linux內(nèi)核中建立與應(yīng)用層進(jìn)行交互的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中通過已經(jīng)建立的數(shù)據(jù)通道,獲得Linux內(nèi)核層中串口通信過程的詳細(xì)信息,主要包括串口通信動作與串口通信數(shù)據(jù)等。其實現(xiàn)的方法包括以下步驟1)建立Linux內(nèi)核層與Linux應(yīng)用層之間通信的三條數(shù)據(jù)通道proCfS、SySfS和 netfilter (步驟 Si);2)將串口通信過程中的數(shù)據(jù)等保存在Linux內(nèi)核層的緩存中(步驟S2);3)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中數(shù)據(jù)通道的選擇配置,通過合適的數(shù)據(jù)通道與內(nèi)核進(jìn)行通信,從而獲得保存在Linux內(nèi)核層緩存中的串口通信數(shù)據(jù)(步驟S3);4)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中日志時間精度、時間間隔的配置,將取得的串口通信數(shù)據(jù)進(jìn)行進(jìn)一步分析處理(步驟S4);5)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中所選定的日志記錄方案,將處理完的日志數(shù)據(jù)寫入到日志文件中(步驟S5)。本發(fā)明提供三種日志記錄方式①不限日志文件容量的順序記錄方式;②限制日志文件最大容量的循環(huán)記錄方式;③限制單日志文件大小的多文件順序記錄方式。所有上述日志記錄方式可以在應(yīng)用層配置中進(jìn)行選定。本發(fā)明的在有益技術(shù)效果在于本發(fā)明涉及的串口通信日志記錄方法主要在 Linux內(nèi)核層中進(jìn)行處理,這樣可以在不影響串口通信的情況下,實現(xiàn)對串口通信過程的一種可靠的日志功能。而且,在應(yīng)用層中提供了多個接口,因此可以根據(jù)實際的應(yīng)用需求與特點,選擇合適的數(shù)據(jù)通道類型、日志時間精度、連續(xù)時間間隔以及日志記錄方案,從而使得記錄的串口日志具有較高的可靠性和可讀性,滿足不同應(yīng)用場景的需求。其中,本發(fā)明最典型的應(yīng)用場景是對串口通信可靠性要求較高以及進(jìn)行大量串口通信的Linux系統(tǒng),如智能交通系統(tǒng)。


圖1串口通信過程結(jié)構(gòu)框圖;圖2為本發(fā)明Linux內(nèi)核層與應(yīng)用層數(shù)據(jù)通信的流程圖;圖3為本發(fā)明限制日志文件最大容量的循環(huán)記錄方式的流程圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明涉及到的相關(guān)技術(shù)術(shù)語的名詞解釋數(shù)據(jù)通道是一種實現(xiàn)Linux內(nèi)核層與應(yīng)用層之間進(jìn)行數(shù)據(jù)通信功能的一系列接口等。本發(fā)明中涉及到的數(shù)據(jù)通道主要有procfs、sysfs、netfilter三種方式。procfs 是進(jìn)程文件系統(tǒng)。它提供用戶以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口,用戶和應(yīng)用程序可以通過proc得到系統(tǒng)的信息,并可以改變內(nèi)核的某些參數(shù)。sysfs:是在一種虛擬文件系統(tǒng)。它提供了在應(yīng)用層中訪問內(nèi)核層中的設(shè)備 (device)和驅(qū)動(driver)信息的接口。netfilter 是Linux內(nèi)核集成的IP信息包過濾系統(tǒng)。它提供了在中斷環(huán)境下內(nèi)
4核層與應(yīng)用層之間進(jìn)程通信的方式。本發(fā)明通過在Linux內(nèi)核中建立與應(yīng)用層進(jìn)行通信的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中通過已經(jīng)建立的數(shù)據(jù)通道,獲得Linux內(nèi)核層中串口通信過程的詳細(xì)信息(主要包括串口通信動作與串口通信數(shù)據(jù)等)的方式,實現(xiàn)Linux平臺下串口通信過程的高效的并且真實可靠的日志記錄。本發(fā)明的具體實施需要Linux內(nèi)核層與Linux應(yīng)用層的緊密結(jié)合,下面結(jié)合附圖 2來對本發(fā)明的工作原理流程作進(jìn)一步說明。1)首先,Linux內(nèi)核在初始化過程中將建立三條數(shù)據(jù)通道——proofs, sysfs和 netfilter (步驟Si),用以在內(nèi)核層與應(yīng)用層之間建立可靠的聯(lián)系,建立數(shù)據(jù)通道的方法主要是在內(nèi)核中注冊一系列的接口函數(shù),這樣可以實現(xiàn)在應(yīng)用層中通過某些特定的系統(tǒng)調(diào)用獲得內(nèi)核層中的串口通信過程的信息。2)然后,Linux內(nèi)核會將串口通信過程中的所有信息(包括串口通信數(shù)據(jù)和串口通信動作等)保存在Linux內(nèi)核層緩存中的特定的數(shù)據(jù)結(jié)構(gòu)中(步驟S2)。當(dāng)Linux內(nèi)核的準(zhǔn)備工作完成后,Linux應(yīng)用層中需要執(zhí)行如下步驟3)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中數(shù)據(jù)通道的選擇配置,通過合適的數(shù)據(jù)通道與內(nèi)核進(jìn)行通信,從而獲得保存在Linux內(nèi)核層緩存中的串口通信數(shù)據(jù)(步驟S3),具體包括以下步驟(3. 1)讀入配置文件(步驟S301) =Linux應(yīng)用層程序讀入配置文件,根據(jù)配置文件的內(nèi)容確定將采用的數(shù)據(jù)通道、日志記錄的時間精度、向日志記錄文件進(jìn)行寫操作的時間間隔和日志的記錄方式。(3. 2)選擇數(shù)據(jù)通道(步驟S302)根據(jù)讀入配置文件中數(shù)據(jù)通道的配置選項,選擇對應(yīng)的數(shù)據(jù)通道(內(nèi)核層中提供三種數(shù)據(jù)通道選擇pr0Cfs、sysfs和netfilter)。(3. 3)讀入串口數(shù)據(jù)(步驟S303) =Linux應(yīng)用層程序通過步驟S302中選擇的數(shù)據(jù)通道,從內(nèi)核層中讀入串口通信過程信息,將讀入的內(nèi)核數(shù)據(jù)存放在用戶層中。4)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中日志時間精度、時間間隔的配置,將取得的串口通信數(shù)據(jù)進(jìn)行進(jìn)一步分析處理(步驟S4),具體包括以下步驟(4. 1)判斷前后兩條記錄的數(shù)據(jù)類型是否都是讀操作,若不是,則直接跳入下一步 (步驟S402);若是,則處理前后兩條串口數(shù)據(jù)時間間隔(步驟S401)在串口通信過程中, Linux內(nèi)核可能會把串口通信數(shù)據(jù)分割成很小的數(shù)據(jù)段,如果按照這種原始數(shù)據(jù)格式記錄的話,一方面會使得日志可讀性變得較差,另一方面與串口通信數(shù)據(jù)的實際時間節(jié)點不符。 因此,本發(fā)明在應(yīng)用層中提供了一個可配置時間間隔的選項,應(yīng)用層進(jìn)程可以根據(jù)實際應(yīng)用環(huán)境的不同,選擇合適的時間間隔作為閾值。當(dāng)滿足前后兩條同一類型的串口通信數(shù)據(jù)的時間間隔小于所述閾值的條件時,將這兩條通信數(shù)據(jù)記錄為一條;否則將它們記錄為兩條。這樣,一方面可以提高串口通信日志文件的可讀性,另一方面可以使得串口通信日志中的時間節(jié)點與串口通信的實際情況更加吻合。(4. 2)轉(zhuǎn)換時間精度(步驟S402)根據(jù)步驟S301中讀入配置文件中的時間精度, 將步驟S303中讀入的內(nèi)核串口通信數(shù)據(jù)中的時間轉(zhuǎn)換成相應(yīng)的時間精度。(4. 3)處理數(shù)據(jù)格式(步驟S403)根據(jù)實際需求,將串口通信數(shù)據(jù)轉(zhuǎn)換成合適的格式(如十六進(jìn)制等)。
5)應(yīng)用層進(jìn)程根據(jù)應(yīng)用層中選定的日志記錄方式,將處理完的日志數(shù)據(jù)寫入到日志文件中(步驟S5)。具體是根據(jù)步驟S301中配置文件中的記錄日志方式的配置選項,按照對應(yīng)的方式將轉(zhuǎn)換后的數(shù)據(jù)寫入到日志文件中。由于在實際應(yīng)用中,串口通信的數(shù)據(jù)量可能會很大,并且串口通信數(shù)據(jù)本身在經(jīng)過較長一段時間以后有效性會降低。如果只是將所有的通信日志簡單寫到某個文件中,一段時間后可能會受到可用存儲設(shè)備空間的限制;另外,如果單個日志文件過大會給日志中查找有用信息帶來很大的麻煩?;谏鲜鲈颍景l(fā)明提供了三種日志記錄方式①不限日志文件容量的順序記錄方式將所有的數(shù)據(jù)按照順序?qū)懭肴罩疚募?,并且日志文件沒有上限限制;②限制日志文件最大容量的循環(huán)記錄方式將串口數(shù)據(jù)寫入日志文件,當(dāng)日志文件超過配置上限時,將從日志文件的首部開始繼續(xù)下去;③限制單日志文件大小的多文件順序記錄方式將所有的數(shù)據(jù)按照順序?qū)懭肴罩疚募?,?dāng)前日志文件中的大小超過配置上限時,將余下數(shù)據(jù)寫入一個新的日志文件中。下面結(jié)合附圖3,以限制日志文件最大容量的循環(huán)記錄方式為例來說明其工作流程。限制日志文件最大容量的循環(huán)記錄方式將在日志文件的第一行中記錄當(dāng)前下次要寫入該日志的位置。首先,判斷當(dāng)前日志文件的首行是否有效(步驟S501),如果無效,則會清空當(dāng)前日志文件,新建日志文件(步驟S502')。然后確定本次應(yīng)該寫入的日志文件位置(步驟S502),判斷在這個位置插入新的日志內(nèi)容后,新的日志文件大小是否超過配置的日志文件大小上限(步驟S503),如果超過則跳轉(zhuǎn)到日志文件頭部繼續(xù)寫入日志文件(步驟S504);否則,從該位置繼續(xù)寫入(步驟S504')。最后,在本次完成寫入日志內(nèi)容后,需要更新下次應(yīng)當(dāng)寫入的日志文件位置(步驟S505)。本發(fā)明通過Linux內(nèi)核層與Linux應(yīng)用層的緊密結(jié)合,實現(xiàn)Linux平臺下串口日志通信的安全可靠的日志記錄。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種Linux串口通信日志記錄的方法,其特征在于,通過在Linux內(nèi)核中建立與應(yīng)用層進(jìn)行交互的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中通過已經(jīng)建立的數(shù)據(jù)通道獲得Linux內(nèi)核層中串口通信過程的數(shù)據(jù)信息,將這些數(shù)據(jù)信息經(jīng)處理并寫入到日志文件中而獲得串口通信日
2.如權(quán)利要求1所述的方法,其特征在于,在Linux內(nèi)核中建立的與應(yīng)用層之間通信的數(shù)據(jù)通道包括三條通道procfs、sysfs禾口 netfilter。
3.如權(quán)利要求2所述的方法,其特征在于,串口通信過程中的數(shù)據(jù)信息保存在Linux內(nèi)核層的緩存中。
4.如權(quán)利要求3所述的方法,其特征在于,應(yīng)用層進(jìn)程根據(jù)應(yīng)用層配置中選定的數(shù)據(jù)通道與內(nèi)核進(jìn)行通信,從而獲得所述保存在Linux內(nèi)核層緩存中的串口通信數(shù)據(jù)信息。
5.如權(quán)利要求4所述的方法,其特征在于,所述獲得保存在Linux內(nèi)核層緩存中的串口通信數(shù)據(jù)信息的步驟包括(1)讀入配置文件=Linux應(yīng)用層程序讀入配置文件,根據(jù)配置文件的內(nèi)容確定將采用的數(shù)據(jù)通道、日志記錄的時間精度、向日志記錄文件進(jìn)行寫操作的時間間隔和日志記錄的方式;(2)選擇數(shù)據(jù)通道根據(jù)讀入配置文件中數(shù)據(jù)通道的配置選項,選擇對應(yīng)的數(shù)據(jù)通道;(3)讀入串口數(shù)據(jù)=Linux應(yīng)用層程序通過步驟O)中選擇的數(shù)據(jù)通道,從內(nèi)核層中讀入串口通信過程信息,將讀入的內(nèi)核數(shù)據(jù)存放到用戶層中。
6.如權(quán)利要求4所述的方法,其特征在于,判斷前后兩條記錄的數(shù)據(jù)類型是否都是讀操作,若是,應(yīng)用層進(jìn)程根據(jù)實際應(yīng)用環(huán)境在應(yīng)用層配置中選擇相應(yīng)的時間間隔作為閾值, 當(dāng)前后兩條同一類型的串口通信數(shù)據(jù)的時間間隔小于所述閾值時,將這兩條通信數(shù)據(jù)記錄為一條;否則將它們記錄為兩條。
7.如權(quán)利要求6所述的方法,其特征在于,判斷前后兩條記錄的數(shù)據(jù)類型是否都是讀操作,若否;或者在完成上述對兩條同一類型的串口通信數(shù)據(jù)的時間間隔是否小于所述閾值的判斷及記錄后,應(yīng)用層進(jìn)程根據(jù)應(yīng)用層配置中選定的數(shù)據(jù)格式和時間精度,轉(zhuǎn)換保存在Linux內(nèi)核層緩存中的串口通信數(shù)據(jù)信息的數(shù)據(jù)格式和獲得數(shù)據(jù)信息的時間精度。
8.如權(quán)利要求7所述的方法,其特征在于,應(yīng)用層進(jìn)程根據(jù)應(yīng)用層配置中所選定的日志記錄的方式,將處理完的日志數(shù)據(jù)寫入到日志文件中。
9.如權(quán)利要求5或8所述的方法,其特征在于,所述日志記錄的方式包括三種①不限日志文件容量的順序記錄方式將所有的數(shù)據(jù)按照順序?qū)懭肴罩疚募?,并且日志文件沒有上限限制;②限制日志文件最大容量的循環(huán)記錄方式將串口數(shù)據(jù)寫入日志文件,當(dāng)日志文件超過配置上限時,將從日志文件的首部開始繼續(xù)下去;③限制單日志文件大小的多文件順序記錄方式將所有的數(shù)據(jù)按照順序?qū)懭肴罩疚募?,?dāng)前日志文件中的大小超過配置上限時,將余下數(shù)據(jù)寫入一個新的日志文件中。
全文摘要
本發(fā)明提供一種Linux串口通信日志記錄的方法,該方法通過在Linux內(nèi)核中建立與應(yīng)用層進(jìn)行交互的數(shù)據(jù)通道,進(jìn)而在應(yīng)用層中通過已經(jīng)建立的數(shù)據(jù)通道,獲得Linux內(nèi)核層中串口通信過程的詳細(xì)信息,主要包括串口通信動作與串口通信數(shù)據(jù)等。本發(fā)明涉及的串口通信日志記錄方法主要在Linux內(nèi)核層中進(jìn)行處理,這樣可以在不影響串口通信的情況下,實現(xiàn)串口通信過程中的一種可靠的日志功能。另外,在應(yīng)用層中提供了多個接口,因此可以根據(jù)實際的應(yīng)用需求與特點,選擇合適的數(shù)據(jù)通道類型、日志時間精度、連續(xù)時間間隔以及日志記錄方案,從而使得記錄的串口日志具有較高的可靠性和可讀性,滿足不同應(yīng)用場景的需求。
文檔編號G06F11/34GK102455969SQ20101058899
公開日2012年5月16日 申請日期2010年12月15日 優(yōu)先權(quán)日2010年12月15日
發(fā)明者蘭雨晴, 夏穎, 王朱磊, 董恩廣, 高永紅, 黃士林 申請人:中標(biāo)軟件有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
辽宁省| 静安区| 金昌市| 和政县| 博客| 兴国县| 项城市| 海门市| 治多县| 镇赉县| 广河县| 巩留县| 清水河县| 横峰县| 兴文县| 合肥市| 鸡泽县| 精河县| 黑山县| 太仆寺旗| 陆丰市| 阜新| 怀宁县| 图木舒克市| 五原县| 绍兴市| 延津县| 大竹县| 阜新市| 苏尼特左旗| 十堰市| 洛浦县| 宽城| 广昌县| 来安县| 阿拉善盟| 晋州市| 灵台县| 岑巩县| 瑞昌市| 阿拉善盟|