samba移植到android流程

2021-07-23 22:39:35 字數 4620 閱讀 5868

參考這一篇文章

然後結合自己實際操作過程中遇到的一些問題總結出來這個流程

所以把自己記得的流程記錄下來,結合網上一些文章總結,並將自己實際遇到的問題貼出來;

廢話少說

下面是具體流程:

我用的samba包是samba-3.5.9,交叉編譯工具包是arm-linux-gcc-4.4.3.tar.gz

首先解壓samba-3.5.9.tar.gz,進入到

samba-3.5.9

目錄下的source3目錄下

:~/programfiles$ cd samba-3.5.9/source3/

:~/programfiles/samba-3.5.9/source3$ 

source3/lib/system.c作修改4個函式

lib/system.c

中的4個函式

struct passwd *sys_getpwnam(const char *name)

struct passwd *sys_getpwuid(uid_t uid)

struct group *sys_getgrnam(const char *name)

struct group *sys_getgrgid(gid_t gid)

為了避免出錯,建議先備份system.檔案,或者像我這樣把原始四個函式注釋掉,然後新增修改後的函式,如下:

/*struct passwd *sys_getpwnam(const char *name)

struct passwd *sys_getpwuid(uid_t uid)

struct group *sys_getgrnam(const char *name)

struct group *sys_getgrgid(gid_t gid)

*/static struct passwd rootpw = ;

struct passwd *sys_getpwnam(const char *name)

struct passwd *sys_getpwuid(uid_t uid)

static char *rootmem = ;

static struct group rootgr = ;

struct group *sys_getgrnam(const char *name)

struct group *sys_getgrgid(gid_t gid)

然後在source3目錄下編寫交叉編譯的配置指令碼insatll:

#!/bin/bash

cross_compile=/home/sunfch/programfiles/opt/friendlyarm/toolschain/4.4.3/bin/arm-none-linux-gnueabi-                                    //這個根據你自己解壓後交叉編譯工具的目錄,及選擇arm-none-linux-gnueabi-gcc   編譯,

runtime_dir=/data/data/samba

./configure \

cc="$cross_compile"gcc \

ar="$cross_compile"ar \

ld="$cross_compile"ld \

ranlib="$cross_compile"ranlib \

--host=i686 \

--target=arm-linux \

--disable-cups \

--disable-iprint \

--prefix=$runtime_dir \

--exec-prefix=$runtime_dir \

--with-logfilebase=$runtime_dir/var/log \

--with-swatdir=$runtime_dir/usr/local/swat \

--with-rootsbindir=$runtime_dir/sbin \

--with-lockdir=$runtime_dir/var/lock \

--with-piddir=$runtime_dir/var/lock \

--with-privatedir=$runtime_dir/etc/samba \

--with-configdir=$runtime_dir/etc/samba \

--cache-file=armsel-linux.cache \

--with-static-modules=vfs_fake_perms \

如果出現如下錯誤:

3.1 error: cannot run test program while cross compiling錯誤

checking that the c compiler understands negative enum values... configure: error: in `/root/samba-3.3.3/source':

configure: error: cannot run test program while cross compiling

解決:echo samba_cv_cc_negative_enum_values=yes>armsel-linux.cache

再一下執行指令碼

然後在source3目錄下執行:

make ldflags="-all-static -static"

上面這外是為把smbd, nmbd等編譯為靜態的。(不然在android上執行會出現 no such file or directory問題)

我在執行這一步遇到了以下錯誤:

error:file not recognized;file format not recognized

或者configure:error: require function not found

錯誤糾結了很長時間,最後才發現交叉編譯gcc版本問題,make distclean清除,將交叉編譯工具改為我上面說的工具,應該就沒問題了:

隨便在某個目錄下(能快速找到就行)建乙個smb.conf配置檔案,比如我直接在source3下

vim smb.conf

[global]

inte***ces = 192.168.0.103/24

workgroup = workgroup

server string = samba on android

netbios name = android

remote announce = 255.255.255.255

encrypt passwords = yes

security = user

#security = share

restrict anonymous = 1

load printers = no

printcap name = /dev/null

disable spoolss = yes

deadtime = 5

delete readonly = yes

nt acl support = no

inherit permissions = yes

socket options = so_sndbuf=16384 so_rcvbuf=16384

[test]

#vfs objects = fake_perms

comment = android /mnt/sdcard

#path = /mnt/sdcard

path = /data/data/samba/var/tmp

#path = /etc

force user = root

read only = no

writable = yes

#guest ok = no

browseable = yes

然後建立adb shell 進入到手機adb下

cd /data/data/

mkdir samba

cd samba

mkdir bin etc lib var

cd etc

mkdir samba

cd ../var

mkdir lock tmp log

資料夾建立完成後exit退出adb,然後在 source3目錄下

adb push smb.conf /data/data/samba/etc/samba    //將smb.conf匯入手機/data/data/samba/etc/samba中

進入到bin目錄下:

adb push smbd /data/data/samba/bin

adb push smbpasswd /data/data/samba/bin

在adb下用

export tmpdir=/data/data/samba/var/tmp/              //設定tmpdir環境變數

bin/smbd -d 啟動samba服務,

bin/smbpasswd -a root 新增root使用者

你在tmp目錄下建立乙個目錄share,

然後在adb下用netcfg命令檢視手機ip 位址;

這時候你就可以通過windows下,用win+r鍵調出執行框

輸入\\192.168.0.103

就可輸入root和密碼,登入成功就可一看到share目錄

gloox移植到android平台

最近需要在android平台是使用gloox,官方gloox沒有沒有對應的android.mk檔案,那當然也可以用android ndk來編譯,但是我覺得用ndk編譯有點麻煩,就寫乙個android.mk來使用mm編譯。首先,進入src目錄,configure該專案 configure host a...

c 程式移植到android

在android 4.4之後新增了新的保護機制,可執行檔案必須是採用pie編譯的。如果是使用ndk進行編譯的 需要使用到android.mk指令碼 則在指令碼中新增 local cflags pie fpie local ldflags pie fpie 如果是手動採用交叉編譯鏈進行編譯的,則在編譯...

Linux程式移植到Android上

序言 由於本人還是比較偏重於先說明原理在說明實際操作步驟,要知其然更要知其所以然,如下圖所示 一般情況下,有兩種方法。1.乙個就是將程式靜態編譯,將程式中所有需要的庫全部編譯進可執行檔案中。這樣程式在android中執行就不需要鏈結任何動態庫了。但是帶來乙個非常大的弊端就是這個程式會非常大,資源利用...