天天看點

學會做嵌入式Linux作業系統——交叉編譯SNMP

交叉編譯SNMP

一般系統都會有SNMP的支援,下載下傳了net-snmp-5.1.3.1,先看看INSTALL和FAQ文檔(因為以前從來沒有碰過這個東東,見笑了……),按照說明,在原生主機上安裝了一回,安裝完成後,發現在指定安裝目錄下主要包括了幾塊檔案:

bin:SNMP的一些功能腳本和程式;

sbin:主要的代理程式和trap程式:snmpd和snmptrap

include/lib:自身相容及第三方開發所需的頭檔案及庫檔案;

share:主要是MIB檔案;

然後回到安裝目錄下,運作./configuare --help,仔細檢視了其安裝編譯選項,因為我定位的小型的系統,隻需具備基本的SNMP功能即可,是以:

那些bin目錄下的功能程式也不需要,對應--disable-applications

bin下的腳本也是不需要的,對應:--disable-scripts

使用者手冊也不需要:--disable-manuals

關閉ipv6支援:--disable-ipv6

還有一個--enable-mini-agent選項,說明是編譯出一個最小化的snmpd,比較有趣,試試先。

對于交叉編譯,還需要用--host指明目标平台。

 #CC=arm-linux-gcc ./configure --disable-embedded-perl --host=arm-linux  /

--prefix=/usr   --with-endianness=little  

OK,看完了幫助說明,開始編譯了:

1、配置,根據以上确定的選項:

[[email protected] root]# CC=i386-linux-gcc ./configure --host=$TARGET --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-applications --disable-manuals --disable-scripts --disable-ucd-snmp-compatibility

CC指明了編譯器;--host指明了我的目标平台,這個環境變量在我前面定義的devedaq腳本中。

還算順利,繼續編譯它:

[[email protected] net-snmp-5.1.3.1]# make LDFLAGS="-static"

呵呵,因為沒有裝lib庫,是以我用了-static選項,指明是靜态編譯;

3、安裝

安裝就需要指明安裝路徑了,路徑可以在.config的時候指定,因為那個時候,那串東東太長了,我在install時指定也不遲:

#make prefix=${TARGET_PREFIX} exec_prefix=${TARGET_PREFIX} install

4、檢查一下:

[[email protected] net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/sbin

total 2120

-rwxr-xr-x 1 root root 2164301 Nov 16 09:22 snmpd

snmpd就是我們要的代理主程式了,大約靜态編譯有2M。

[[email protected] net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/bin

total 4380

-rwxr-xr-x 2 root root 391980 Oct 14 2004 ar

-rwxr-xr-x 2 root root 581228 Oct 14 2004 as

……

呵呵,那堆程式和腳本沒有安裝,如snmpwalk……

ls ${TARGET_PREFIX}/lib

ls -l ${TARGET_PREFIX}/include

看看我們需要的mib檔案:

[[email protected] net-snmp-5.1.3.1]# ls ${TARGET_PREFIX}/share/snmp

mib2c.access_functions.conf mib2c.column_defines.conf mib2c.int_watch.conf mib2c.old-api.conf

mib2c.array-user.conf mib2c.column_enums.conf mib2c.iterate_access.conf mib2c.scalar.conf

mib2c.check_values.conf mib2c.conf mib2c.iterate.conf mibs

mib2c.check_values_local.conf mib2c.create-dataset.conf mib2c.notify.conf snmpconf-data

5、移植

基本完成了,因為snmpd太大了點,對它進行strip處理:

先備個份:

[[email protected] net-snmp-5.1.3.1]# cp ${TARGET_PREFIX}/sbin/snmpd ${TARGET_PREFIX}/sbin/snmpd.bak

[[email protected] net-snmp-5.1.3.1]# i386-linux-strip ${TARGET_PREFIX}/sbin/snmpd

[[email protected] net-snmp-5.1.3.1]# ls -l ${TARGET_PREFIX}/sbin/snmpd

-rwxr-xr-x 1 root root 503300 Nov 16 09:30 /home/skynet/tools/i386-linux/sbin/snmpd

經過處理後,還有近500KB了。

因為隻有SNMP agent功能,即snmpd程式,其它的都可以忽略。用了靜态編譯,lib下邊那些libnetsnmp檔案都可以不需要了,程式運作

需要MIB庫,也就是share下的内容,把這兩個東東拷到rootfs相應的目錄中去:

[[email protected] net-snmp-5.1.3.1]# cp ${TARGET_PREFIX}/sbin/snmpd ${PRJROOT}/rootfs/usr/sbin

[[email protected] net-snmp-5.1.3.1]# mkdir -p ${PRJROOT}/rootfs/usr/local/share

[[email protected] net-snmp-5.1.3.1]# cp -r ${TARGET_PREFIX}/share/snmp ${PRJROOT}/rootfs/usr/local/share

[[email protected] net-snmp-5.1.3.1]# cp EXAMPLE.conf ${PRJROOT}/rootfs/usr/local/share/snmp/snmpd.conf

最後一步是把安裝目錄下的配置檔案範例拷到snmpd啟動時預設的搜尋目錄中去。

6、測試

打開snmpd.conf看看:

[[email protected] net-snmp-5.1.3.1]# vi ${PRJROOT}/rootfs/usr/local/share/snmp/snmpd.conf

有如下語句:

# sec.name source community

com2sec local localhost COMMUNITY

com2sec mynetwork NETWORK/24 COMMUNITY

定義了兩個使用者,本地及網絡的,以及它們的通讀密鑰,按自己的需要修改一下,如:

# sec.name source community

com2sec local 127.0.0.1 public

com2sec mynetwork 0.0.0.0 public

後面是定義使用者的使用者組等一大堆東東,事實上不用修改它們了。運作它:

[[email protected] net-snmp-5.1.3.1]# chroot ${PRJROOT}/rootfs /bin/sh

BusyBox v1.00 (2004.10.13-06:32+0000) Built-in shell (ash)

Enter 'help' for a list of built-in commands.

/ # snmpd

/ # exit

在我們自己的根檔案系統環境下運作它,然後退出來。用ps檢視:

#ps -aux

……

root 32270 0.0 0.3 1212 936 ? S 09:38 0:00 snmpd

[[email protected] net-snmp-5.1.3.1]# netstat -anu

……

udp 0 0 0.0.0.0:161 0.0.0.0:*

呵呵,已經成功啟動了。用一個SNMP管理軟體試試,可以成功地擷取到資訊。OK!

總結一下:

1、主程式+MIB庫大了點,共計約2M,不過我确實沒有辦法再小了,而且一味求小,也不是我的目的。

2、功能稍微簡單了些,隻有agent,如果需要,可以類似地把其它程式加上去就可以了。

3、第一次玩net-snmp,還是有點生疏,比如我靜态編譯二進制程式,并不需要include/lib下的檔案,但是如何關閉它們呢?我試過--disable-ucd-snmp-compatibility,不過好像不是這個選項……下次改進了……

http://www.linux-cn.com/plus/view.php?aid=48248

本文來自CSDN部落格,轉載請标明出處:http://blog.csdn.net/livingpark/archive/2008/10/10/3048575.aspx

繼續閱讀