如果Puppy 4.1的pup_xxx.sfs是安装在NTFS分区上,那么当启动完成以后,这个分区显示已被挂载,而却不支持中文文件名,原有的中文文件名文件都不显示,而新建中文文件名文件则提示wide-character错误。用这个打过补丁的initrd.gz覆盖原来Puppy自带的initrd.gz文件即可解决这个此问题。
问题出在initrd阶段Puppy不支持glibc的locale,而ntfs-3g依赖于此来支持中文文件名。fat分区不受这个问题的影响,因为fat分区挂载是通过内核态的模块完成,其utf-8支持由内核中的相关库完成的,这与用户态ntfs-3g的原理有很大不同。
解决这个问题的方法是让Puppy在initrd阶段支持locale。主要分三个步骤:
问题出在initrd阶段Puppy不支持glibc的locale,而ntfs-3g依赖于此来支持中文文件名。fat分区不受这个问题的影响,因为fat分区挂载是通过内核态的模块完成,其utf-8支持由内核中的相关库完成的,这与用户态ntfs-3g的原理有很大不同。
解决这个问题的方法是让Puppy在initrd阶段支持locale。主要分三个步骤:
将新的ntfs-3g(2009.1.1)已经不需要指定额外的UTF-8。/usr/lib/locale/zh_CN.UTF-8
目录放入initrd.gz中,这个目录可以在中文支持包中找到。- 修改initrd中的init文件,
在ntfs-3g中加入参数。以下是init的补丁,注意其中有关ntfs-3g命令的修改:locale=zh_CN.UTF-8
--- ../oldsrc/init 2008-12-09 13:32:56.000000000 -0500 +++ init 2008-12-09 15:53:11.000000000 -0500 @@ -85,14 +85,12 @@ } mntfunc() { - if [ "`echo "$*" | grep 'ntfs'`" = "" ];then - mount $@ - else + if [ "`echo "$*" | grep 'ntfs'`" != "" ];then #screen out -o and -t options... MNTPRMS="`echo -n "$*" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/' | tr '\n' ' '`" #v4.00 new ntfs-3g version... #ntfs-3g $MNTPRMS -o force,silent,umask=0,no_def_opts,allow_other 2>/dev/null #default is rw,noatime - ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw 2>/dev/null #default is rw + ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw 2>/dev/null #default is rw ntfsRETVAL=$? [ $ntfsRETVAL -eq 0 ] && return 0 if [ $ntfsRETVAL -eq 14 ];then @@ -102,8 +100,16 @@ echo -e "\\033[0;39m" >/dev/console return 14 else - ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,force 2>/dev/null + ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,force 2>/dev/null fi + elif [ "`echo "$*" | grep 'vfat'`" != "" ];then + MNTPRMS="`echo -n "$*" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/' | tr '\n' ' '`" + #echo "*=$*" >/dev/console + #echo "MNTPRMS=$MNTPRMS" >/dev/console + #sleep 10 + mount $MNTPRMS -o noatime,utf8,quiet + else + mount $@ fi return $? } @@ -1084,7 +1090,7 @@ #find all the extra sfs files... touch /tmp/LOGONEBASES NPATTERN="_${PUPPYVERSION}\\.sfs" - ls -1 $SFSSDIR/*.sfs | + ls -1 $SFSSDIR/*.sfs ${PUPSFSDEVMNTPT}$(dirname $PUPSFSFILE)/*.sfs | while read ONEEXTRA do ONEBASE="`basename $ONEEXTRA`"
- 下载ntfs-3g源码,并重新编译并覆盖原来initrd.gz中的
/bin/ntfs-3g
,因为原来的initrd.gz中的ntfs-3g不支持locale。方法如下:./configure --enable-really-static make make install
- 21050 次点击
发表新评论