Skip to Content

用于显示中文文件名的initrd补丁细节

labrador 的头像
存放pup_xxx.sfs、pup_save.2fs等文件的分区是在启动阶段被挂载的(可以在/mnt/home中看到)。默认情况下,如果该分区是FAT格式,那么这个分区上的中文文件名将均显示为?????,chinese_pack中的pmount补丁对此也无能为力。如果遇到了这样的情况,可以试试这个补丁。

需要先解开原来的initrd.gz,方法如下
$ mkdir initrd
$ cd initrd
$ zcat ../initrd.gz | sudo cpio -id
补丁为
--- ../old_initrd/init	2008-05-18 23:01:02.000000000 -0400
+++ init	2008-05-18 17:46:34.000000000 -0400
@@ -62,9 +62,7 @@
 }
 
 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...
@@ -81,6 +79,14 @@
   else
    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
+ else
+  mount $@
  fi
  return $?
 }
打完补丁以后重新制作initrd.gz包
$ find ./ | cpio -H newc -o | gzip -9 >../initrd.gz
#196
能详细的说一下技术细节吗(为什么这样改)?我想借此了解更多.大虾请不吝赐教!newbieabc@gmail.com
#197
labrador 的头像
就是在initrd阶段用mount命令挂载fat分区的时候加一个utf8参数,这样就能正确显示中文了。
#227
我是这样改的:
--- init	2008-08-25 23:59:23.000000000 +0800
+++ oldinit	2008-08-26 00:06:43.000000000 +0800
@@ -77,12 +77,7 @@
 
 mntfunc() {
  if [ "`echo "$*" | grep 'ntfs'`" = "" ];then
- 	if ["`echo "$*" | grep 'vfat'`" != "" ];then
- 		MNTPRMS="`echo -n "$*" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/' | tr '\n' ' '`"
- 		mount $MNTPRMS -o noatime,utf8
- 	else
-		mount $@
-	fi
+  mount $@
  else
   #screen out -o and -t options...
   MNTPRMS="`echo -n "$*" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/' | tr '\n' ' '`"
为什么不行啊?
#228
对了,我用的是4.1alpha6
#230
labrador 的头像
看上去是对的,你可以输出一些调试信息看看,可以参考一下我的那个patch中被注释掉的部分。
#316
pup_save.2fs所在vfatU盘挂载正确了!是pmount的问题,400的pmount不适合406。希望大虾能在4.1 final出来时及时为我们制作新的pmount.
#319
刚刚又参照您的技术文档试了试自己修改pmount,发现桌面上的分区图标不是调用pmount,怪不得不行呢。
改了改 /usr/local/bin/drive_all 总算成功了。很高兴!
#321
labrador 的头像
祝贺:),4.1alpha中桌面上的分区图表是用hotpup挂载的,确实和pmount没什么关系。
#2033
请问如何修改drive_all?
#1954
我的是装在硬盘上,分区是ntfs格式,中文目录和文件全都看不到,其它盘没有问题
有没有解决的办法?
#5381
dick_bourne 的头像
我用精简安装的4.2.1英文版+一步到位包,安装在NTFS盘上。修改init如下:

mntfunc() {
if [ "`echo "$*" | grep 'ntfs'`" = "" ];then
mount $@
else
#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,utf8 2>/dev/null #default is rw
ntfsRETVAL=$?
[ $ntfsRETVAL -eq 0 ] && return 0
if [ $ntfsRETVAL -eq 14 ];then
#ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,remove_hiberfile 2>/dev/null
echo -e "\\033[1;31m" >/dev/console #31=red
echo -n "ERROR: Windows NTFS hibernated partition, cannot mount" > /dev/console
echo -e "\\033[0;39m" >/dev/console
return 14
else
ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,utf8,force 2>/dev/null
fi
fi
return $?
}

如法泡制,发现仍然不能正常显示安装盘的中文名,其他盘的正常。
#5385
无线电子 的头像
一共有两处需要修改!
搜索“ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,force”
在最后加上参数
并且还要升级ntfs.3g文件 或者重新编译
#5386
dick_bourne 的头像
谢谢楼上的朋友,我明天回家试验。将把实验结果报告上来
#5393
dick_bourne 的头像
楼上的无线电子朋友,我在家下载成功补丁包,只有一处添加utf8:
mntfunc() {
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
ntfsRETVAL=$?
[ $ntfsRETVAL -eq 0 ] && return 0
if [ $ntfsRETVAL -eq 14 ];then
#ntfs-3g $MNTPRMS -o umask=0,no_def_opts,noatime,rw,remove_hiberfile 2>/dev/null
echo -e "\\033[1;31m" >/dev/console #31=red
echo -n "ERROR: Windows NTFS hibernated partition, cannot mount" > /dev/console
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
fi
elif [ "`echo "$*" | grep 'vfat'`" != "" ];then
MNTPRMS="`echo -n "$*" | tr '\t' ' ' | tr -s ' ' | tr ' ' '\n' | grep '^/' | tr '\n' ' '`"
mount $MNTPRMS -o noatime,utf8,quiet
else
mount $@
fi
return $?
}

之前我没成功可能是因为我没有升级ntfs-3g.


另外,还有问题,就是这个系统的vi编辑器好像没法连续搜索字符串,我以前在RHEL,FC,甚至以前的老的UNIX系统上用vi都可以直接按n键就可以重复查找,但在这儿的vi不行,只能搜索一次,好难用哦,主要是不习惯。

还有这个puppy系统提供两种终端程序,Rxvt不支持右键拷贝,不知道怎样才能复制文本,另一种sakura就好多了,至少可以支持右键拷贝。sakura若在日语里就是“樱花”的意思啊,有可能是日本人开发的,要么就是日本留学生开发的。

我猜的 :)
#6012
linux是不需要右键拷贝的,直接选中,中键剪贴
#7673
可以问下那个补丁怎么打吗??就给了一断代码,小菜一个,请指教。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.