突发奇想,想用封尘已久的6410+硬盘+sata转usb做一个网络移动硬盘,好处是看PP的时候不需要再从箱子里翻出一堆东西重新组装,看完之后再收起来。打开wifi瞬间享受流畅PP
一、编译
1、从http://download.csdn.net/detail/dragon101788/5217491下载或者去官网http://www.samba.org/samba/ftp/old-versions/上下载Samba
3.0.23.tar.gz
的软码包,解压;
2、环境
1)在环境变量中导入交叉编译环境
PATH=$PATH:/usr/local/arm/4.4.3/bin:$HOME/bin
2)运行configure:
[root@localhost source]# CC=arm-linux-gcc ./configure --host=i686 --target=arm-linux --disable-cups --disable-iprint
3)完了以后要修改一下include/config.h,加上
#define HAVE_IFACE_IFCONF 1
5.改lib/time.c,如下:
[root@localhost source]# vi lib/time.c +60
59 #else
60
61 gettimeofday(tval,NULL);
62 #endif
说明:注译掉第60行;第61行加上"gettimeofday(tval,NULL);"
5.make
[root@localhost source]#make clean
[root@localhost source]#make
二.使用
1.在ARM开发板上建以下目录:
/usr/local/samba/bin
/usr/local/samba/private
/usr/local/samba/lib
/usr/local/samba/var
因为在上面的configure中的路径我用的是默认的,在smb运行时要用到.并把/samba3.0.23/source/bin目录下的所有文件考到ARM开发板的/usr/local/samba/bin目录中.
2.在ARM开发板的/usr/local/samba/lib目录中建smb.conf配置文件,容如如下:
[global]
workgroup = ARMSMB
netbios name = ArmSMB
server string = Arm Linux Samba Server
security = share
[share] #显示的共享文件夹名
path = /home/share #要共享的文件夹路径
writeable = yes
browseable = yes
guest ok = yes
3.运行smb
#./smbd -D
#./nmbd -D
[root@FriendlyARM bin]# ps
308 root 2056 S ./smbd -D
309 root 2048 S ./smbd -D
如果ps看不到如上如容,说明smb没有运行,可以用smbd -i -d 8 启动smb,可以打印启动信息,其中-i 是交互模式,-d是打印调试级别。
4.在windows-->开始-->运行,中输入//192.168.2.230(这是开发板IP)不用密码就可看到ARM开发板smb共享了.
介绍
一些设备不能持续侦听是否有需要连接的服务器。有的设备基于安全考虑不希望“开放一个端口”(比如主动接受连接)。无论如何,大多数设备可以接受未经请求的信息,有时也叫做“通知”。比如一些手持设备可以接收SMS文本短信息。甚至有的设备可能还可以接受简单的数据信息。
DM服务器可以利用这种通知来引导DM客户端向DM服务器建立一个连接。这个连接可能是通过HTTP、WAP、SIP或其它传输协议传输。
通知信息需要包含发送通知的服务器的认证消息。接受这个通知后DM客户端会建立一个到DM服务器的连接。在这期间,DM客户端会确认DM服务器是否在授权的服务器里然后在请求连接。
服务器Alerted的会话管理通知信息给DM服务器请求DM客户端建立一个可管理的会话提供了可能。在这个通知信息里DM服务器可以告知DM客户端协议的版本以及会话服务在前台(用户界面)还是后台(对终端用户不可见)执行。它还可以告知用户会话的执行是由于服务器的决定还是用户自己决定。同时,服务器必须发送一个通知信息的摘要以避免拒绝服务(Dos)攻击。
图1 描述了服务器怎样提示管理会话的信息流
上面的信息流介绍是一个设备管理的会话。这意味着所有的信息共享一个相同的OMA DM Session ID。
DM通知的结构Package#0 是通知信息里面用的默认格式。
DM 通知信息被编码成简单的二进制格式。DM通知信息由固定大小的header,后面跟着可选的Type-Length—Value(TVL)格和摘要组成。可选信息的数量由header决定。
下面的图片描述了一般的Package#0的格式。
DM 通知信息的MIME版本是 application/vnd.syncml.dm.notification,它的Content-Type 编码是 0x58。他的Byte顺序是Big Endian(网络顺序)。
DM客户端必须支持DM1.2[DMNotil2]的通知格式并且符合通知这本说明书里的格式定义。
DM 通知信息头格式下面是dm通知信息的可选项的规格定义
Option 编号(二进制) 名字 格式 大小/bytes DM客户端支持 DM服务器支持 发生 0001 Server-ID String 1-256 Mandatory Mandatory One 0010 Targeted-MO Unit 1-2 Optional Mandatory ZeroOrMore 0011 Requested-MO Unit 1-2 Mandatory Mandatory ZeroOrMore 0100 Preferred-Bearer Uint 1 Mandatory Mandatory ZeroOrMore 0101 Connect-Reason String 1-4095 Optional Optional ZeroOrOne 0110 Vendor-Info String 1-4095 Optional Optional ZeroOrOne DM通知信息的可选格式
可选项必须按照Option Number里的顺序出现(见下一节)。见下图的Option Number,每一个可选项都有一个Length字段用来指定可选项的值的长度,按bytes计。可选项的值直接跟length字段。
Option Number
字段在header后面指定一个可选的序列数。它的值指定为4 bits。
Option Lenght字段指定一个可选值的长度。比如,如果可选长度的值是3,那么可选值的大小是3 bytes。它的值指定为12 bits。
Option Value可选值的格式依赖于各自的值。在这个文档里的可选项定义也使用下面的可选值的格式。
-
Uint:一个使Option length 的athe位代表网络字节顺序的非负整数。可选值的范围由2的Option Length bit 的次幂值计算决定。例如Option Length是2的话,Option Value 的十进制范围是 0-65535。
-
String:一个从[RFC5198]来的Net-Unicode即UTF-8[RFC3629]编码的Unicode字符串。注意ASCII字符串(没有用到任何特殊的控制字符)一直是有效的UTF-8 Net-Unicode 字符串。
-
Opaque:一个不透明的字节序列。这个类型在当其他类型如Uint或String需要的时候使用。怎样处理这个类型取决于可选项使用的类型。
下面是dm通知信息的可选项的规格定义
Option 编号(二进制) 名字 格式 大小/bytes DM客户端支持 DM服务器支持 发生 0001 Server-ID String 1-256 Mandatory Mandatory One 0010 Targeted-MO Unit 1-2 Optional Mandatory ZeroOrMore 0011 Requested-MO Unit 1-2 Mandatory Mandatory ZeroOrMore 0100 Preferred-Bearer Uint 1 Mandatory Mandatory ZeroOrMore 0101 Connect-Reason String 1-4095 Optional Optional ZeroOrOne 0110 Vendor-Info String 1-4095 Optional Optional ZeroOrOne 信息头字段描述 版本信息(VER)
VER字段指定DM服务器发送的DM通知信息的版本。它的值在通知信息里用4bits描述。为了启用这一规格必须把这个字段设置为0x01.其他的版本是为将来的版本预留的。
注意这个不是DM协议的版本,这是DM通知的版本。
Options Count(OPC)OPC字段制订了header后面可选项的数量。它的值在通知信息里面用3 bits来表示。
引发管理的行为(I)I 字段指定DM服务器怎样创建管理动作,既可以是用户请求,也可以是DM服务器已经控制了管理行为。这个值指定1bit。
引发管理行为的值必须是下面这两个。
值(binary) 语义 描述 0 终端用户引发 终端用户产生设备管理会话启动。 1 服务器引发 服务器产生设备管理会话启动。 用户交互模式(UIM)UIM字段指定DM服务器的建议,是否....未完
将一个Bitmap 的内容存到file中
//create a file to write bitmap data File f = File(context.getCacheDir(), filename); f.createNewFile(); //Convert bitmap to byte array Bitmap bitmap = your bitmap; ByteArrayOutputStream bos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.PNG, 0 /*ignored for PNG*/, bos); byte[] bitmapdata = bos.toByteArray(); //write the bytes in file FileOutputStream fos = new FileOutputStream(f); fos.write(bitmapdata);思路:将Bitmap的内容,输入到输出流中,然后从输出流中把数据输出到文件中