Temat: [HOWTO] Kompilacja polskich NLS (kodowanie ogonków w systemach plików)
Jako że sam nie mogłem za chiny znaleźć pakietu ani instrukcji jak to zrobić, postanowiłem sam rozkminić co mi się szczęśliwie udało więc wiedzą tą chciał bym się podzielić ze światem ![]()
Kompilacja polskich pakietów NLS dla OpenWRT
0. Czym jest NLS?
1. Pobranie stabilnych źródeł Whiterussian 0.9
2. Dokonanie odpowiednich zmian w skryptach konfiguracji i kompilacji
3. Konfiguracja
4. Kompilacja
ad.0
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.
ad.1
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.
ad.2
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.inOraz 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.controlKtó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)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=mWaż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))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.
ad. 3
Wchodzimy do katalogu ./whiterussian/openwrt (por. ad 1.) i uruchamiamy:
$ make menuconfigMoż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.
ad. 4
Pozostaje nam tylko skompilować źródła. Będąc w katalogu ./whiterussian/openwrt (por. ad 1.) wydajemy polecenie:
$ makePotrwa 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:
kmod-nls-cp1250_2.4.30-brcm-5_mipsel.ipk
kmod-nls-cp852_2.4.30-brcm-5_mipsel.ipk
kmod-nls-iso8859-2_2.4.30-brcm-5_mipsel.ipkMoże po poprawieniu i uściśleniu co niejasne wrzucić to na http://openwrt.pl/ ?