欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linuxtrap命令的簡單介紹

KGDB補丁是給內核添加什么部件?

內核工具KGDB調試環(huán)境需要為Linux 內核加上 kgdb補丁,補丁實現(xiàn)GDB遠程調試所需要的功能,包括命令處理、陷阱處理及串口通信3個主要的部分。KGDB補丁的主要作用是在Linux 內核中添加了一個調試Stub。調試Stub是Linux 內核中的一小段代碼,是運行GDB的開發(fā)機和所調試內核之間的一個媒介。GDB和調試stub之間通過GDB串行協(xié)議進行通信。GDB串行協(xié)議是-種基于消息的ASCII 碼協(xié)議,包含了各種調試命令。當設置斷點時,KGDB將斷點的指令替換為一條 trap指令,當執(zhí)行到斷點時控制權就轉移到調試 stub中去。此時,調試stub 的任務就是使用遠程串行通信協(xié)議將當前環(huán)境傳送給GDB,然后從GDB處接收命令。GDB命令告訴stub 下一步該做什么,當stub收到繼續(xù)執(zhí)行的命令時,將恢復程序的運行環(huán)境,把對 CPU的控制權重新交還給內核。KGDB補丁給內核添加以下3個部件:

為愛輝等地區(qū)用戶提供了全套網頁設計制作服務,及愛輝網站建設行業(yè)解決方案。主營業(yè)務為網站設計制作、做網站、愛輝網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

(1 ) GDB stub

GDB stub被稱為調試插樁(簡稱為stub),是KGDB調試器的核心。它是Linux內核中的一小段代碼,用來處理主機上: GDB發(fā)來的各種請求;并且在內核處于被調試狀態(tài)時,控制目標機板上的處理器。

(2)修改異常處理函數(shù)

當這個異常發(fā)生時,內核將控制權交給KGDB調試器,程序進入KGDB提供的異常處理函數(shù)中。在里面,可以分析程序的各種情況。

(3)串口通信

GDB和 stub之間通過GDB串行協(xié)議進行通信。它是一種基于消息的ASCII 碼協(xié)議,包含了各種調試命令。除串口外,也可以使用網卡進行通信。以設置內核斷點為例說明KGDB與GDB之間的工作過程。設置斷點時,KGDB修改內核代碼,將斷點位置的指令替換成一條異常指令(在ARM中這是一條未定義的指令)。當執(zhí)行到斷點時發(fā)生異常,控制權轉移到stub 的異常處理函數(shù)中。此時,stub的任務就是使用GDB串行通信協(xié)議將當前環(huán)境傳送給GDB,然后從GDB處接收命令,GDB命令告訴stub下一步該做什么。當stub收到繼續(xù)執(zhí)行的命令時,將恢復原來替換的指令、恢復程序的運行環(huán)境,把對CPU的控制權重新交還給內核。

linux驅動中斷,程序運行幾個小時后系統(tǒng)崩潰

中斷與定時器:

中斷的概念:指CPU在執(zhí)行過程中,出現(xiàn)某些突發(fā)事件急待處理,CPU暫停執(zhí)行當前程序,轉去處理突發(fā)事件

,處理完后CPU又返回原程序被中斷的位置繼續(xù)執(zhí)行

中斷的分類:內部中斷和外部中斷

內部中斷:中斷源來自CPU內部(軟件中斷指令、溢出、觸發(fā)錯誤等)

外部中斷:中斷源來自CPU外部,由外設提出請求

屏蔽中斷和不可屏蔽中斷:

可屏蔽中斷:可以通過屏蔽字被屏蔽,屏蔽后,該中斷不再得到響應

不可平布中斷:不能被屏蔽

向量中斷和非向量中斷:

向量中斷:CPU通常為不同的中斷分配不同的中斷號,當檢測到某中斷號的中斷到來后,就自動跳轉到與該中斷號對應的地址執(zhí)行

非向量中斷:多個中斷共享一個入口地址。進入該入口地址后再通過軟件判斷中斷標志來識別具體哪個是中斷

也就是說向量中斷由軟件提供中斷服務程序入口地址,非向量中斷由軟件提供中斷入口地址

/*典型的非向量中斷首先會判斷中斷源,然后調用不同中斷源的中斷處理程序*/

irq_handler()

{

...

int int_src = read_int_status();/*讀硬件的中斷相關寄存器*/

switch(int_src){//判斷中斷標志

case DEV_A:

dev_a_handler();

break;

case DEV_B:

dev_b_handler();

break;

...

default:

break;

}

...

}

定時器中斷原理:

定時器在硬件上也以來中斷,PIT(可編程間隔定時器)接收一個時鐘輸入,

當時鐘脈沖到來時,將目前計數(shù)值增1并與已經設置的計數(shù)值比較,若相等,證明計數(shù)周期滿,產生定時器中斷,并

復位計數(shù)值。

如下圖所示:

Linux中斷處理程序架構:

Linux將中斷分為:頂半部(top half)和底半部(bottom half)

頂板部:完成盡可能少的比較緊急的功能,它往往只是簡單的讀取寄存器中的中斷狀態(tài)并清除中斷標志后就進行

“登記中斷”(也就是將底半部處理程序掛在到設備的底半部執(zhí)行隊列中)的工作

特點:響應速度快

底半部:中斷處理的大部分工作都在底半部,它幾乎做了中斷處理程序的所有事情。

特點:處理相對來說不是非常緊急的事件

小知識:Linux中查看/proc/interrupts文件可以獲得系統(tǒng)中斷的統(tǒng)計信息。

如下圖所示:

第一列是中斷號 第二列是向CPU產生該中斷的次數(shù)

介紹完相關基礎概念后,讓我們一起來探討一下Linux中斷編程

Linux中斷編程:

1.申請和釋放中斷

申請中斷:

int request_irq(unsigned int irq,irq_handler_t handler,

unsigned long irqflags,const char *devname,void *dev_id)

參數(shù)介紹:irq是要申請的硬件中斷號

handler是向系統(tǒng)登記的中斷處理程序(頂半部),是一個回調函數(shù),中斷發(fā)生時,系統(tǒng)調用它,將

dev_id參數(shù)傳遞給它

irqflags:是中斷處理的屬性,可以指定中斷的觸發(fā)方式和處理方式:

觸發(fā)方式:IRQF_TRIGGER_RISING、IRQF_TRIGGER_FALLING、IRQF_TRIGGER_HIGH、IRQF_TRIGGER_LOW

處理方式:IRQF_DISABLE表明中斷處理程序是快速處理程序,快速處理程序被調用時屏蔽所有中斷

IRQF_SHARED表示多個設備共享中斷,dev_id在中斷共享時會用到,一般設置為NULL

返回值:為0表示成功,返回-EINVAL表示中斷號無效,返回-EBUSY表示中斷已經被占用,且不能共享

頂半部的handler的類型irq_handler_t定義為

typedef irqreturn_t (*irq_handler_t)(int,void*);

typedef int irqreturn_t;

2.釋放IRQ

有請求當然就有釋放了

void free_irq(unsigned int irq,void *dev_id);

參數(shù)定義與request_irq類似

3.使能和屏蔽中斷

void disable_irq(int irq);//等待目前中斷處理完成(最好別在頂板部使用,你懂得)

void disable_irq_nosync(int irq);//立即返回

void enable_irq(int irq);//

4.屏蔽本CPU內所有中斷:

#define local_irq_save(flags)...//禁止中斷并保存狀態(tài)

void local_irq_disable(void);//禁止中斷,不保存狀態(tài)

下面來分別介紹一下頂半部和底半部的實現(xiàn)機制

底半部機制:

簡介:底半部機制主要有tasklet、工作隊列和軟中斷

1.底半部是想方法之一tasklet

(1)我們需要定義tasklet機器處理器并將兩者關聯(lián)

例如:

void my_tasklet_func(unsigned long);/*定義一個處理函數(shù)*/

DECLARE_TASKLET(my_tasklet,my_tasklet_func,data);

/*上述代碼定義了名為my_tasklet的tasklet并將其余

my_tasklet_func()函數(shù)綁定,傳入的參數(shù)為data*/

(2)調度

tasklet_schedule(my_tasklet);

//使用此函數(shù)就能在是當?shù)臅r候進行調度運行

tasklet使用模板:

/*定義tasklet和底半部函數(shù)并關聯(lián)*/

void xxx_do_tasklet(unsigned long);

DECLARE_TASKLET(xxx_tasklet,xxx_do_tasklet,0);

/*中斷處理底半部*/

void xxx_do_tasklet(unsigned long)

{

...

}

/*中斷處理頂半部*/

irqreturn_t xxx_interrupt(int irq,void *dev_id)

{

...

tasklet_schedule(xxx_tasklet);//調度地板部

...

}

/*設備驅動模塊加載函數(shù)*/

int __init xxx_init(void)

{

...

/*申請中斷*/

result = request_irq(xxx_irq,xxx_interrupt,

IRQF_DISABLED,"xxx",NULL);

...

return IRQ_HANDLED;

}

/*設備驅動模塊卸載函數(shù)*/

void __exit xxx_exit(void)

{

...

/*釋放中斷*/

free_irq(xxx_irq,xxx_interrupt);

...

}

2.底半部實現(xiàn)方法之二---工作隊列

使用方法和tasklet類似

相關操作:

struct work_struct my_wq;/*定義一個工作隊列*/

void my_wq_func(unsigned long);/*定義一個處理函數(shù)*/

通過INIT_WORK()可以初始化這個工作隊列并將工作隊列與處理函數(shù)綁定

INIT_WORK(my_wq,(void (*)(void *))my_wq_func,NULL);

/*初始化工作隊列并將其與處理函數(shù)綁定*/

schedule_work(my_wq);/*調度工作隊列執(zhí)行*/

/*工作隊列使用模板*/

/*定義工作隊列和關聯(lián)函數(shù)*/

struct work_struct(unsigned long);

void xxx_do_work(unsigned long);

/*中斷處理底半部*/

void xxx_do_work(unsigned long)

{

...

}

/*中斷處理頂半部*/

/*中斷處理頂半部*/

irqreturn_t xxx_interrupt(int irq,void *dev_id)

{

...

schedule_work(my_wq);//調度底半部

...

return IRQ_HANDLED;

}

/*設備驅動模塊加載函數(shù)*/

int xxx_init(void)

{

...

/*申請中斷*/

result = request_irq(xxx_irq,xxx_interrupt,

IRQF_DISABLED,"xxx",NULL);

...

/*初始化工作隊列*/

INIT_WORK(my_wq,(void (*)(void *))xxx_do_work,NULL);

}

/*設備驅動模塊卸載函數(shù)*/

void xxx_exit(void)

{

...

/*釋放中斷*/

free_irq(xxx_irq,xxx_interrupt);

...

}

請問SNMP是什么,trap是什么?

SNMP一般指簡單網絡管理協(xié)議,簡單網絡管理協(xié)議(SNMP)是專門設計用于在IP網絡管理網絡節(jié)點(服務器、工作站、路由器、交換機及HUBS等)的一種標準協(xié)議,它是一種應用層協(xié)議。

trap為Linux命令,bash內置命令,可以查看shell環(huán)境信號和設置信號的處理方式。

使用格式(commands為命令,signals為信號的指代):

1):$trap"commands"signals#接收到signals指定的信號時,執(zhí)行commands命令。

2):$trapsignals#如果沒有指定命令就是恢復signals的動作。比如trapINT就是恢復Ctrl+C。

3):$trap""signals#忽略信號signals

4):$trap-l#列出所有的信號

擴展資料:

SNMP協(xié)議種類:

目前,SNMP有3種:SNMPV1、SNMPV2、SNMPV3。第1版和第2版沒有太大差距,但SNMPV2是增強版本,包含了其它協(xié)議操作。與前兩種相比,SNMPV3則包含更多安全和遠程配置。為了解決不同SNMP版本間的不兼容問題,RFC3584中定義了三者共存策略。

SNMP還包括一組由RMON、RMON2、MTB、MTB2、OCDS及OCDS定義的擴展協(xié)議。

參考資料來源:百度百科-SNMP

參考資料來源:百度百科-trap

求教linux下如何配置snmp trap

安裝snmp服務

CentOS/RedHat下可以只用yum命令進行安裝。

$ yum –y install net-snmp net-snmp-devel

若要使用snmpwalk進行安裝檢測,則還需要安裝net-snmp-utils包

$ yum –y install net-snmp-utils

Ubuntu可以通過apt-get install snmp snmpd 進行安裝

設置安全的驗證方式

將SNMP代理程序暴露給網絡上的所有主機是很危險的,為了防止其它主機訪問您的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗證機制。SNMP支持不同的驗證機制,這取決于不同的SNMP協(xié)議版本,云監(jiān)控目前支持v2c和v3兩個版本,其中v2c版本的驗證機制比較簡單,它基于明文密碼和授權IP來進行身份驗證,而v3版本則通過用戶名和密碼的加密傳輸來實現(xiàn)身份驗證,我們建議使用v3,當然,只要按照以下的介紹進行配置,不論是v2c版本還是v3版本,都可以保證一定的安全性,您可以根據(jù)情況來選擇。

注意一點,SNMP協(xié)議版本和SNMP代理程序版本是兩回事,剛才說的v2c和v3是指SNMP協(xié)議的版本,而Net-SNMP是用來實現(xiàn)SNMP協(xié)議的程序套件,目前它的最新版本是剛才提到的5.4.2.1。

v2c

先來看如何配置v2c版本的SNMP代理,我們來創(chuàng)建snmpd的配置文件,默認情況下它是不存在的,我們來創(chuàng)建它,如下:

sdo:~ # vi /usr/local/snmp/share/snmp/snmpd.conf

然后我們需要創(chuàng)建一個只讀帳號,也就是read-only community,在snmpd.conf中添加以下內容:

rocommunity sdomonitor 114.80.132.9 rocommunity sdomonitor 58.215.169.26 rocommunity sdomonitor 58.215.169.27

如果想要檢測服務是否成功開啟,則還需要在snmpd.conf中添加:

rocommunity sdomonitor 127.0.0.1

注意,這里的"rocommunity"表示這是一個只讀的訪問權限,云監(jiān)控只可以從您的服務器上獲取信息,而不能對服務器進行任何設置。

緊接著的"sdomonitor"相當于密碼,很多平臺喜歡使用"public"這個默認字符串。這里的"sdomonitor"只是一個例子,您可以設置其它字符串作為密碼。

最右邊的"60.195.249.83"代表指定的監(jiān)控點IP,這個IP地址是云監(jiān)控專用的監(jiān)控點,這意味著只有云監(jiān)控有權限來訪問您的SNMP代理程序。

所以,以上這段配置中,只有"sdomonitor"是需要您進行修改的,同時在云監(jiān)控上添加服務器的時候,需要提供這個字符串。

v3

當然,我們建議您使用v3版本來進行身份驗證。對于一些早期版本的Linux分發(fā)版,其內置的SNMP代理程序可能并不支持v3,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。

v3支持另一種驗證方式,需要創(chuàng)建一個v3的帳號,我們同樣修改以下配置文件:

sdo:~ # vi /usr/local/snmp/share/snmp/snmpd.conf

然后添加一個只讀帳號,如下:

rouser sdomonitor auth

可以看到,在v3中,"rouser"用于表示只讀帳號類型,隨后的"sdomonitor"是指定的用戶名,后邊的"auth"指明需要驗證。

接下來,我們還要添加"sdomonitor"這個用戶,這就是v3中的特殊機制,我們打開以下配置文件:

sdo:~ # vi /var/net-snmp/snmpd.conf

這個文件會在snmpd啟動的時候被自動調用,我們需要在它里邊添加創(chuàng)建用戶的指令,如下:

createUser sdomonitor MD5 mypassword

這行配置的意思是創(chuàng)建一個名為"sdomonitor"的用戶,密碼為"mypassword",并且用MD5進行加密傳輸。這里要提醒的是:

密碼至少要有8個字節(jié)

這是SNMP協(xié)議的規(guī)定,如果小于8個字節(jié),通信將無法進行。

值得注意的是,一旦snmpd啟動后,出于安全考慮,以上這行配置會被snmpd自動刪除,當然,snmpd會將這些配置以密文的形式記錄在其它文件中,重新啟動snmpd是不需要再次添加這些配置的,除非您希望創(chuàng)建新的用戶。

以上配置中的用戶名、密碼和加密方式,在云監(jiān)控添加服務器的時候需要添加。

啟動snmp服務

$ service snmpd start

用以下命令檢查服務是否啟動成功

$ snmpwalk -v 2c -c sdomonitor 127.0.0.1 system

如果要關閉,則可以直接kill這個進程,如下:

$ killall -9 snmpd 或者$ service snmpd stop

當前文章:linuxtrap命令的簡單介紹
文章地址:http://chinadenli.net/article26/hijjjg.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供Google標簽優(yōu)化網頁設計公司外貿建站網站維護App設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化