Linux NLS Name:深入了解Linux中NLS名称的作用和应用 (linux nls name)
一、 引言
Linux是一种开源的操作系统,由于其开放性、安全性、高效性等特点,受到越来越多技术爱好者、开发者、企业的青睐。Linux中NLS(National Language Support,国际化支持)是与字符集和多语言有关的重要概念,它为不同的语言和区域提供了支持,具有很大的作用和应用价值。本文就通过深入分析Linux中的NLS名称,探讨NLS的作用和应用,帮助读者更好地理解和使用Linux。
二、 NLS名称的定义
NLS在Linux中是一个用于字符集和本地化的标准接口,它为不同语言和区域的用户提供了支持。NLS名称是用于标识不同字符集和本地化环境的Unicode名称,主要用于文件系统的编码、系统日志的记录、系统时间的设置等方面,是Linux系统运行的重要组成部分。NLS名称的形式如:nls_.,其中字符集名称是指支持的字符集类型,如utf8、gbk等;本地化名称是指支持的区域和语言类型,如简体中文、英文、日文等。
三、 NLS名称的作用和应用
1、 文件系统的编码
在Linux中,文件系统的编码是由NLS名称控制的。当文件系统的编码与当前的语言环境不匹配时,就可能出现无法识别字符、乱码等情况。例如,在中文环境下使用Windows系统创建的文件,需要将文件系统的NLS名称设置为支持中文的字符集名称和本地化名称,才能正确地读写中文内容。同样地,在使用Linux系统时,也需要根据自己的语言环境选择合适的NLS名称,以确保文件系统的编码正确无误。
2、 系统日志的记录
系统日志是Linux系统重要的运行记录、调试和故障排除工具。在记录系统日志时,NLS名称也很重要。如果日志文件使用的编码与当前的语言环境不匹配,就会出现乱码或无法显示的情况,从而影响日志的可读性和分析效果。因此,在记录系统日志时,需要将NLS名称设置为与当前语言环境相同的字符集和本地化环境。
3、 系统时间的设置
在Linux中,时间的显示和处理是受NLS名称限制的。系统时间是一个重要的指标,不同语言环境下需要显示不同的时间格式。例如,在中文环境下,时间通常以“年、月、日、时、分、秒”的格式显示,而在英文环境下则以“日、月、年、时、分、秒”的格式显示。因此,在设置系统时间时,需要根据环境选择合适的NLS名称,以确保时间的格式正确无误。
四、 NLS名称的使用方法
在Linux中,NLS名称的使用方法通常有两种。一种是在启动系统时,在命令行中添加-nls参数来指定NLS名称,例如:
[root@localhost ~]# mount -o nls=utf8 /dev/sdb1 /mnt
这表示在挂载/dev/sdb1分区时使用utf8编码的文件系统。另一种是通过修改系统配置文件/etc/locale.conf来设置全局的NLS名称,例如:
[root@localhost ~]# vi /etc/locale.conf
LANG=en_US.UTF-8
这表示将系统的全局语言环境设置为英文语言环境,并使用UTF-8编码。
五、 结论
相关问题拓展阅读:
- linux 编译内核几个常见问题解决方法
linux 编译内核几个常见问题解决方法
之一次把自己编译的驱动模块加载进开发板,就出现问题,还好没花费多长时间,下面列举出辩戚现的问题及解决方案
1:出现inod: error inserting ‘hello.ko’: -1 Invalid module format
法一(网上的):是因为内核模块生成的环境与运行的环境不一致,用linux-2.6.27内核源代码生成的模块,可能就不能在linux-2.6.32.2内核的linux环境下加载,需要在linux-2.6.27内核的linux环境下加载。
a.执行 uname -r //查看内核版本
b.一般出错信息被记录在文件/var/log/messages中,执行下面命令看错误信息
# cat /var/log/messages |tail
若出现类似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic ‘2.6.35.6-45.fc14.i686.PAE
‘ should be ‘2.6.35.13-92.fc14.i686.PAE’
则把 Makefile里的KDIR :=/lib/modules/2.6.35.6-45.fc14.i686.PAE/build1 改为
KDIR :=/lib/modules/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己内核源码路径
(这里的build1是一个文件链接,链接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然并卵,我的fedora 14 /usr/src/kernels下并没有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,虽然不知道两者有什么区别,但改成2.6.35.13-92.fc14.i686还是不行,照样这个问题,还好后来在看教学视频的到启发
法二:改的还是那个位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.//把这里改成你编译生成kernel的那个路径
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) modules ARCH=arm CROSS_COMPILE=arm-linux- //加这句
2. hello: module license ‘unspecified’ taints kernel.
Disabling lock debugging due to kernel taint
方法:在模块程序中加入: MODULE_LICENSE(“GPL”);
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 错误解决
方法:lod 可查看模块信息
即无法删除对应的模块。
就是必须在/lib/modules下建立错误提示的对应的目录((2.6.32.2)即可。
必须创建/lib/modules/2.6.32.2这样一个空目录,否则不能卸载ko模块.
# rmmod nls_cp936
rmmod: chdir(/lib/modules): No such file or directory
但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:
rmmod: module ‘nls_cp936’ not found
初步发现,原来这是编译kernel时使用make modules_install生成的一个目录,
但是经测试得知,rmmod: module ‘nls_cp936’ not found来自于busybox,并不是来自判渣kernel
1).创建/lib/modules/2.6.32.2空目录
2).使用如下源码生成rmmod命令,就掘灶悄可以没有任何提示的卸载ko模块了
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv)
{
const char *modname = argv;
int ret = -1;
int maxtry = 10;
while (maxtry– > 0) {
ret = delete_module(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_module
if (ret #include
#include
#include
#include /* Necessary because we use the proc fs */
#define procfs_name “proctest”
MODULE_LICENSE(“GPL”);
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{int ret;
ret = sprintf(buffer, “HelloWorld!\n”);
return ret;
}
int proc_init()
{Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT “Error: Could not initialize /proc/%s\n”,procfs_name);
return -ENOMEM;}
Our_Proc_File->read_proc = procfile_read;//
//Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk(“/proc/%s created\n”, procfs_name);
return 0;
}
void proc_exit()
{remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO “/proc/%s removed\n”, procfs_name);
}
module_init(proc_init);
module_exit(proc_exit);
view plain copy
ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/modules/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
make后生成proc.ko,再在开发板上inod proc.ko即可
linux nls name的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux nls name,Linux NLS Name:深入了解Linux中NLS名称的作用和应用,linux 编译内核几个常见问题解决方法的信息别忘了在本站进行查找喔。