1. 程式人生 > >samba移植到嵌入式裝置

samba移植到嵌入式裝置

部分內容來自:http://blog.csdn.net/zh98jm/article/details/6104691

先上一張samba的抓包圖:


裡面的資料傳輸應該就是SMB/CIFS這兩個協議了。

SMB(Server Message Block)通訊協議是微軟(Microsoft)和英特爾(Intel)在1987年制定的協議,主要是作為Microsoft網路的通訊協議,但是微軟不開放協議。而Microsoft Windows平臺在個人電腦中是佔據主要位置了,為了與微軟平臺通訊共享檔案,samba誕生了,Samba專案是採用逆向工程(類似黑盒?)來提供一個與SMB軟體相容的自由軟體,使得非微軟作業系統也能夠使用它。

瞭解以上起源,就不用再追問samba與FTP的區別了。FTP主要是上傳下載,而不是開啟,在MAC上FTP需要第三方軟體,而samba就不用,samba就相當於加入了局域網,在windows的網上鄰居里甚至能看到它,但是samba缺點是體積太大。

這次移植的是samba-3.0.23.tar.gz。

同時嘗試了samba-4.1.11.tar.gz,samba-3.6.3.tar.gz,samba-3.5.9.tar.gz,但這幾個都編譯失敗了,由於時間和精力原因就沒有繼續研究。

samba的全部資訊在這裡:http://www.samba.org/,裡面有軟體包下載,但我更喜歡從這裡下載:http://download.chinaunix.net/download/0001000/30.shtml。

本來準備直接把原始碼放進工程編譯,但是bitbake的編譯環境的確太麻煩,增加了5個編譯相關檔案、修改了2個編譯相關的檔案仍然移植失敗,只得放棄這種方法,那就在工程外面編譯然後把生成的可執行檔案扔進根檔案系統。

第一步,設定環境變數。

檢視環境變數:echo $PATH
臨時新增
1:export PATH=/usr/local/webserver/mysql/bin:$PATH
第2種方法,永久新增:
# vim /etc/profile
在最後,新增:
export PATH="/usr/local/webserver/mysql/bin:$PATH"

/usr/local/webserver/mysql/bin的路徑就是工程裡交叉編譯工具的路徑。

第二步,進source目錄,執行configure。

執行configure需要帶一些引數,我的是這樣:

./configure CC=arm-oe-linux-gnueabi-gcc LD=arm-oe-linux-gnueabi-ld AR=arm-oe-linux-gnueabi-ar --target=arm-oe-linux --host=arm-oe-linux-gnueabi samba_cv_CC_NEGATIVE_ENUM_VALUES=yes

一般ARM晶片的交叉編譯工具是arm-linux-gcc,所以要CC=arm-linux-gcc,AR 可以在gcc的目錄下--target  --host可以寫交叉編譯工具gcc前面的部分。

第三步,make

此時會出錯,這一點是最鬱悶的,一個完美的開源包為什麼會報錯呢?這個其實應該是非常常見的,完美是不存在的,此時就修改原始碼吧,開源就是讓人修改原始碼的。

根據錯誤資訊修改原始碼。如time.c報了一個錯誤,那就把time.c的60行換成gettimeofday(tval,NULL);

此時為了後面的方便,還可以在include/config.h,加上#define HAVE_IFACE_IFCONF 1

如果還有其他報錯,根據錯誤資訊修改原始碼,不知道如何修改就上網查,上網查不到就換版本,這是我的移植思路。

完成後就發現在\samba-3.0.23\source\bin下有很多生成檔案了,其中smbd,nmbd是必須的。

第四步,配置檔案smb.conf,一個服務程式最重要的是配置檔案。

配置項太多不介紹,自己網上查,感覺很複雜。我的配置檔案如下:

[global]
workgroup = workgroup
server string =  Samba
netbios name = samba
security = share
guest account = root
[homes]
path = /
available = yes
browsable = yes
public = yes
writable = yes
guest ok = yes

第五步,匯入smbd,nmbd,smb.conf這三個檔案到嵌入式板子裡去,具體根據每個平臺的工程特點進行操作。

主要是建立以下四個目錄:

/usr/local/samba/bin
/usr/local/samba/private
/usr/local/samba/lib

/usr/local/samba/var

然後這樣就行了:

./usr/local/samba/bin/smbd -D
./usr/local/samba/bin/nmbd -D

此時可能會發現缺少某些庫,那就找到扔進/usr/local/samba/lib

如我的報錯:smbd: error while loading shared libraries: libpopt.so.0: cannot open shared object file: No such file or directory

那就找libpopt.so.0,很幸運在編譯工程裡就找到了,扔進檔案系統,完事。

\\192.168.1.1    就可以開啟共享了。

如果設定開機啟動samba,直接\\192.168.1.1便可開啟samba共享內容了。

最後增加一句:smbd -i -d 8 啟動smb,可以列印啟動資訊,其中-i 是互動模式,-d是列印除錯級別。

相關推薦

no