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是列印除錯級別。

相關推薦

samba移植嵌入式裝置

部分內容來自:http://blog.csdn.net/zh98jm/article/details/6104691先上一張samba的抓包圖:裡面的資料傳輸應該就是SMB/CIFS這兩個協議了。SMB(Server Message Block)通訊協議是微軟(Microso

[ZedBoard移植嵌入式Linux教程(4)]建立裝置樹(Device-Tree)檔案dts

裝置樹用於硬體和軟體之間的資訊互動,也就是將ZedBoard的硬體資訊傳遞給linux核心,避免在linux核心中硬編碼而影響在其他平臺上的可移植性。裝置樹一般以兩種檔案格式存在,一個是dts檔案,也就是文字檔案,便於閱讀,另外一種是dtb檔案,是二進位制格式,是dts使用d

移植zxing(C++)到嵌入式裝置

從zxing官網找來用C++編寫的zxing原始碼,需要移植到嵌入式裝置上,根據效能需要優化,說說我的移植與優化方式: 1.編譯出的目標太大14MB,解碼耗時在秒級:首先檢視編譯選項,SConscript指令碼中 cxxflags.append('-O0 -g3 -ggdb

Local Binary Convolutional Neural Networks ---卷積深度網路移植嵌入式裝置上?

前言:今天他給大家帶來一篇發表在CVPR 2017上的文章。 原文:LBCNN 本文主要內容:把區域性二值與卷積神經網路結合,以削減引數,從而實現深度卷積神經網路端到端的訓練,也就是未來嵌入式裝置上跑卷積效果將會越來越好。 主要貢獻: 提出一種區域性二值卷積(LBC)可以用來替代傳統的卷積神經網路的卷積層

嵌入式裝置LCD模組漢字型檔檔案生成方式

近期有專案需要用的LCD顯示沐足顯示一些中文,對比了下帶字型檔的模組要比不帶字型檔的模組要貴得多,想想那就自己建立字型檔吧,能剩下不少費用,再說裝置內部的FLASH大把的容量,不利用也有點浪費了。 下文轉載自:http://www.rationmcu.com/elecjc/356.html

針對Qt 嵌入式裝置 Treewidget listwidget 按鍵無響應一問題說明

舉例: 問題: 點選 listwidget 中的 item 發現對應的 item 被啟用(變色),但是卻沒有執行相對應的指令 答案: 由於在嵌入式裝置中由於驅動問題,導致觸控式螢幕的點選可能是“右滑鼠點選”,也可能是“左滑鼠點選”,如果沒有進行設定那麼很多控制元件在“右擊”的時候

嵌入式裝置的發展:解決複雜的設計挑戰

在物聯網之前,嵌入式裝置曾經相對簡單易用。裝置,工業控制器或環境感測器的設計者只需要連線輸入訊號,與微控制器一起處理並提供輸出控制。系統是獨立的; 除了逆向工程之外,黑客沒有動力訪問系統。 隨著智慧手機的推出,我們現在希望我們的裝置智慧化,可升級並可通過網際網路訪問。安全性不是可選的,如果不

嵌入式裝置上使用tcpdump抓包

 在實際應用中開發中,嵌入式裝置使用網路通訊時,經常不好分析資料,通常只能使用串列埠列印和依耐伺服器端使用抓包工具獲取網路資料,使開發工作有不同程度的受到阻礙,這裡簡單的介紹一下如何使用tcpdump工具在嵌入式裝置上抓包。 移植: 下載資源tcpdump,libpcap,可到官網上:

關於嵌入式裝置使用 Android 或者 Linux 的一些討論

By Antmicro Catherine Labedzka and Michael Gielda 曾幾何時 “嵌入式 Linux” 這個詞被以懷疑的眼光看待。這個小型、低功耗、基於 Linux 並且具備軟體開源能力的裝置,如今已經發展成了一個產業;現在不是問“為什麼選擇 

gcc覆蓋測試用於嵌入式裝置-gcov lcov genhtml

轉載:https://www.cnblogs.com/StitchSun/p/4480229.html交叉編譯鏈為:/opt/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcov"環境要求:1、有被測的原始碼2、對應平臺的交叉

可用於實時嵌入式裝置的心電訊號基線漂移濾除方法——基於延遲的近似零相位IIR濾波器

      考慮到ECG訊號去基漂演算法需要在嵌入式裝置中執行,並且儘可能降低延遲,選擇IIR低通濾波器求得訊號的基線漂移。將訊號減去基漂後得到最終訊號。       參考論文《基於零相位的心電訊號基線漂移濾波方法的實時性改進》。該論文

Itop4412開發板emmc驅動移植裝置樹)

硬體裝置:itop4412開發板 核心版本linux-3.8.1 裝置樹方式減少了裝置的冗餘編碼,同時使移植變得更加高效。eMMC作為開發板的基礎,十分重要。 裝置樹用的是核心自帶的smdk4412.dts vim arch/arm/boot/dts/exynos4412-

python實現獲取電腦和嵌入式裝置(樹3)IP、主機名、Mac地址,並把這些資訊上傳雲伺服器。

import socket import uuid # 獲取主機名 hostname = socket.gethostname() #獲取IP ip = socket.gethostbyname(hostname) # 獲取Mac地址 def get_mac_address

嵌入式裝置上使用tcpdump方法

在實際應用中開發中,嵌入式裝置使用網路通訊時,經常不好分析資料,通常只能使用串列埠列印和依耐伺服器端使用抓包工具獲取網路資料,使開發工作有不同程度的受到阻礙,這裡簡單的介紹一下如何使用tcpdump工具在嵌入式裝置上抓包。 移植: 下載資源tcpdump,libpcap,可到官網上:http:/

tiny4412學習(四)之移植linux-裝置樹(1)裝置樹基礎知識及GPIO中斷

#include <linux/init.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/of.

QT5移植嵌入式觸控式螢幕,點選位置和顯示位置不對解決方法

本文適用於移植QT5後,觸控式螢幕和顯示位置不同的問題。首先,排除觸控式螢幕驅動和硬體問題,使用hexdump "觸控式螢幕裝置驅動節點名稱",檢視觸控式螢幕是否正常,如下圖如果排除了觸控式螢幕本身的問題,則是QT座標系的問題,這裡提醒如果是用電容屏的同學,最好不要用tsli

嵌入式裝置基於Linux實現雙屏顯示

By Toradex 秦海 1). 簡介 對於一些嵌入式領域應用如醫療,汽車等,多屏顯示應用是需要的,因此本文就基於NXP iMX6 嵌入式ARM平臺來實現雙屏顯示應用。 本文所採用的測試平臺為來自Toradex的ARM 計算機模組平臺Colibri iMX6DL搭配其

嵌入式裝置使用GDB及coredump檔案查詢崩潰問題

背景:1.執行目標為MIPS機器,FLASH及RAM資源都非常緊張,無法執行帶除錯資訊的程式2.程式有一定概率崩潰,從表現上難以分析目標:直接定位到崩潰目的碼說明:1、2在執行環境中操作,3、4在編譯環境中操作1.設定核心轉儲核心轉儲可以儲存程式崩潰時的記憶體狀態。是系統級別

[ZedBoard移植嵌入式Linux教程(8)]編譯Linux核心

在前面提到的地址下載linux核心原始碼並放到ubuntu中,我將linux-digilent-master壓縮檔案放到/home/dc/Desktop/xilinx/中。與編譯uboot過程一樣,linux核心也有預設配置digilent_zed_defconfig,在目錄

嵌入式裝置從linux機上拷檔案配nfs

ubunte配nfs伺服器1. sudo service nfs-kernel-server restart安裝2.sudo vi /etc/exports /home/tanyb/share/work/his/dirmount 192.168.30.0/255.255.25