Toshiba AC100/Dynabook AZ

This page in English.

W wersji angielskiej, umieściłem bardzuiej aktualny opis instalacji jądra 3.0.8.

Z jednej strony jest to dość solidnie wykonane urządzenie, małe, lekkie z 10” ekranem i bardzo dobrym czasem pracy na baterii. Może być traktowane zarówno, jako płyta deweloperska, jak i urządzenie do pracy. Z drugiej strony zainstalowany system Android kompletnie nie sprawdza się w urządzeniu, które bardziej przypomina laptopa niż telefon.

Rozwiązaniem pozwalającym pozbyć się ograniczeń Androida i umożliwiającym pełne skorzystanie z funkcji tego netbooka, jest instalacja klasycznej, opensource-owej dystrybucji Linuksa.

Niestety oficjalne wsparcie firmy NVIDIA dla systemu Linux na zestawach deweloperskich, które są bazą netbooka, zostało zawieszone (i nie wiadomo czy i kiedy będzie kontynuowane). Dostępne są tylko źródła jądra oraz narzędzia deweloperskie dla Android-a. Na szczęście można je z powodzeniem wykorzystać do zainstalowania własnej lub gotowej dystrybucji Linuksa.

nvflash

W serwisie firmy NVIDIA umieszczone są materiały dotyczące zestawu uruchomieniowego Tegra Ventana. Jest on zbliżony parametrami do omawianego urządzenia. Wykorzystamy go do pozyskania programu nvflash.

http://developer.nvidia.com/node/19101

Pobieramy wersję dla Linuxa.

http://developer.download.nvidia.com/tegra/files/os/tegra_ventana_gb_20110222.run.gz

Rozpakowuje i instaluję (trzeba zaakceptować licencję):

$ gunzip tegra_froyo_20110207.run.gz
$ sh tegra_froyo_20110207.run.gz
...
By answering 'yes' to the next question you confirm you have read, understood and accept all the terms of this license.
Do you accept the terms of this license? yes/no? yes
Creating directory tegra_ventana_gb_20110222
Verifying archive integrity... All good.
Uncompressing NVIDIA Tegra 250 Android Installer............
 
$ cd tegra_ventana_gb_20110222/

Dotychczasowy podział na partycje

Numer Nazwa Rozmiar Przeznaczenie
2 BCT 3 145 728 (3 MB) boot config table
3 PT 524 288 (512 kB) partition table
4 EBT 2 097 152 (2 MB) bootloader
5 SOS 5 242 880 (5 MB) recovery partition
6 LNX 8 388 608 (8 MB) linux kernel and inird
7 MBR 1 048 576 (1 MB) master boot record
8 APP 314 572 800 (300 MB) applications (/system)
9 CAC 419 430 400 (400 MB) cache (/cache)
19 MSC 2 097 152 (2 MB) misc (/misc)
11 EM1 524 288 (512 kB)
12 UBA 1 294 991 360 (1235 MB) user data (/data)
13 EM2 524 288 (512 kB)
14 UDB 5 950 144 512 (5674.5 MB) (reszta) user data (/storage)

Nowy podział na partycje

Numer Nazwa Rozmiar Przeznaczenie
2 BCT 3 145 728 (3 MB) boot config table - zależy od systemu, który zamierzamy wgrać
3 PT 524 288 (512 kB) tablica partycji (dla nvflash)
4 EBT 2 097 152 (2 MB) bootloader
5 SOS 5 242 880 (5 MB) nieużywana, można umieścić na niej zapasowy system (do testów lub aktualizacji), bootloader umożliwi jego uruchomienie po włączeniu urządzenia z wciśniętym przyciskiem Home
6 LNX 8 388 608 (8 MB) jądro systemu; partycja musi znajdować się pod właściwym (zakodowanym w bootloaderze) offsetem
5 MBR 5 242 880 (5 MB) master boot record - tablica partycji dla Linuksa
7 APP reszta główny system plików (Debian)

Konfiguracja

Podział na partycję (i nagranie ich zawartości w plików źródłowych) uzyskamy przy pomocy następującego pliku konfiguracyjnego:

linux.cfg
[device]
type=hsmmc
instance=3
 
[partition]
name=BCT
id=2
type=boot_config_table
allocation_policy=sequential
filesystem_type=basic
size=3145728
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
 
[partition]
name=PT
id=3
type=partition_table
allocation_policy=sequential
filesystem_type=basic
size=4096
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
 
[partition]
name=EBT
id=4
type=data
allocation_policy=sequential
filesystem_type=basic
size=2097152
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
filename=ac100-bootloader.bin
 
[partition]
name=SOS
id=5
type=data
allocation_policy=sequential
filesystem_type=basic
size=5242880
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
 
[partition]
name=LNX
id=6
type=data
allocation_policy=sequential
filesystem_type=basic
size=8388608
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
filename=linux.img
 
[partition]
name=MBR
id=7
type=data
allocation_policy=sequential
filesystem_type=basic
size=1048576
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
 
[partition]
name=APP
id=8
type=data
allocation_policy=sequential
filesystem_type=basic
size=0xFFFFFFFFFFFFFFFF
file_system_attribute=0
partition_attribute=0
allocation_attribute=8
percent_reserved=0
filename=rootfs.img

Powyższy plik uzyskałem modyfikując dołączony do OS Pack-a plik flash.cfg. Oprócz zmian układu partycji należy zwrócić uwagę na zmianę w partycji numer 4 - z type=bootloader na type=data. Zmiana jest konieczna do prawidłowego zaprogramowania urządzenia.

Pliki z danymi

Do zainstalowania systemu konieczne będzie przygotowanie odpowiednich plików z danymi: bootloadera, jądra z ewentualnym ramdyskiem, głównego systemu plików.

EBT i Bootloader

Plik EBT niezbędny do uruchomienia urządzenia. Bez niego nie da się zaprogramować urządzenia. Plik skopiowany z mojego egzemplarza AC100: ac100.bct

Jako Bootloadera można użyć:

  • Skopiowanej wcześniej z urządzenia zawartości partycji 4.
  • Kopii bootloadera z mojego egzemplarza: ac100-bootloader.bin
  • Pliku bootloadera pochodzącego z aktualizacji systemu Android wydanej przez Toshibę. Stąd pochodzi również powyższy plik. Aktualizacja jest plikiem archiwum, który wydobyłem z urządzenia w trakcie przeprowadzania procesu aktualizacji.

Jądro

Można uruchomić jądro w wersji 2.6.32 (to samo, co w dostarczanym systemie Android). Do prawidłowego działania wymaga ono programu nvrm_daemon. Jest on (a w zasadzie był) dostarczany przez firmę NVIDIA w pakiecie linux4tegra. Nie jest udostępniany kod źródłowy programu ani używanych przez niego bibliotek.

Druga możliwość to uruchomienie nowszego jądra w wersji 2.6.37 lub 2.6.38 (osobiście używam tego drugiego). Nie wymagają one dodatkowych programów. Prace nad tymi wersjami są prowadzone w ramach projektu ChromeOS.

Do kompilacji jądra konieczny będzie toolchain. Ponieważ jądro nie korzysta z biblioteki standardowej oraz jego system budowania sam określa wariant ABI i typ procesora, można skorzystać z dowolnego toolchaina. Ja używam arm-cortex_a9-linux-gnueabi opisanego tu.

$ export PATH=/home/marcin/x-tools/arm-cortex_a9-linux-gnueabi/bin:$PATH

Skompilowane jądro, wraz z jego parametrami (oraz opcjonalnie dołączonym ramdyskiem) należy jeszcze opakować w plik rozumiany przez bootloader. Służy do tego narzędzie 'mkbootimg'.

2.6.38 (zalecane)

Polecam wykorzystanie tej wersji. Jest ona aktywnie rozwijana.

Repozytorium z tymi wersjami znajduje się pod adresem: http://gitorious.org/~marvin24/ac100/marvin24s-kernel.

Kilka wersji jądra, dostępnych jest jako gałęzie tego repozytorium, aby je pobrać, należy przy wywoływaniu polecenia git dodać odpowiedni parametr określający gałąź, na przykład: -b chromeos-ac100-2.6.38-exp.

Użyta niżej konfiguracja jądra jest dobrana dość subiektywnie (minimalistycznie) na podstawie eksperymentalnego jądra używanego w dystrybucji Ubuntu.

$ git clone git://gitorious.org/~marvin24/ac100/marvin24s-kernel.git
$ cd marvin24s-kernel
 
$ wget -c http://bis.org.pl/static/ac100/ac100-2.6.38.config
$ cp ac100-2.6.38.config .config
 
$ make ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi- oldconfig
$ make ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-

2.6.32 (stabilne)

Ta wersja, z kolei, mimo, że starsza - działa stabilnie i bez problemów (błędów, zawieszeń).

Zmodyfikowana wersja jądra wydana pierwotnie przez firmę Toshiba (dla wypełnienia licencji GPL) znajduje się w serwisie: http://gitorious.org/ac100.

Plik konfiguracyjny jądra: ac100-2.6.32.config.

$ git clone git://gitorious.org/ac100/kernel.git
$ cd kernel
 
$ wget -c http://bis.org.pl/static/ac100/ac100-2.6.32.config
$ cp ac100-2.6.32.config .config
 
$ make ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi- oldconfig
$ make ARCH=arm CROSS_COMPILE=arm-cortex_a9-linux-gnueabi-

Inne wersje

  • Pierwszą wersją jądra udostępnianą przez firmę Toshiba (dla wypełnienia licencji GPL) było 2.6.29. Ma ono takie same cechy i ograniczenia, jak 2.6.32 (konieczność użycia nvrm_daemon do prawidłowego działania sterowników).
  • Gałąź 2.6.37 jest aktywnie rozwijana w dystrybucji Ubuntu. W repozytorium http://ppa.launchpad.net/ac100/ppa/ubuntu/ można znaleźć najnowsze wersje pakietów z jądrem, ich źródła, łaty oraz informacje o konfiguracji. Dodatkowe informacje znajdują się na stronach deweloperów https://launchpad.net/~ac100.

mkbootimg

Jest to jeden z programów wchodzących w skład SDK systemu Android. Ponieważ używa specyficznego systemu budowania, skompilujemy tylko to narzędzie (wraz z jego zależnościami):

$ git clone git://android.git.kernel.org/platform/system/core.git
#Alternatywnie wersja eksperymentalna:
#
$ mkdir mkbootimg-build
$ cd mkbootimg-build
 
$ cp -v ../core/mkbootimg/bootimg.h ./
$ cp -v ../core/mkbootimg/mkbootimg.c ./
$ cp -v ../core/libmincrypt/sha.c ./
$ mkdir -v mincrypt
$ cp -v ../core/include/mincrypt/sha.h ./mincrypt/
 
$ gcc -I. -c sha.c
$ gcc -I. -c mkbootimg.c
$ gcc -s -o mkbootimg mkbootimg.o sha.o
 
$ cp mkbootimg ../

Parametry jądra

Skompilowane jądro w wybranej wersji, bez ramdysku oraz parametry uruchomienia, umieścimy w pliku linux.img.

Oryginalne parametry jądra Androida to:

mem=448M@0M nvmem=64M@448M vmalloc=320M video=tegrafb console=tty1 usbcore.old_scheme_first=1 
tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 root=/dev/mmcblk3p1 rootwait

Parametr tegrapart składa się z listy oddzielonych przecinkami partycji:

<nazwa>:<offset w blokach>:<długość w blokach>:<rozmiar bloku>

Teoretycznie pozawala na określenie, które partycje i w jakiej kolejności mają być widoczne w Linuksie, w praktyce jest różnie interpretowany w zależności od wersji jądra.

2.6.38 (zalecane)

W przypadku jądra 2.6.37 linia poleceń jest inna, potrzebny jest „magiczny parametr” lp0_vec:

./mkbootimg \
  --kernel marvin24s-kernel/arch/arm/boot/zImage \
  --ramdisk /dev/null \
  --cmdline \
    'mem=448M@0M lp0_vec=0x2000@0x1c29e000 tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 root=/dev/mmcblk0p3 console=tty1 rootwait' \
  -o linux.img

Wewnętrzna pamięć eMMC jest wykrywana jako mmcblk0, partycje zostaną prawidłowo zorganizowane na podstawie parametru tegrapart=. Sterownik będzie umożliwiał dostęp do partycji zawierającej jądro - główne (mmcblk0p2) oraz zapasowe (mmcblk0p1) a także system plików (mmcblk0p3).

2.6.32

W 2.6.32 inna jest kolejność wykrywania urządzeń MMC, wewnętrzna pamięć będzie dostępna jako mmcblk0,

./mkbootimg \
  --kernel kernel/arch/arm/boot/zImage \
  --ramdisk /dev/null \
  --cmdline \
    'mem=448M@0M nvmem=64M@448M vmalloc=320M video=tegrafb console=tty1 tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 root=/dev/mmcblk3p1 rootwait' \
  -o linux.img

Parametr tegrapart= zdaje się być ignorowany, główny system plików jest dostępny jako jedyna partycja mmcblk0p1.

Główny system plików

Do przygotowania niewielkiego, zoptymalizowanego głównego systemu plików, można skorzystać z zestawu narzędzi Buildroot.

Alternatywą (ze względu na możliwości urządzenia dość dobrą) jest zainstalowanie dystrybucji (Debian lub Ubuntu). Nie są one zoptymalizowane do wykorzystania wszystkich możliwości procesora i wersji architektury, ale za to zapewniają dużo pre-kompilowanych pakietów, gotowych do zainstalowania. Zajmiemy się instalacją systemu Debian 6.0. Wprawdzie programy są skompilowane w trybie zgodności z armv4, ale różnice wydajności będą niezauważalne.

Buildroot

http://buildroot.uclibc.org/ Korzystam z wersji 2011.05.

Konfiguracja jest dość standardowa. Wybieramy odpowiedni toolchain (ścieżkę i prefix) oraz kilka programów według uznania.

Target Architecture (arm)  --->
Target Architecture Variant (cortex-A9)  --->
Toolchain  --->
      Toolchain type (External toolchain)  --->
      Toolchain (Custom toolchain)  --->
  (/home/marcin/x-tools/arm-cortex_a9-linux-gnueabi) Toolchain path
  (arm-cortex_a9-linux-gnueabi) Toolchain prefix
  External toolchain C library (glibc)  --->
  [*] Toolchain has C++ support?
  [ ] Use software floating point by default
System configuration  --->
  (ac100) System hostname
  (Welcome to AC100) System banner
  (tty1) Port to run a getty (login prompt) on
Filesystem images  --->
  [*] ext2 root filesystem

Kompletny, gotowy do użycia plik konfiguracyjny Buildroota umieściłem tu: buildroot.config|.

Po zbudowaniu narzędzi generowany jest plik output/images/rootfs.ext2 z obrazem systemu plików. Należy pod nazwą rootfs.img umieścić go w katalogu, z którego zostanie odczytany przez nvflash.

Można także później nagrać plik z obrazem w odpowiedniej partycji urządzenia (8).

Jest to rozwiązanie szybkie, ale niestety mało elastyczne. Wygenerowany obraz to system plików ext2, podczas gdy na przykład ext4 ma znacznie krótszy czas montowania oraz lepiej sobie radzi z wyłączeniami na skutek awarii zasilania. W dodatku zbudowane narzędzia nie dostarczają polecenia resize2fs, które umożliwiłoby zwiększenie rozmiaru systemu plików do całej dostępnej partycji.

Ponadto w przygotowanym w powyższy sposób systemie plików nie zainstalowaliśmy modułów (można to zrobić w sposób analogiczny, jak w Debianie).

Debian

Do przygotowania obrazu systemu Debian przeznaczonego do wgrania na urządzenie wykorzystamy narzędzie debootstrap.

W podobny sposób można zainstalować także inne dystrybucje: przy pomocy tego samego narzędzia - Ubuntu, przy pomocy analogicznych (na przykład febootstrap - Fedorę).

Etap I (host)

Poniższe polecenie wykona pierwszy etap instalacji w katalogu debian-ac100. Do bazowego systemu zostaną dołączone pakiety konieczne do skonfigurowania wbudowanej karty bezprzewodowej. Firmware znajduje się w sekcji non-free, więc jej użycie trzeba wymusić.

sudo debootstrap --arch=armel --foreign \
  --include=wireless-tools,wpasupplicant,firmware-ralink \
  --components=main,contrib,non-free \
  stable debian-ac100 http://ftp.pl.debian.org/debian

Pliki zajmą około 146MB. Dodatkowe pakiety zostały pobrane, ale będą rozpakowane dopiero w trakcie etapu IV.

Etap II (host) - Moduły jądra

W katalogu, w którym budowane było jądro, należy wykonać:

make INSTALL_MOD_PATH=<ścieżka do katalogu z systemem> modules_install

Na przykład:

make INSTALL_MOD_PATH=../debian-ac100 modules_install

Moduły dla jądra 2.6.37 mają rozmiar 14MB.

Etap III (host) - przygotowanie systemu plików

System zainstalowany w katalogu debian-arm powinien zostać jako obraz wybranego systemu plików (ext4) umieszczony w urządzeniu (partycja 8).

Aby skrócić czas nagrywania obrazu na urządzenie, na początek tworzę plik o rozmiarze 512MB. Po uruchomieniu i skonfigurowaniu systemu będzie można go zwiększyć do rozmiaru pełnej partycji przy pomocy narzędzia resize2fs. Tworzymy rzadki plik, który będzie obrazem, następnie system plików na nim. Montujemy obraz w katalogu roboczym i kopiujemy do niego pliki.

dd if=/dev/zero of=rootfs.img bs=1M count=1 seek=511
sudo mkfs.ext4 -m0 rootfs.img
sudo tune2fs -c0 -i0 rootfs.img
sudo mount -o loop rootfs.img /mnt
sudo cp -a debian-ac100/* /mnt
sudo umount /mnt

Przygotowany w ten sposób plik rootfs.img należy wgrać do partycji 8 urządzenia. Zostało to opisane poniżej (UWAGA! Przed nagrywaniem czegokolwiek warto wykonać kopię zapasową).

Etap IV (urządzenie) - pierwsze uruchomienie urządzenia

Podczas pierwszego uruchomienia konieczne jest dodanie do parametrów jądra:

rw init=/bin/sh

Należy w tym celu wygenerować odpowiedni obraz do wczytania przez bootloader, a następnie umieścić go w partycji 6.

Po uruchomieniu urządzenia, od razu uzyskujemy dostęp do powłoki administratora. Należy dokończyć instalację:

/debootstrap/debootstrap --second-stage

Aby później możliwe było logowanie, należy ustawić hasło administratora:

passwd root

Do instalacji oprogramowania, konieczne jest skonfigurowanie repozytoriów w pliku /etc/apt/sources.list:

deb http://ftp.pl.debian.org/debian stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free

Aby wykorzystać cały dostępny obszar partycji na dane, należy zwiększyć system plików tak, aby jego struktury wypełniały całą dostępną przestrzeń. Służy do tego polecenie resize2fs z pakietu e2fsprogs. Pozwala ono zwiększać rozmiar zamontowanego systemy plików, o ile jest on spójny (był prawidłowo odmontowany).

resize2fs /dev/mmcblk0p3

Tak spreparowany system można uruchomić normalnie (bez parametru init=). Zostanie uruchomiony program init, który wystartuje wszystkie zainstalowane usługi i umożliwi zalogowanie się (standardowo, na konsoli tty1). Po skonfigurowaniu sieci, można przystąpić do instalacji kolejnych pakietów.

Programowanie urządzenia

Kopia zapasowa

„Zbrikowaie”, czyli zmiana w bardzo drogi przycisk do papieru urządzenia zbudowanego w oparciu o współczesny procesor jest dość trudne. A na pewno nie da się tego zrobić kasując zawartość pamięci wewnętrznej.

W przypadku nieznalezienia nadającego się do uruchomienia programu, procesor przechodzi w tryb bootstrap i można go programować przez port USB. Można również ominąć standardową sekwencję bootowania i przejść od razu do trybu programowania, wciskając podczas uruchamiania urządzenia przyciski Ctrl i Esc.

W przypadku urządzenia AC100 łatwo jednak wejść w „ślepą uliczkę” jeżeli nie mamy odpowiednich plików: BCT i bootloadera. Można je pobrać z tej strony lub samemu skopiować z urządzenia. Pliki oraz tablicę partycji uzyskamy po wydaniu następujących poleceń.

nvflash --bl bootloader.bin --go
nvflash --resume --getpartitiontable partitiontable.txt
for i in 2 3 4 5 6 7 8 9 10 11 12 13; do
  sudo nvflash --resume --read $i part-$i.img
done

W przypadku niektórych wersji programu nvflash, odczyt czasem zawiesza się. Należy wtedy zrestartować urządzenie, jeszcze raz załadować bootloader (pierwsze polecenie), a następnie kontynuować od nieudanej operacji.

  • Plik BCT znajduje się w pierwszych 4080 bajtach partycji 2.
  • Bootloader zajmuje początkowe 1066kB partycji 4 (dane z mojego egzemplarza).

Po wykonaniu kopii zapasowej, można bezstresowo przystąpić do programowania urządzenia.

Po raz pierwszy

$ sudo ./nvflash --bct ac100.bct --setbct --configfile linux.cfg --create --bl bootloader.bin --go
Nvflash started
rcm version 0X20001
System Information:
   chip name: t20
   chip id: 0x20 major: 1 minor: 2
   chip sku: 0x8
   chip uid: 0x161c11034260e057
   macrovision: disabled
   hdcp: enabled
   sbk burned: false
   dk burned: false
   boot device: emmc
   operating mode: 3
   device config strap: 1
   device config fuse: 0
   sdram config strap: 1

sending file: ac100.bct
- 4080/4080 bytes sent
ac100.bct sent successfully
downloading bootloader -- load address: 0x108000 entry point: 0x108000
sending file: bootloader.bin
/ 779268/779268 bytes sent
bootloader.bin sent successfully
waiting for bootloader to initialize
bootloader downloaded successfully
setting device: 2 3
creating partition: BCT
creating partition: PT
creating partition: EBT
creating partition: MBR
creating partition: LNX
creating partition: APP
Formatting partition 2 BCT please wait.. done!
Formatting partition 3 PT please wait.. done!
Formatting partition 4 EBT please wait.. done!
Formatting partition 5 MBR please wait.. done!
Formatting partition 6 LNX please wait.. done!
Formatting partition 7 APP please wait.. done!
done!
sending file: ac100-bootloader.bin
- 1091584/1091584 bytes sent
ac100-bootloader.bin sent successfully
sending file: linux.img
\ 2967552/2967552 bytes sent
linux.img sent successfully

Kolejne

Kompletne inicjowanie urządzenia, wgrywanie nowej tablicy partycji i bootloadera, konieczne jest tylko za pierwszym razem. Później do nagrywania nowych wersji jądra i obrazów głównego systemu plików, wystarczy załadować bootloader a następnie nagrać pliki w odpowiednich miejscach:

Bootloader (który uruchamia się w RAM-ie i przyjmuje polecenia):

$ sudo ./nvflash --bl bootloader.bin --go
Nvflash started
rcm version 0X20001
System Information:
   chip name: t20
   chip id: 0x20 major: 1 minor: 2
   chip sku: 0x8
   chip uid: 0x161c11034260e057
   macrovision: disabled
   hdcp: enabled
   sbk burned: false
   dk burned: false
   boot device: emmc
   operating mode: 3
   device config strap: 1
   device config fuse: 0
   sdram config strap: 1

downloading bootloader -- load address: 0x108000 entry point: 0x108000
sending file: bootloader.bin
/ 779268/779268 bytes sent
bootloader.bin sent successfully
waiting for bootloader to initialize
bootloader downloaded successfully

Jądro:

$ sudo ./nvflash --resume --download 6 linux.img 
Nvflash started
[resume mode]
sending file: linux.img
\ 2967552/2967552 bytes sent
/home/atmel/linux.img sent successfully

I odpowiednio obraz głównego systemu plików:

$ sudo ./nvflash --resume --download 8 rootfs.img 

Z poziomu działającego systemu

Jądro 2.6.38 skonfigurowane w opisany powyżej sposób, daje dostęp do obu partycji wczytywanych przy starcie przez bootloader: jadra głównego i zapasowego. Można więc nagrywać nowe wersje obrazów do uruchomienia, przy pomocy narzędzia dd.

Instalacja Debiana - checklista

Opis tego, jak zainstalować system Debian GNU/Linux na urządzeniu. Procedura dla ludzi, którzy lubią eksperymentować i chcą się czegoś nauczyć. Istnieją prostsze metody zainstalowania systemu (na przykład w Internecie można znaleźć obrazy dystrybucji Ubuntu, gotowe do wgrania do odpowiednich partycji urządzenia).

  • Skompiluj jądro.
  • Stwórz plik linux.img zawierający jądro i parametry.
./mkbootimg --kernel marvin24s-kernel/arch/arm/boot/zImage --ramdisk /dev/null --cmdline 'mem=448M@0M
lp0_vec=0x2000@0x1c29e000 tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 root=/dev/mmcblk0p3
console=tty1 rootwait rw init=/bin/sh' -o linux.img
  • Umieść plik linux.img w partycji 6:
sudo ./nvflash --bl bootloader.bin --go
sudo ./nvflash --resume --download 6 linux.img
  • Stwórz główny system plików: zainstaluj system bazowy (Etap I), dodaj moduły (Etap II) i stwórz obraz systemu (Etap

III)

  • Umieść obraz systemu w partycji 8.
sudo ./nvflash --bl bootloader.bin --go
sudo ./nvflash --resume --download 8 rootfs.img
  • Uruchom system. Po zainicjowaniu jądra, zostanie uruchomiona powłoka root-a (odpowiada za to parametr init=…).
  • Wykonaj Etap IV instalacji:
/debootstrap/debootstrap --second-stage
  • Ustaw hasło administratora.
passwd root
  • Stwórz drugą wersję obrazu jądra: linux.img (bez parametru init=…).
./mkbootimg --kernel marvin24s-kernel/arch/arm/boot/zImage --ramdisk /dev/null --cmdline 'mem=448M@0M
lp0_vec=0x2000@0x1c29e000 tegrapart=recovery:300:a00:800,boot:d00:1000:800,mbr:1d00:200:800 root=/dev/mmcblk0p3
console=tty1 rootwait' -o linux.img
  • Umieść obraz jądra w partycji 6.
sudo ./nvflash --bl bootloader.bin --go
sudo ./nvflash --resume --download 6 linux.img
  • Włącz urządzenie, zaloguj się jako root i korzystaj z Debiana!
  • Należy jeszcze skonfigurować sieć, menadżera pakietów i zainstalować dodatkowe programy (na przykład środowisko graficzne).
ostatnio zmienione: 2012/08/19 21:50