Включение кириллицы в buildroot
Попытка включения кириллицы оказалась без успешной.
Доказательство:
# echo "Это образец текста" > файл.txt
# ls
rc.local ''$'\364\340\351\353''.txt получил '\364\340\351\353' вместо 'файл'
Что сделал:
В Buildroot:
make menuconfig
Toolchain --->
Enable toolchain locale/i18n
System configuration --->
(C en_US) Locales to keep
(ru_RU.UTF-8) Generate locale data
[*] Enable Native Language Support (NLS)
Filesystem and flash utilities --->
[*] ntfs-3g
Target packages --->
Hardware handling --->
[*] kbd
Target packages --->
System tools --->
[*] coreutils
В ядре:
File systems --->
-*- Native language support --->
<*> Codepage 866 (Cyrillic/Russian)
<*> Windows CP1251 (Bulgarian, Belarusian)
<*> NLS UTF-8
<*>ASCII (United States)
<*> NLS KOI8-R (Russian)
Все перепроверил еще на раз и пересобрал buildroot.
В profile прописал export LANG=ru_RU.UTF-8
Кто знает, в чем ошибка?
Ответы (1 шт):
Столкнулся с такой же проблемой, в формулировке: добиться нормального отображения файлов с русскими именами.
В выборе кодировок ориентировался на вывод команды mount на ПК:
$ mount
...
/dev/sdd3 on /media/disk1 type vfat (... codepage=437, iocharset=iso8859-1, utf8, ...)
...
Искал ответ в инете, несколько раз натыкался на аналогичный вопрос, но всегда без ответа. Поскольку в данном случае автор вопроса максимально близко подобрался к разгадке, решил разместить свое решение здесь. Для будущих поколений)
Для решения задачи, мне потребовалось внести правки в четырех местах:
- buildroot
- linux
- busybox
- /etc/profile.d/locale.sh <-- этот файл добавить в целевую систему
Конфигурация Buildroot - platform2_defconfig:
...
BR2_TOOLCHAIN_BUILDROOT_UCLIBC=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_ENABLE_LOCALE_WHITELIST="ru_RU.UTF-8 en_US"
BR2_GENERATE_LOCALE="ru_RU.UTF-8 en_US"
BR2_SYSTEM_ENABLE_NLS=y
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_platform2_PATH)/configs/linux_defconfig"
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_platform2_PATH)/configs/busybox_defconfig"
...
linux_defconfig:
...
CONFIG_EXT4_FS=y
CONFIG_FUSE_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_UTF8=y
CONFIG_NLS_DEFAULT="UTF-8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
...
busybox_defconfig:
...
CONFIG_LOCALE_SUPPORT=y
CONFIG_UNICODE_SUPPORT=y
# CONFIG_UNICODE_USING_LOCALE is not set
CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
CONFIG_SUBST_WCHAR=63
CONFIG_LAST_SUPPORTED_WCHAR=4351
...
/etc/profile.d/locale.sh:
export LANG=ru_RU.UTF-8
export LC_ALL=ru_RU.UTF-8
На целевом устройстве вывод команды locale выглядит так:
# locale
LANG=ru_RU.UTF-8
LC_CTYPE=C
LC_NUMERIC=C
LC_MONETARY=C
LC_TIME=C
LC_COLLATE=C
LC_MESSAGES=C
LC_ALL=ru_RU.UTF-8
Надеюсь, это окажется кому-нибудь полезным. =)