挂载usb显示乱码

移植usb驱动后,挂载u盘,结果中文显示?,经过努力终于搞定。

参考文章:http://blog.csdn.net/chenlong12580/article/details/7259965

http://biancheng.dnbcw.info/linux/355449.html


显示?的问题主要有两个:

1. busybox不支持中文。

2.挂载参数用的不对。


在嵌入式linux系统中,busybox是最常见的用来构建文件系统的。可是从busybox1.17.0以上之后,对ls命令不做修改是无法显示中文的。就算是内核设置了支持中文的话,在shell下用ls命令也是无法显示中文的,这是因为busybox1.17.0以后版本对中文的支持进行了限制。在制作根文件系统时,需要对busybox中/libbb/printable_string.c 和 /libbb/unicode.c 进行修改。

/printable_string.c找到

  1.  if (c < ' ')  
  2.             break;  
  3.         if (c >= 0x7f)  
  4.             break;  
  5.         s++;  

注释掉3行和4行

  1.     if (c < ' ')  
  2.             break;  
  3.     /* 
  4.         if (c >= 0x7f) 
  5.             break; 
  6.     */  
  7.         s++;  

找到如下代码段

  1.   unsigned char c = *d;  
  2.             if (c == '\0')  
  3.                 break;  
  4.                 if (c < ' ' || c >= 0x7f)  
  5.                    *d = '?';  
  6.             d++;  
修改为

  1.   unsigned char c = *d;  
  2.             if (c == '\0')  
  3.                 break;  
  4.             if (c < ' ' /*|| c >= 0x7f */)  
  5.                 *d = '?';  
  6.             d++;  


unicode.c 找到如下代码段:
  1.    *d++ = (c >= ' ' && c < 0x7f) ? c : '?';  
  2.                 src++;  
  3.             }  
  4.             *d = '\0';  
  5.         } else {  
  6.             d = dst = xstrndup(src, width);  
  7.             while (*d) {  
  8.                 unsigned char c = *d;  
  9.                 if (c < ' ' || c >= 0x7f)  
  10.                     *d = '?';  

修改第1行和第9行:
  1.        *d++ = (c >= ' '/* && c < 0x7f */) ? c : '?';  
  2.                 src++;  
  3.             }  
  4.             *d = '\0';  
  5.         } else {  
  6.             d = dst = xstrndup(src, width);  
  7.             while (*d) {  
  8.                 unsigned char c = *d;  
  9.                 if (c < ' '/* || c >= 0x7f */)  
  10.                     *d = '?';  

然后在编译busybox时添加 locale support 支持
Busybox Settings  --->    
     General Configuration  --->    
[*] Enable locale support (system needs locale for this to work)                   
[*] Support Unicode 
[*]   Use libc routines for Unicode (else uses internal ones)

此时编译根文件系统还不能显示中文,因为没有相关的字符集。
下面就要添加字符集
在系统文件的 /usr/lib 目录下 添加 gconv (字符转换)目录(从PC上复制过来(/usrlib/gconv/))
这样构建的根文件系统就可以显示中文了。
不过不要得意哦,还有一步要做:
就是使用挂载命令:
mount -t vfat -o iocharset=cp936 /dev/sda1 /mnt 就可以完全显示中文了。
并且没有FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值