当前位置:Linux教程 - Linux - 请大家注意:2.4.x内核vfat中文文件名的支持有问题,内详。

请大家注意:2.4.x内核vfat中文文件名的支持有问题,内详。



         2.4.x内核vfat中文文件名补丁安装说明
    kde2000<[email protected]>

    消息来自:
    http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=chinese&Number=192350&page=0&view=expanded&sb=5&o=31&part=

    感谢中国Linux论坛的成员不点(http://tinybit.top263.net/)为大家编写的程序!

    一、问题描述

    内核版本为2.4.x的Linux系统下,在vfat分区上建立或复制中文文件名的文件后,回到window$会有一
    部分文件无法打开和删除,试图删除这种文件时出现1026文件系统错误而无法删除。但在内核版本为2.2.x且
    支持nls_cp936的Linux系统下可以看到出错文件的文件名中带若干个??号,可以打开或删除;在window$2000
    下看到的是口字形符号,需要将其改名才能正常使用。如果先在内核版本为2.4.x的Linux系统下建立有错误的
    文件,将这些文件压缩成tgz格式后回到window$98/2000或内核版本为2.2.x且支持nls_cp936的Linux系统将
    该tgz文件解压缩到有错误文件相同的目录下,在window$上就会看到一对对文件明相同的文件。具体症状请
    看补丁http://china-greencity.51cgi.com/nls-fix.tgz了的图片。


    二、问题原因

    引自不点版主主页http://tinybit.top263.net/上《2_4_x 内核 vfat 中文文件名的 BUG 及修补》。

    内核中的 /usr/src/linux/fs/nls/nls_cp936.c 文件中的字符集转换表存在问题,这个转换表把两个
    不同的unicode 代码点转换成同一个 GB 码字符,也就是说,同一个汉字内码,对应着两个 unicode 码值。
    就上述几个例子文件来说,出问题的汉字有“不”“流”“茶”三个字。一个字有多个 unicode 码值,即使
    不算错误,也离错误不远。内核中的这个转换表原本是从微软网站下载的,又经过了修改。究竟是谁的错,
    不必追究。

    三、补丁安装方法

    该补丁由不点版主制作的程序(http://tinybit.top263.net/s4/dbcs_uni.tar.gz)生成两个文件,
    nls_cp936.c和nls_cp950.c,新的文件可以应用直至最新的2.4.17内核,更新的版本还不可知晓。

    下载补丁:http://china-greencity.51cgi.com/nls-fix.tgz

    为了免去一些麻烦,您只需按以下步骤就可以不编译内核就可以安装新的nls模块:

    (1)确保您的Linux系统上已经安装了内核源代码。
    #cd /usr/src/linux
    #make menuconfig
    直接保存退出。
    #make dep

    (2)将补丁压缩文件解压到任何目录下
    #bunzip2 -dc nls-fix.tar.bz2|tar xvf -
    #cd nls-fix
    #make cp936 /*也可以直接输入make生成nls_cp936.o*/
    #make cp950 /*不知道原来的内核中的nls_cp950.c是否也有错误*/
    #make clean /*删除生成的.o文件*/

    (3)将生成的.o文件复制到/lib/modules/[version]/kernel/fs/nls/目录下。

    其中version是与内核源代码版本一致的目录,如果您需要不重起就能修正错误,请务必保证

    内核源代码的版本与当前的内核版本一致。

    (4)umount所有vfat分区,用rmmod gb2312和rmmod nls_cp936卸载原来的模块,运行mount -a,

    再回到中文环境下看看,你在Linux下保存到vfat分区的中文文件的文件名是否有??符号?
    发布人:kde2000 来自:中国Linux论坛