1、环境
平台:IMX6DL
内核版本:linux4.1.5
交叉编译器:arm-linux-gnueabihf-
开发环境:Ubuntu16.04
2、问题描述
从window端创建的文件名在window端显示正常,但是将文件拷入U盘,开发板通过U盘挂载的方式查看里面的文件名或者文件夹,显示都是????或者乱码之类的;或者从开发板创建的文件名传入到window端,显示也是乱码。
3、问题解析
window端和linux端的编码不一样导致的这一现象。
4、问题解决
1、首先配置内核,新增
将配置好的内核重新编译一次,然后烧写到IMX6DL核心板上,重新上电。
2、文件系统的配置
查看文件系统是否有locale、localedef指令,如果没有这条指令,可以将交叉编译器中的指令locale移植进来。
使用locale -a指令查看当前系统之前几种配置
root@imx6dlsabresd:/udisk# locale -a
C
en_GB
en_US
POSIX
如果只支持C和POSIX的话,需要自己弄一个新的字符集,请查看第五点:
使用locale查看当前文件系统默认采用的字符集,系统默认为POSIX,LANG为空
root@imx6dlsabresd:~# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
接下来重新设置环境变量:
root@imx6dlsabresd:/# export LANG=en_GB
root@imx6dlsabresd:/# locale
LANG=en_GB
LC_CTYPE="en_GB"
LC_NUMERIC="en_GB"
LC_TIME="en_GB"
LC_COLLATE="en_GB"
LC_MONETARY="en_GB"
LC_MESSAGES="en_GB"
LC_PAPER="en_GB"
LC_NAME="en_GB"
LC_ADDRESS="en_GB"
LC_TELEPHONE="en_GB"
LC_MEASUREMENT="en_GB"
LC_IDENTIFICATION="en_GB"
LC_ALL=
如果成功环境都配置成功的话,重新查看ls,如下图所示,会显示中文或者其他国家语言文字了,而不是乱码。
5、新增新的字符集
首先需要查看文件系统是否有/usr/share/i18n/文件夹,没有的话,需要从交叉编译器中的软件包拷贝过来,如下图。
如果没有该路径/usr/lib/locale文件夹的话,需要自己手动创建。
执行以下指令:
root@imx6dlsabresd:~# localedef -f UTF-8 -i zh_CN $PWD/zh_CN.UTF8
root@imx6dlsabresd:~# cp $PWD/zh_CN.UTF8 /usr/lib/locale
root@imx6dlsabresd:~# locale -a //查看支持所有字符集
C
POSIX
en_GB
en_US
zh_CN.UTF8
root@imx6dlsabresd:~# export LANG=zh_CN.UTF8
完成上面的操作后,你查看时间会发现年月日都变成了中文