Usb

Strona główna>Dokumentacja użytkowa cdlinux.pl> Cdlinux.pl usb


  • Notka autorska
  • autor:Krzysztof Gibek
  • data powstania: 01:41, 21 maj 2005 (CEST)
  • data modyfikacji:

Wprowadzenie

Poniższy artykuł przedstawia proces przekształcenia dystrybucji CDLinux "mały" w wersje tego systemu uruchamianą z urządzenia podłączonego do interfejsu USB. Zawarta została również instrukcja sporządzenia płyty startowej dla maszyn, których BIOS nie wspiera startu z USB. Publikowana tutaj instrukcja ulegać może zmianom i aktualizacjom wraz z rozwojem bazowej dystrybucji CDLinux. Zmiany mające wpływ na proces tworzenia dystrybucji USB dotyczą głównie jądra oraz initrd.

Cały proces został podzielony na kilka kroków.

Wymagania sprzętowe

Podstawowym wymaganiem jest posiadania nośnika danych o pojemności minimum 1GB, który podłączyć można do komputera za pośrednictwem interfejsu USB. Kolejny krytyczny punkt to płyta główna z możliwością uruchamiania systemu z napędów podłączonych do portów USB, a w szczególności z pamięci typu Flash Drive. Częściowym rozwiązaniem problemu jest wykonanie specjalnej płyty CD, z której to uruchamiany jest system w początkowej fazie (kernel oraz initrd), a kolejne etapy startu systemu jak i jego bieżąca praca realizowane są już całkowicie samodzielnie przez urządzenie USB. Instrukcja wykonania pomocniczego dysku CD zostanie przedstawiona w tym artykule. Bazą dla stworzenia dystrybucji CDLinux uruchamianej z interfejsu USB jest zainstalowany na dysku twardym system CDLinux „mały”, począwszy od wersji 0.5.9.

Start

Dystrybucja CDLinuksa zainstalowana na HD zawiera niemal wszystkie narzędzia niezbędne do stworzenia wersji USB. Wyjątkiem jest program, będący boot loaderem o nazwie SYSLINUX. W celu jego instalacji należy wydać polecenie:
<pre>apt-get install syslinux</pre>

Kolejnym krokiem jest podłączenie urządzenia USB do portu.
Powinniśmy otrzymać komunikat kernela o podobnej treści, prezentowany na ekranie.

<pre>
usb 1-1: new full speed USB device using uhci_hcd and address 4
scsi0> SCSI emulation for USB Mass Storage devices
usb-storage: device found at 4
usb-storage: waiting for device to settle before scanning

Vendor: USB Model: Flash Drive Rev: 1.01
Type: Direct-Access ANSI SCSI revision: 00

SCSI device sda: 2031616 512-byte hdwr sectors (1040 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
sda: unknown partition table
Attached scsi removable disk sda at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
</pre>

Jest to znak, że urządzenie USB zostało prawidłowo rozpoznane przez system, będzie widoczne jako /dev/sda i jest gotowe do pracy.


<font color="#bb0000">Istotna uwaga</font>

Może zaistnieć sytuacja, że do komputera podłączone jest w tym samym czasie więcej nośników danych z interfejsem USB lub zostały one odłączone bez uprzedniego użycia komendy umount. W takim przypadku nowo-przyłączone urządzenie będzie w systemie identyfikowane jako /dev/sdx, gdzie x to kolejną „wolna” literą alfabetu. Istotne jest, by zwrócić uwagę na przytoczony komunikat w celu identyfikacji nazwy urządzenia.

<font color="#aa0000">Zalecane jest jednak, by podczas procesu tworzenia dystrybucji do komputera podłączone było tylko jedno urządzenie będące nośnikiem danych z interfejsem USB.</font> Dotyczy to zarówno tzw. pendrive’ów, jak i aparatów cyfrowych czy odtwarzaczy MP3, które mogą być traktowanie przez system jako urządzenia magazynujące dane. Innymi słowy, zalecane jest by urządzenie, na którym tworzona będzie dystrybucja było jedynym urządzeniem magazynującym podłączonym w tym czasie do komputera poprzez interfejs USB.


Sprawdzenie poprawności geometrii nośnika i utworzenie partycji.

Kolejny krok to utworzenie na urządzeniu USB odpowiednich partycji.

Instalacja CDLinuksa na dysku twardym wymaga do prawidłowej pracy dwóch partycji: Linux oraz Linux swap. Czyli miejsca na dane oraz miejsca na pamięć wirtualną. W przypadku dystrybucji opartej o USB konieczne jest utworzenie trzech partycji. Dodatkowa, trzecia partycja to stosunkowo niewielki obszar przeznaczony na boot loader, kernel oraz initrd. Z uwagi na konieczność zastosowania boot loadera SYSLINUX obszar ten musi posiadać system plików FAT16.

  • Partycje linuksowe

Po uruchomieniu programu fdisk /dev/sda i wydrukowaniu listy partycji, należy zwrócić uwagę na podawaną geometrię nośnika. Prawidłowe parametry dla urządzenia o pojemności 1 GB powinny przypominać te, przedstawione poniżej. Należy przede wszystkim zwrócić uwagę na liczbę głowic (heads), która nie powinna przekraczać wartości 32.

Disk /dev/sda: 1040 MB, 1040187392 bytes
32 heads, 62 sectors/track, 1024 cylinders
Units cylinders of 1984 * 512 1015808 bytes

  • Partycje Windows

Jednak zdarzyć się może, że będą one diametralnie inne. Sytuacja taka może mieć miejsce, gdy na przykład na nośniku zostały utworzone partycje przy użyciu systemu operacyjnego MS Windows. Wówczas możemy otrzymać dane zbliżone do zaprezentowanych poniżej, gdzie uwagę zwraca anormalna liczba głowic.

Disk /dev/sda: 1040 MB, 1040187392 bytes
255 heads, 63 sectors/track, 126 cylinders
Units cylinders of 16065 * 512 8225280 bytes

W przypadku takich parametrów dalsza praca skazana jest na niepowodzenie, gdyż boot loader SYSLINUX nie będzie w stanie wystartować z urządzenia USB o takiej geometrii. Najprostszym rozwiązaniem problemu jest usunięcie przy użyciu programu fdisk wszystkich partycji, które znajdują się na nośniku, zapisane tabeli partycji oraz wyjście z programu. Po ponownym uruchomieniu programu fdisk geometria powinna posiadać już akceptowalne parametry.

Następną operacją jest utworzenie na urządzeniu /dev/sda partycji o parametrach przedstawionych poniżej:

<pre>
Partycja sda1 ~20 MB / FAT 16
Partycja sda2 ~870 MB / Linux
Partycja sda3 ~ 100 MB / Linux swap
</pre>

Program fdisk powinien podawać teraz informacje bardzo zbliżone do przedstawionych poniżej:
<pre>
Device Boot Start End Blocks Id System
/dev/sdb1 1 21 20801 6 FAT16
/dev/sdb2 22 924 895776 83 Linux
/dev/sdb3 925 1024 99200 82 Linux swap
</pre>

Utworzone partycje należy sformatować. Każdą przy użyciu programu, odpowiedniego dla danego systemu plików. W tym celu należy wydać następujące polecenia:
<pre>
mkfs.vfat /dev/sda1
mkfs /dev/sda2
mkswap /dev/sda3
</pre>

Kopiowanie plików niezbędnych do stworzenia dystrybucji USB

Przed rozpoczęciem kopiowania plików należy zamontować partycję sda2. Następnie skopiować na nią następujące katalogi z dysku twardego. Procedurę kopiowania należy przeprowadzić z uwzględnieniem podkatalogów, praw dostępu, atrybutów oraz linków. W tym celu należy użyć polecenia cp z dodatkową opcją— archive.

Można także skorzystać z programu Midnight Commander dostępnego w dystrybucji CDLinux. Lista katalogów do przekopiowania została przedstawiona poniżej:

<pre>
/bin /home /root /var /etc /lib /sbin /dev/ /mnt /usr
</pre>

Poza tym należy utworzyć na partycji sda2 katalogi:

<pre>
/tmp /boot /proc /sys
</pre>

Kolejny krok to zamontowanie partycji sda1 w nowoutworzonym katalogu /boot. Teraz należy już tylko przekopiować pliki zawierające kernel oraz initrd, czyli z katalogu /boot na twardym dysku przekopiować do katalogu /boot na urządzeniu USB. Z uwagi na ograniczenia systemu plików FAT16, dotyczącego długości nazw konieczna jest ich zmiana zgodnie z konwencją 8 3 (8 znaków nazwy pliku 3 znaki rozszerzenia). Należy też pamiętać, że nazwa pliku w systemie FAT16 może zawierać tylko jedną kropkę.

Czyli przykładowo:

initrd.img-2.6.10-cdlinux.pl-10.02.2005- > initrd
vmlinuz-2.6.10-cdlinux.pl-10.02.2005- > vmlinuz.

Teraz pozostaje jedynie skopiowanie pozostałych plików biorących udział w procesie startu systemu.
Te pliki to:

  • isolinux.cfg
  • intro.msg
  • syslogo.lcs

Można je znaleźć ma dysku twardym w katalogu /cdlinux, w skompresowanym pliku isolinux-maly.tgz, w katalogu isolinux. Powyższe pliki należy przekopiować do katalogu /boot na urządzeniu USB. Warto zaznaczyć, że jedynym, niezbędnym plikiem jest w istocie tylko plik konfiguracyjny isolinux.cfg. Pozostałe zawierają komunikat wyświetlany po uruchomieniu boot loadera i towarzyszącą mu grafikę.

Instalacja i konfiguracja boot loadera SYSLINUX.

W katalogu /boot urządzenia USB znajduję się teraz plik isolinux.cfg. Jest to plik konfiguracyjny boot loadera ISOLINUX, wykorzystywany w procesie startu CDLinuksa z napędu CD-ROM. Oba boot loadery ISOLINUX i SYSLINUX są autorstwa tej samej osoby, a ich pliki konfiguracyjny są ze sobą kompatybilne. Wystarczy jedynie zmienić nazwę pliku z isolinux.cfg na syslinux.cfg i dokonać w nim kilku zmian.

Oryginalny plik isolinux.cfg używany w dystrybucji CDLinux „mały” ma postać:

<pre>
prompt 1
timeout 100
say cdlinux.pl maly 0.5.9
label linux
display intro.msg
kernel zimage
append initrd=root.gz ramdisk_size=65536 cdboot root=/dev/ram4
label noram
kernel zimage
</pre>

Jego nowa postać pod nazwą syslinux.cfg powinna wyglądać następująco

<pre>
prompt 1
timeout 100
say cdlinux.pl maly 0.5.9 USB
label linux
display intro.msg
kernel vmlinuz
append initrd=initrd root=/dev/ram0 init=linuxrc rw? ramdisk_size=16384
</pre>

Zmiany dotyczą nazw plików, w których zawarty jest kernel (zimage na vmlinuz) oraz initrd (root.gz na initrd), a także parametrów wysyłanych do kernela. Zostaje podana informacja o użyciu initrd, co jest znakiem dla kernela o konieczności przygotowania pierwszego, wolnego ramdysku (/dev/ram0) o pojemności 16MB na potrzeby systemu plików initrd. Ramdysk będzie w początkowej fazie startu systemu głównym systemem plików pracującym w trybie: do odczytu i do zapisu. Pozostałe dyrektywny nie mają zasadniczego wpływu na sam proces startu systemu, a ich dokładny opis znaleźć można w dokumentacji samego programu rozruchowego.

Ostatnim krokiem tego etapu jest instalacja boot loadera SYSLINUX. Cały proces sprowadza się jedynie to wydawania polecenia:

<pre>
syslinux /dev/sda1
</pre>

Brak jakiegokolwiek komunikatu oznacza, że operacja zakończyła się sukcesem. Świadczyć o tym może pojawienie się pliku ldlinux.sys w katalogu /boot na urządzeniu USB. Konfiguracja znajdująca się w pliku syslinux.cfg jest czytana dynamicznie, przy każdym starcie programu rozruchowego. Dzięki temu możliwa jest rekonfiguracja bez konieczności ponownego instalowania programu.

Przystosowanie initrd do startu z urządzenia USB.

O ile sam kernel można pozostawić bez zmian, to jednak wymaga ich initrd. W dystrybucji CDLinux jest on skompresowany i przed zamontowaniem należy użyć programu gunzip do jego rozkompresowania. Następnie trzeba go zamontować używając polecenia:
<pre>
mount z parametrem –o loop.
</pre>

Uzupełnienie- powyższy tekst wymaga uzupełnienia, zrobiłem to w formie graficznej.

W katalogu głównym initrd należy poddać edycji plik linuxrc. Poniżej przedstawiono zawartość tego skryptu dla dystrybucji USB. Istotne momenty zostały wzbogacone o komentarz.

<pre>
#!/bin/sh

export PATH=/usr/sbin:/sbin:/bin

#Dołączenie pliku który ładuje moduły przygotowane przez twórców jądra CDLinuksa.
. /linuxrc.conf
. /loadmodules

modprobe ext3

#Uruchomienie wirtualnego systemu plików /proc.
mount- t proc none /proc

#Wprowadzenie pięciosekundowej pauzy, czyli wstrzymanie dalszego przetwarzania skryptu, by pozostawić czas
#na inicjalizację wykrytych urządzeń USB.
sleep 5

#Założenie katalogu, pod który zostanie podmontowana partycja sda2 urządzenia USB. Partycja ta będzie pełnić
#rolę głównego systemu plików.
mkdir /new-root
mount /dev/sda2 /new-root

#Nowopowstały katalog staje się katalogiem bieżącym. Jeśli nie istnieje podkatalog initrd to zostanie on
#utworzony.
cd /new-root
if [- d initrd]; then
:
else
mkdir initrd
fi

#Następuje przeniesienie głównego systemu plików aktualnego procesu do podkatalogu initrd. Bieżący katalog
#staje się nowym, głównym systemem plików (root file system). W rezultacie jest nim system plików na
#partycji sda2.
pivot_root. initrd

#Wywołanie procesu init z uwzględnieniem bieżącego katalogu jako głównego systemu plików dla tego programu.
#Z uwagi na różnice w implementacji programu pivot_root wymagane jest użycie chroot. W przeciwnym wypadku
#nie ma pewności że zostanie zmieniony główny katalog powłoki. Istnieje też możliwość, że standardowe
#wejście, wyjście lub strumień błędów jest skierowany na urządzenie w starym systemie plików,
#uniemożliwiając jego późniejsze odmontowanie. Użycie chroot rozwiązuje ten problem. Polecenie exec
#powoduje, iż program init jest uruchamiany jako bieżący proces, bez tworzenia procesu potomnego. Pozwala to
#na wstrzymanie dalszego wykonywania skryptu linuxrc, aż do zamknięcia procesu init czyli de facto całego
#systemu.
exec chroot. init </dev/console >/dev/console 2>&1

#Polecenia te wykonywane są w trakcie zamykania systemu. Ich zadanie to odmontowanie starego systemu plików
#(/dev/ram0) podmontowanego w podkatalogu initrd, zwolnienie pamięci zajmowanej przez ramdysk oraz
#wyłączenie wirtualnego systemu plików /proc.//
umount /initrd
blockdev— flushbufs /dev/ram0
umount /proc
</pre>

Należy również sprawdzić, czy katalog /dev w initrd zawiera pliki dla urządzeń USB, czyli sda1, sda2, sdb1, itp. Jeśli nie to trzeba je tam przekopiować z dysku twardego, z katalogu /dev. Jeśli również tam ich nie było, trzeba je utworzyć poleceniem mknod.

Teraz pozostaje już tylko odmontować initrd i skompresować ten plik przy pomocy gzip. Samo kompresowanie initrd nie jest operacją wymaganą. Zmniejsza ono jednak wielkość pliku, co znacznie przyśpiesza jego ładowanie i zarazem start systemu.

Pozostałe, niezbędne operacje.

Na koniec pozostaje jeszcze edycja pliku /etc/fstab znajdującego się na partycji sda2 urządzenia USB. Plik ten zawiera statyczne informacje na temat systemów plików. Jego prawidłowa zawartość dla dystrybucji CDLinux uruchamianej z urządzenia USB powinna wyglądać następująco:

<pre>
/dev/sda1 /boot vfat defaults 0 0
/dev/sda2 / ext3 errors=remount-ro 0 1
/dev/sda3 swap swap defaults 0 0
proc /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/fd0 /mnt/floppy auto user,noauto 0 0
/dev/cdrom1 /mnt/cdrom1 iso9660 ro,user,noauto,exec 0 0
</pre>

Tak przygotowana dystrybucja CDLinuksa jest gotowa do pracy z urządzeniem USB.

Płyta startowa CD

Z archiwum o nazwie isolinux-maly.tgz znajdującego się w katalogu /cdlinux należy wyodrębnić następujące pliki: boot.cat, isolinux.bin, isolinux.cat, isolinux.cfg, intro.msg oraz syslogo.lss. Pliki te należy umieścić w dowolnym katalogu roboczym, na potrzeby tej instrukcji przyjęto, że jest to katalog /tmp/bootcd.
Teraz należy zamountować pierwszą partycję (sda1) urządzenia USB, zawierającego CDLinuksa USB i skopiować z niej do katalogu /tmp/bootcd pliki vmlinuz oraz initrd.

W kolejnym kroku należy poddać edycji plik isolinux.cfg i jego zawartość zastąpić następującą treścią:
<pre>
prompt 1
timeout 100
say cdlinux.pl maly 0.5.9 USB
label linux
display intro.msg
kernel vmlinuz
append initrd=initrd root=/dev/ram0 init=linuxrc rw ramdisk_size=16384
</pre>

Pozostaje już tylko utworzenie obrazu płyty CD. W tym celu należy przejść do katalogi /tmp/bootcd i wykonać polecenie:
<pre>
mkisofs- zR- o cdlbootcd.img- b isolinux.bin- c boot.cat- no-emul-boot- boot-load-size 4- boot-info-table /tmp/bootcd.
</pre>

Utworzony zostanie plik o nazwie cdlbootcd.img zawierający obraz płyty CD. Przedstawionym poniżej poleceniem zostanie on nagrany na nośniku.

<pre>
cdrecord- v speed=12 dev=0,0,0 cdlbootcd.img
</pre>

Teraz należy już tylko wystartować komputer z utworzonego CD-ROMu. Przed tą operacją należy upewnić się, że urządzenie USB zawierające CDLinuksa jest podłączone do komputera. Jądro oraz initrd zostaną załadowane z CD-ROMu, natomiast reszta danych czytana będzie już z nośnika USB.


Pod adresem [http://desktop.pl/cdl/usblogo.lss] znajduje się splash screen prezentowany przed startem systemu, dla wersji USB.
Można go podmienić z plikiem syslogo.lss znajdującym sie w katalogu /boot (partycja sda1) To samo można zrobić podczas wykonywania dysku startowego CD.

Przydatne adresy

  • flash disk (wcześniej wspomniany),
  • PEN drive,
  • Flash drive,
  • USB key,
  • Keydrive,
  • Keychaindrive

Strona główna>Dokumentacja użytkowa cdlinux.pl> Cdlinux.pl usb

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License