前言:
因为某些大家都知道的原因,TW或大陆厂家搞Linux都不遵守GPL不开放源码,这里就不深入讨论了哈,RK一直这么干,这方面象三星,NviDIA等国际厂家做的比较好,所以才能有CM的自定义Andorid固件系列,才有了那么多自己编译的驱动支持很多硬件;
偶不是搞Andorid也不是搞Linux内核的,所以可能某些理论或原则性上的理解是错误的,欢迎讨论指正:)

更新:
解决nls中文问题,完美了,以后可以直接在所有文件浏览器里直接打开pdf文档,音乐,视频,照片文件不会再弹出下载提示啦(简单试了下,pdf、音频、照片无压力,视频支持到一般的DVD rip~720p还是有点卡——可能电脑换成有线连接会好点?有成功使用的反馈下吧,同样WIFI连接的电脑上监测上传速度是800KB左右,即,一般1M左右码率的视频还是可以流畅播放的),oyeah~~
有空做一个自动化的安装镜象,晚点放模块,再测测会不会导致死机:)

操作手册:
T760 cifs模块 来自 meineson | mbstudio.cn,转载请保留本信息。
下载链接: http://mbmail-m8lite.googlecode.com/files/T760_cifs_byMeineson.rar
注意:
本模块是基于nook color的2.6.32内核,在没有rk2918 kernel源码基础上,完全自行试验调试编译出来的,经简单试验可以正常通过cifs manager或手工mount -t cifs等软件或操作方式挂载windows共享目录,但不保证使用时的稳定性,包含且不仅限于————死机、文件丢失、情绪失控、变好人等……

使用条件:
已root的T760一台(其它RK2918的机器不保证),可以刷其它网友提供的已root的固件,或等待作者心情好时,制作不覆盖现有数据的升级固件:)

简要使用说明:
将slow-work.ko,cifs.ko,nls_utf8.ko上传至任意sd卡或内置存储目录,例如/sdcard/***.ko;
adb shell或T760本机命令行下,su获取root权限后,手工依次执行如下命令(或使用附件MOUNT MANAGER设置开机自动加载模块,同样,需注意加载顺序):
insmod slow-work.ko
insmod cifs.ko
insmod nls_utf8.ko
没有错误信息输出时,输入lsmod查看有如下内容时,表示模块加载成功:
lsmod
cifs 217010 4 [permanent], Live 0xbf015000
slow_work 9215 1 cifs,[permanent], Live 0xbf00c000 (P)
nls_utf8 1022 4 [permanent], Live 0xbf006000
wlan 860 0 - Live 0xbf000000

则之后可以通过手工或cifs manager软件(电子市场有下载,国内的几个市场貌似没有)操作,手工挂载目录命令为:
mount -t cifs -o iocharset=utf8 -o username=aaa,password=bbb //172.21.100.75/mtv /sdcard/ccc
其中aaa表示windows共享目录登录名,bbb为密码,ccc为本地sdcard下新建的一个用来挂载的目录,ip地址和共享目录名请自行相应更改;

操作成功后,输入df命令,则可查看已挂载的目录信息,例如:
C:\Users\meineson>adb shell

df

Filesystem Size Used Free Blksize
/dev 148M 32K 148M 4096
/mnt/asec 148M 0K 148M 4096
/mnt/obb 148M 0K 148M 4096
/system 196M 196M 4K 4096
/data 503M 337M 166M 1024
/cache 112M 5M 106M 1024
/mnt/sdcard 6G 5G 419M 8192
/mnt/sdcard/cifs/f$ 68G 62G 5G 4096
/mnt/sdcard/cifs/e 99G 93G 6G 4096
/mnt/udisk 99G 93G 6G 4096
/mnt/sdcard/cifs/d$ 99G 95G 4G 4096

表示成功挂载了电脑的d,e,f盘到本地/mnt/sdcard/cifs/目录下的d,e$,f$目录下,可以将它们象本地SD卡上的文件一样自由操作了:)

5/27更新:
成功编译cifs.ko并正常挂载windows共享目录!!!
http://attachment.imp3.net/forum/201105/27/024201f7ytd9ddctn7he5z.png
采用了最原始最没办法的办法,计算数据结构偏移量对比struct inode一个字节一个字节的对比,累呀~~~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<7>[  959.083368]  fs/cifs/inode.c: looking for uniqueid=18509
<4>[ 959.083420] cifs allow inode:0xD32BAE98
<4>[ 959.084405] init inode at:0xD32BAE98, id:0xD32BAE90, cfid:0xD32BAE90
<4>[ 959.090735]
<4>[ 959.090740] inode debug--isize:336 size:288--off:sb:140,st:268---sb:0xD13A9A00------
<4>[ 959.090753] offset sem:120, mutex:108
<4>[ 959.103606] i_ino offset:32
<4>[ 959.106324] i_count offset:36
<4>[ 959.109270] i_nlink offset:40
<4>[ 959.112245] i_uid offset:44
<4>[ 959.114990] i_gid offset:48
<4>[ 959.117763] i_rdev offset:52
<4>[ 959.120624] i_version offset:56
<4>[ 959.123796] i_size offset:64
<4>[ 959.126604] i_atime offset:72
<4>[ 959.129550] i_mtime offset:80
<4>[ 959.132523] i_ctime offset:88
<4>[ 959.135444] i_blocks offset:96
<4>[ 959.138477] i_blkbits offset:100
<4>[ 959.141683] i_bytes offset:104
<4>[ 959.144738] i_mode offset:106
<4>[ 959.147664] i_lock offset:108
<4>[ 959.150627] i_mutex offset:108
<4>[ 959.153666] i_alloc_sem offset:120
<4>[ 959.157023] 00 00 00 00 38 B5 2D C0 B8 69 54 D2 98 F5 A2 C0
<4>[ 959.162656] 68 9A 3A D1 68 9A 3A D1 B0 AE 2B D3 B0 AE 2B D3
<4>[ 959.168289] 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00
<4>[ 959.173923] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[ 959.179556] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[ 959.185190] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[ 959.190823] 00 00 00 00 0E 00 00 00 00 00 00 00 01 00 00 00
<4>[ 959.196456] 08 AF 2B D3 08 AF 2B D3 00 00 00 00 14 AF 2B D3
<4>[ 959.202117] 14 AF 2B D3 F4 B4 A8 C0 54 B5 A8 C0 00 9A 3A D1
<4>[ 959.207723] 00 00 00 00 30 AF 2B D3 98 AE 2B D3 00 00 00 00
<4>[ 959.213356] 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[ 959.218989] 01 00 01 00 4C AF 2B D3 4C AF 2B D3 00 00 00 00
<4>[ 959.224623] 00 00 00 00 00 00 00 00 BC B5 A8 C0 DA 00 02 00
<4>[ 959.230256] 00 EF A2 C0 6C AF 2B D3 6C AF 2B D3 00 00 00 00
<4>[ 959.235889] 78 AF 2B D3 78 AF 2B D3 00 00 00 00 00 00 00 00
<4>[ 959.241522] 00 00 00 00 00 00 00 00 90 AF 2B D3 90 AF 2B D3
<4>[ 959.247156] 01 00 00 00 9C AF 2B D3 9C AF 2B D3 88 00 00 00
<4>[ 959.252789] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
<4>[ 959.258423]
<4>[ 959.258428] inode debug end-------------------
<4>[ 959.264338] debug @ cifs_iget inode->i_sb: 0xD13A9A00
<4>[ 959.269347] debug @ cifs_fattr_to_inode: 0xD32BAE98,0xC2325E48
<4>[ 959.275170] debug 87
<4>[ 959.277321] inode->i_sb:0xD13A9A00, i_stat:0x88, fattr mode:16877
<4>[ 959.283403] debug 89
<4>[ 959.285555] debug 112 i_mode is dir:0x41ed,dir:0x4000, fattr->cf_flags:0x0
<4>[ 959.292416] debug 115
<4>[ 959.294649] debug 117
<7>[ 959.296909] fs/cifs/inode.c: inode 0xd32bae98 old_time=0 new_time=65930
<4>[ 959.296926] debug @ cifs_fattr_to_inode 122
<4>[ 959.301065] debug @ cifs_fattr_to_inode 124
<4>[ 959.305248] debug @ cifs_fattr_to_inode end, cf_flags:0x0, CIFS_FATTR_DFS_REFERRAL:0x1
<4>[ 959.313130] debug @ cifs_set_ops S_IFREG
<4>[ 959.316836] debug @ not is_dfs_referral
<4>[ 959.320830] cifs read super:0xD32BAE98
<4>[ 959.324589] sb->s_root:0xCB155798

nls模块还有些问题,中文显示是乱码,休息,休息一下,周末整理,有空的话放出一个打包好的刷机文件:)

更新:
阶段现状:可以正常加载各个模块,mount指令能进展到完成mount,但随后的操作返回了not a directory错误,并自动调用了.super进而unmount了,修改了两处导致kernel panic的,一处是对utsname()->nodename执行strnlen,在t760上由于utsname返回了空值,导致strnlen错误,另一处是cifs_fattr_to_inode时,由于inode->i_sb为空,执行CIFS_SB(inode->i_sb)即CIFS_SB(struct super_block *sb)
{
return sb->s_fs_info;
}时,对空指针操作导致崩溃~~

编译阶段,主要是修改vermagic.h,去除utsrelease.h包含,修改magic串与设备内核一致即”2.6.32.27 preemp mod_unload ARMv7”,可能还要修改一些linux头文件去掉一些tracepoint_xxx的unknown symbol的错误;
执行
export ARCH=arm
export CROSS_COMPILE=/opt/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

修改.config(这是nookcolor的config文件,借用下),修改去掉CONFIG_PREEMPT和CONFIG_HIGHMEM去掉;
make menuconfig (在菜单里找fs/cifs,打开cifs编译)
make modules_prepare
make M=fs/cifs
即可得到fs/cifs/cifs.ko以及我补丁包里加的slow-work.ko及nls_utf8.ko;

上传模块到T760,adb push cifs.ko /sdcard/cifs.ko
在T760(已root)上执行:
cd /sdcard;
insmod slow-work.ko;
insmod cifs.ko;
echo 7 > /proc/fs/cifs/cifsFYI;
(打开调试,可以在dmesg里看调试信息,如果死机了,可以重启后看/data/dontpanic/apanic_console的内容,是死机时的dmesg内容)
cat /proc/fs/cifs/cifsFYI
mount -t cifs -o username=meineson,password=xxx //172.21.100.75/mtv /mnt/udisk
能看到not a directory的提示,抓包看,T760能正常连接并检索windows的目录,但T760本机在进行inode操作时,还是出错不能正常挂载,而是mount后立即又unmount;

偶已经捅T760的PP不下50次了,暂时没精力继续搞了,希望有兴趣的同学可以继续工作哈(个人乐观猜测,还是由于某些编译宏,导致我们根据现有源码的include/linux/fs.h编译出的ko中用的struct inode及struct super_block数据结构与真实内核的数据结构不一致,数据错位导致某些字段不合法才导致的mount不成功),附上已经编译好的cifs相关ko文件,以及打好补丁的nook color的kernel及.confg文件:)
ko文件:http://mbmail-m8lite.googlecode.com/files/T760 cifs.ko.rar
源码:http://mbmail-m8lite.googlecode.com/files/cifs_760_pathced.rar

————————————————————————————————————————————————————
之前发过一个贴子,也跟台电的板哥讨论过,cifs.ko(CIFS的用处可自选搜索^_^)能否内置在固件里,之前认为可能这项工作需要rockchip来做,但查阅了一些资料并且实际试验后,已经能成功利用nookbook的2.6.32的内核把cifs.ko编译出来了,也在t760上insmod了,但一执行mout命令机子就死机了,所以,没有RK2918的内核和deconfig配置,可能我们还是无法搞出能在T760上正常加载众多3G上网卡,有线网卡等驱动及turn、cifs等功能ko模块的;

实际工作核心工作其实也就两步(参考了nookcolor及dell streak的cifs模块的编译文章,工作环境ubuntu 10.04):
下载arm交叉编译工具(或者直接用andorid的ndk,其中有自带),下载与主机适配的kernel源码;
配置编译环境:
export ARCH=arm
export CROSS_COMPILE=/opt/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-

进到内核源码目录下:
make menuconfig
将Fs目录下networkXX目录下的cifs模块打开保存;
make prepare
make modules_prepare
make M=fs/cifs
即可下载fs/cifs/目录下的cifs.ko(如果内核启用了slow-work,还会生成slow-work.ko,使用时先insmod slow-work.ko)
如果模块正常加载并适配内核,可以使用命令:
mount -t cifs -o username=xxx,password=xxx //172.21.100.75/temp /mnt/cifs
挂载目录到android,则局域网共享文件可以象本地文件一样使用了,则许多以前不能做的事,例如播放局域网视频(虽然也可以通过安装流媒体服务器,HTTP服务器部分实现,但实际使用会有许多限制不好用),甚至直接让Android下载保存到局域网电脑上而不是本地容量太小的sdcard等功能,都可以实现了:)
同理,也可以在该环境下编译各种硬件驱动,许多驱动都有android下移植好的源码可供研究~~

后记:
本来,我以为cifs.ko就象交叉编译环境下的软件编译一样,只要指令集一致(都是armV7)的话,就应该可以跨机型执行,但实际试下来,cifs是直接集成在kernel源码中,与内核不知道哪里还有一些关联,虽然nookcolor也是A8也是armV7,但编译出来的cifs.ko虽然也能正常被RK2918挂载,但一启用时,似乎某些系统调用还是导致了kernel挂掉了,没有串口调试,也无法看到错误信息,不知道内核哪里出问题了,工作暂时遇到瓶颈,无法继续了:)

希望有内行的给点意见哈,另一方面,也期待Archos 7c早日开放kernel源码(毕竟archos是国外企业,它的几乎所有mid都开放了源码的,所以也有老外编译出rk2808上的cifs.ko运行在某个早期的机器上的),当然,最好是台电能编译好偶们所有需要的turn.ko,cifs.ko,一堆硬件外设的驱动¥#……&%&%&%&,那样偶们也就不用倒腾了,oyeah~~~~