samba移植到Android手机上(三星GS2)

这里我选用的版本是3.6.10,交叉编译比较容易,后面有说明,先说说编译完后调试需要注意的几个问题!

问题1:SamInfo3_for_guest: Unable to locate guest account [nobody]!

我估计是没有nobody这个用户导致的,于是在passwd文件中加入了nobody这个用户后果然好了。(注意:这里的/etc/passwd文件在android下本来是没有的,是我手动加的,里面的记录也是我手工加的,至于怎么加,需要重新mount system分区为rw才能完成,如我是执行:mount -o remount,rw /dev/block/mmcblk0p9 system命令。当然也可以在Adb下直接执行adb remount)

vi /etc/passwd加入如下两条记录(红色):

root@android:/data/data/test/etc # cat /etc/passwdroot::0:0:root:/data/data/test:/system/bin/shnobody::65534:65534:nobody:/nonexistent:/system/bin/shroot@android:/data/data/test/etc #

问题2:能看到共享目录,但一进入就卡死,查看smbd日志有如下错误打印:

[2013/01/10 08:49:16.335483, 0] smbd/vfs.c:173(vfs_init_custom) error probing vfs module ‘fake_perms’: NT_STATUS_UNSUCCESSFUL[2013/01/10 08:49:16.336495, 0] smbd/vfs.c:315(smbd_vfs_init) smbd_vfs_init: vfs_init_custom failed for fake_perms[2013/01/10 08:49:16.337105, 0] smbd/service.c:902(make_connection_snum) vfs_init failed for service test我看见日志中有“fake_perms”的打印,想到自己从网上拷贝的smb.conf文件中也有这么一项估计是这个导致的,于是注释掉,OK。

[test]#vfs objects = fake_permscomment = Android /mnt/sdcard#path = /mnt/sdcardpath = /data/data/test#path = /etcforce user = rootread only = nowritable = yes

samba-3.6.10交叉编译的配置文件及调试方法:

echo samba_cv_CC_NEGATIVE_ENUM_VALUES=yes > my.cacheecho "samba_cv_HAVE_Werror=yes" >> my.cacheecho "samba_cv_HAVE_Werror_implicit_function_declaration" >> my.cacheecho "samba_cv_CC_NEGATIVE_ENUM_VALUES=yes" >> my.cache

./configure –prefix=/home/rebi/cross_tools/samba-3.6.10/source3/_install –host=arm-unknown-linux-gnueabi -cache-file=my.cache –with-quotas=no –with-sys-quotas=no –enable-swat=no –enable-smbtorture4=no –enable-cups=no –enable-pie=no –enable-relro=no –enable-fam=no –enable-avahi=no –with-rootsbindir=/data/data/test –with-statedir=/data/data/test/etc –with-cachedir=/data/data/test/etc –with-ncalrpcdir=/data/data/test/etc –with-nmbdsocketdir=/data/data/test/etc –with-logfilebase=/data/data/test/etc –with-privatedir=/data/data/test/etc –with-privatedir=/data/data/test/etc –with-swatdir=/data/data/test/etc –with-lockdir=/data/data/test/etc –with-piddir=/data/data/test/etc –with-configdir=/data/data/test/etc LDFLAGS="-Wl,-dynamic-linker=/data/app/ld-linux.so.3"

注意,我把privatedir、piddir等全部都指定到/data/data/test/etc目录下去了,所以需要在手机上建立这个目录。

编成功后无需make install,直接去source3下的bin目录下将smbd,nmbd, smbpasswd, testparm拷贝出来就行了。

传到手机上后,先执行./smbpasswd -a root,增加一个root用户并给它设置上密码。

考虑到调试需要反复启动杀死smbd及nmbd我先了一个脚本文件调试samba.sh:

#!/bin/shcase "$1" inrestart)killall -9 smbd nmbd 2>/dev/null./smbd./nmbd;;stop)killall -9 smbd nmbd;;start)./smbd./nmbd;;*)echo "invalid param: $1";;esac

脚本在使用时带参数:如sh samba.sh restart就是重启samba服务。

我使用的完整的smb.conf如下(由于我修改了代码中的路径,所以这个文件需要放在/data/data/test/etc目录下),对这个文件修改后如果不确定,可以执行./testparm来检测一下,,这也是为什么要把它拷过来的原因。

root@android:/data/data/test/etc # cat smb.conf[global]interfaces = 192.168.1.11/24workgroup = WORKGROUPserver string = Samba on Androidnetbios name = ANDROIDremote announce = 255.255.255.255encrypt passwords = yessecurity = user#security = sharerestrict anonymous = 1load printers = noprintcap name = /dev/nulldisable spoolss = yesdeadtime = 5delete readonly = yesnt acl support = noinherit permissions = yessocket options = SO_SNDBUF=16384 SO_RCVBUF=16384[test]#vfs objects = fake_permscomment = Android /mnt/sdcard#path = /mnt/sdcardpath = /data/data/test#path = /etcforce user = rootread only = nowritable = yes#guest ok = nobrowseable = yes

像一颗深绿色的宝石镶嵌在云南大地上,

samba移植到Android手机上(三星GS2)

相关文章:

你感兴趣的文章:

标签云: