NLS, czyli Polskie znaki w OpenWrt

Kamikaze 8.09_rc2

Pakiety kmod-nls-cp1250, kmod-nls-iso8859-2 są dostępne normalnie w repozytorium. Pakiet kmod-nls-cp852 dostępny jest pod adresem http://eko.one.pl/openwrt/kamikaze/8.09_rc2/kmod-nls-cp852_2.4.35.4-brcm-2.4-1_mipsel.ipk (Broadcom, 2.4)

Kompilacja polskich pakietów NLS dla OpenWrt (Whierussian)

  1. Czym jest NLS?
  2. Pobranie stabilnych źródeł Whiterussian 0.9
  3. Dokonanie odpowiednich zmian w skryptach konfiguracji i kompilacji
  4. Konfiguracja
  5. Kompilacja

Czym jest NLS?

NLS czyli Native Language Support to strony kodowania dla systemów plików w jądrze linuksa. W USA używa się kodowania ASCII, jednak ono obsługuje tylko alfabet używany w USA. By polskie ogonki prawidłowo się wyświetlały należy zastosować rozszerzonego zestawu znaków. Żeby nie było to zbyt proste istnieją 3, a nawet 4 strony kodowe zawierające polskie znaki:

  • IBM 852 (Latin II) - zestaw znaków używany w systemie DOS
  • Windows CP1250 - zestaw znaków używany w systemie MS Windows, jest całkowicie niekompatybilny z 852 (IMHO tylko 'ó' o 'Ó' pozostawało zgodne)
  • ISO 8859-2 - zestaw znaków najczęściej używany w Internecie oraz na alternatywnych do MS Windows systemach operacyjnych. Jest w 66,(6)% zgodny z CP1250, tj. inaczej kodowane są litery: 'ą', 'ś' i 'ź' oraz 'Ą', 'Ś' i 'Ź'.
  • UTF8 - najbardziej zalecany, zawierający kodowanie wszystkich znaków alfabetów używanych na Ziemi. Jednak jest on znacznie bardziej skomplikowany od ww. Tu znaki z zestawu ASCII są kodowane za pomocą jednego znaku, tak samo jak w ASCII. Natomiast znaki nie występujące w ASCII są kodowane za pomocą od dwóch do czterech znaków. Stąd dokument zajmuje trochę więcej miejsca na dysku, ale będzie prawidłowo wyświetlany w każdym systemie obsługującym UTF8. Niestety nie wszystkie systemy obsługują UTF8. Zalicza się do nich Samba 2.x, stąd potrzeba napisania tego artykułu.

W oficjalnych repozytoriach znajdują się jedynie pakiety z kodowaniem UTF8 i kodowaniem dla Europy Zachodniej: 850 i ISO 8859-1.

Pobranie stabilnych źródeł Whiterussian 0.9

Stabilne źródła Whiterussian 0.9 najlepiej pobrać z repozytorium SVN:

$ svn co https://svn.openwrt.org/openwrt/branches/whiterussian/

Po wykonaniu tej operacji w katalogu ./whiterussian/openwrt mamy ściągnięte źródła.

Dokonanie odpowiednich zmian w skryptach konfiguracji i kompilacji

Obiektem naszych zainteresowań będą pliki:

  • openwrt/target/linux/linux-2.4/config/brcm
  • openwrt/target/linux/linux-2.4/Makefile
  • openwrt/target/linux/Config.in

Oraz pliki:

  • openwrt/target/linux/control/kmod-nls-cp852.control
  • openwrt/target/linux/control/kmod-nls-iso8859-2.control
  • openwrt/target/linux/control/kmod-nls-cp1250.control

Których jeszcze nie ma więc zaczniemy od ich stworzenia, ale najpierw co one oznaczają? Są to pliki, które zawierają tylko nazwę pakietu z modułem kernela, jego opis, sekcję w której się znajduje i priorytet (tzn. czy ma być domyślnie zaznaczony). Zawartość plików:

kmod-nls-iso8859-2.control

Package: kmod-nls-iso8859-2
Priority: optional
Section: sys
Description: Kernel module for ISO 8859-2 (Latin 2)

kmod-nls-cp852.control

Package: kmod-nls-cp852
Priority: optional
Section: sys
Description: Kernel module for NLS Codepage 852 (Central Europe)

kmod-nls-cp1250.control

Package: kmod-nls-cp1250
Priority: optional
Section: sys
Description: Kernel module for Windows Codepage 1250 (Central Europe)

config/brcm

Konfiguracja pliku openwrt/target/linux/linux-2.4/config/brcm. Jest to po prostu plik .config jądra z OpenWRT. Należy w nim dopisać lub odhashować te linijki:

CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_ISO8859_2=m

linux-2.4/Makefile

Ważną rzeczą jest zmodyfikowanie pliku: openwrt/target/linux/linux-2.4/Makefile Zawiera ona skrypty budowania pakietów ipkg. W pliku Makefile należy odszukać miejsce, w którym jest skrypt np. do CODEPAGE_850 (linijka 221) i wkleić po nim (za linijką 223):

$(eval $(call KMOD_template,NLS_CP852,nls-cp852,\
	$(MODULES_DIR)/kernel/fs/nls/nls_cp852.o \
,CONFIG_NLS_CODEPAGE_852,,40,nls_cp852.o))
$(eval $(call KMOD_template,NLS_CP1250,nls-cp1250,\
	$(MODULES_DIR)/kernel/fs/nls/nls_cp1250.o \
,CONFIG_NLS_CODEPAGE_1250,,40,nls_cp1250.o))
$(eval $(call KMOD_template,NLS_ISO8859_2,nls-iso8859-2,\
	$(MODULES_DIR)/kernel/fs/nls/nls_iso8859-2.o \
,CONFIG_NLS_ISO8859_2,,40,nls_iso8859-2.o))

linux/Config.in

Plik openwrt/target/linux/Config.in jest dla konfiguratora OpenWRT. Należy w nim dopisać informacje o modułach:

config BR2_PACKAGE_KMOD_NLS_CP852
	tristate "Codepage 852 (Central Europe)"
	default m
	help
	  Kernel module for NLS Codepage 852 (Central Europe)

config BR2_PACKAGE_KMOD_NLS_CP1250
	tristate "Codepage 1250 (Central Europe)"
	default m
	help
	  Kernel module for Windows Codepage 1250 (Central Europe)

config BR2_PACKAGE_KMOD_NLS_ISO8859_2
	tristate "ISO 8859-2 (Latin 2; Central European Languages)"
	default m
	help
	  Kernel module for ISO 8859-2 (Latin 2)''

Te linijki najlepiej wkleić gdzieś pod 340 linijką, gdzie jest o kodowaniach 850 i ISO 8859-1.

Konfiguracja

Wchodzimy do katalogu ./whiterussian/openwrt (por. Pobranie stabilnych źródeł Whiterussian 0.9) i uruchamiamy:

$ make menuconfig

Możemy tam dokonać różnych zmian, które właściwie są zbędne ponieważ w pliku openwrt/target/linux/Config.in daliśmy wszędzie „default m”. Wychodzimy z zapisaniem zmian w konfiguracji.

Kompilacja

Pozostaje nam tylko skompilować źródła. Będąc w katalogu ./whiterussian/openwrt (por. Pobranie stabilnych źródeł Whiterussian 0.9) wydajemy polecenie:

$ make

Potrwa to kilka godzin w zależności od szybkości komputera i łącza internetowego. Skrypt sam ściągnie potrzebne źródła jądra linuksa i toolchain. Po udanej kompilacji w katalogu ./whiterussian/openwrt/bin/packages znajdują się wszystkie skompilowane pakiety, w tym gotowe do instalacji nasze:

kompilowanie/nls.txt · ostatnio zmienione: 2010/03/12 16:10 (edycja zewnętrzna)
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0