Включение кириллицы в 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, ...)
...

Искал ответ в инете, несколько раз натыкался на аналогичный вопрос, но всегда без ответа. Поскольку в данном случае автор вопроса максимально близко подобрался к разгадке, решил разместить свое решение здесь. Для будущих поколений)

Для решения задачи, мне потребовалось внести правки в четырех местах:

  1. buildroot
  2. linux
  3. busybox
  4. /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

Надеюсь, это окажется кому-нибудь полезным. =)

→ Ссылка