CubieTruck einrichten - Rootfs auf SSD installieren [CUBIAN][Nicht gelöst]

Begonnen von sweetie-pie, 09 Mai 2014, 21:37:23

Vorheriges Thema - Nächstes Thema

sweetie-pie

Hallo,

ich möchte meine fhem-Installation auf ein CubieTruck migrieren.
Dazu habe ich eine 64GB SSD am SATA-Port.
Das CT kann bekanntlich nicht direkt vom SATA-Drive booten.
Ich beabsichtige vom NAND zu booten und das rootFS auf der SSD zu lagern.
Das ist mir bisher nicht gelungen.

Ich schaffe zwar den Kernel von SD zu booten und dann die SSD als rootfs zu verwenden.
Auch kann ich vom Nand-Booten, aber dann verwendet die Installation immer nandc als rootfs.

Hat jemand mal einen Link, wo der Boot-Prozess vom CT vernünftig beschrieben ist?

Was ich bisher getand habe:

  • cubian Image auf SD-Card.
  • Booten, alles einrichten.
  • cubie-nandinstall
  • sd-karte raus, von nand booten.
  • SSD ran, partitioniert.
  • rootfs von nandc nach sda1 mit rsync kopiert.
  • auf nanda die Datei uEnv.txt angepasst: "root=/dev/sda1"
-> Beim Booten wird als rootfs aber weiterhin nandc als rootfs verwendet.

"cat /proc/cmdline" liefert aber auch nand1

Hat das hier jemand in der Konfig überhaupt schon hinbekommen?

Danke & Gruß
  Holger

marvin78

Hier gibt es, wenn ich das grob richtig überblicke, eine funktionierende Anleitung für das Verschieben des rootfs.

http://www.maffert.net/cubian-von-microsd-installation-nach-ssd-hdd-festplatte/

Funktioniert so auch vom Nand auf SSD.

sweetie-pie

Ja, die Anleitung kenne ich, funktioniert so leider nicht für nand.  :-\
Im Prinzip bin auch so vorgegangen, nur dass ich nicht mit dd kopiert habe sondern mit rsync.

Das Problem liegt vermutlich im Bootprozess, der sich wohl zwischen Nand und SD unterscheidet.
Das legt auch das Skript cubian-nandinstall.sh nahe. Es kommt mit dem Paket ein Bootloader (zu finden in /usr/lib/cubian-nandinstall).
Beim NAND-Boot wird m.E. die Datei uEnv.txt ignoriert.

Ich kenne mich mit embedded-Systemen nicht so aus, vermute aber dass ich hier irgendwie auf die serielle Schnittstelle muss um diesen u-boot zu bearbeiten?
Kann man denn nicht nicht die cmdline auch ohne serielle Konsole ändern?

betateilchen

Du kannst dd nicht einfach durch rsync ersetzen. Das eine kopiert physikalisch Datenblöcke, das andere kopiert Dateien.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

sweetie-pie

Das ist mir schon klar... soviel verstehe ich auch von Linux.  ;)

dd ist dann von Interesse wenn du z.B. nicht nur logische Daten kopieren möchtestes, z.B. den mbr.
Der liegt aber definitiv nicht in einer mit ext4-formatierten Partition, von daher ist der Weg mir rsync auch okay und birgt den Vorteil das evtl. Fragmentierungen von der SD nicht auf die SSD gleich wieder übertragen werden.

Aber das ist hier definitiv nicht das Problem, das eigentliche rootfs läuft.
Es führen ja bekanntlich viele Wege nach Rom....

marvin78

Also ich habe es so wie in der Anleitung (oder ganz ähnlich) auch vom nand auf ssd durchgeführt und das läuft einwandfrei. Der Eintrag in die uEnv.txt muss natürlich angepasst werden. Der Unterschied war, dass es kein Cubian (uEnv.text liegt im Verzeichnis boot) sondern ein Cubieez ist. Dabei liegt die UEnv.txt (sowie script.bin etc) auf nanda, während das Filesystem auf nandb liegt, wenn ich mich recht erinnere.

sweetie-pie

Ja, das Problem scheint Cubian und der mitgelieferte Bootloader für das Nand zu sein...

Ich habe mir jetzt mal ein serielles Kabel gebastelt und hänge am ttyS0.
Da ich wie oben beschrieben mit cubian-nandinstall.sh zunächst die Installation von SD ins NAND verschoben habe, wurde bei der Installtion ein anderer Bootloader ins nand kopiert, und dieser ignoriert anscheinend die uEnv.txt:

U-Boot 2011.09-rc1-00000-gf75abad (Aug 15 2013 - 08:47:58) Allwinner Technology

CPU:   SUNXI Family
Board: SUN7I-EVB
DRAM:  2 GiB
NAND:  NB1 : enter NFB_Init
[NAND] nand driver(b) version: 0x2, 0x12, data: 20130526
[NAND] set nand_good_block_ratio 912
NB1 : nand phy init ok
nand part 2048 sec count is not align
nand part 2048 start sec is not align
nand part 512 sec count is not align
nand part 2560 start sec is not align
nand part 5632 sec count is not align
NB1 : init ok
3200 MiB
Using default environment

In:    serial
Out:   serial
Err:   serial
--------fastboot partitions--------
-total partitions:3-
-name-        -start-       -size-     
bootloader  : 8000          800         
boot        : 8800          200         
linux       : 8a00          637600     
-----------------------------------
no misc partition is found
Hit any key to stop autoboot:  0


Unterbricht man über die Serielle nun den Bootprozess und guckt sich mal die Bootparameter an:

sun7i#printenv
baudrate=115200
boot_fastboot=fastboot
boot_normal=bootm 48000000
boot_recovery=sunxi_flash read 40007800 recovery;boota 40007800
bootcmd=run setargs_nand boot_normal
bootdelay=1
bootenv=/uEnv.txt
console=ttyS0,115200
kernel=/uImage
kerneladdr=0x48000000
loadbootenv=mw 41000000 0 10000;ext4load nand 2:0 $scriptaddr /boot${bootenv} || fatload nand 0:0 $scriptaddr ${bootenv};env import 41000000 10000;setenv bootargs console=${console} root=${nand_root} loglevel=${loglevel} ${extraargs}
loadkernel=ext4load nand 2:0 $kerneladdr /boot${kernel} || fatload nand 0:0 $kerneladdr ${kernel}
loadscriptbin=ext4load nand 2:0 $scriptbinaddr /boot${scriptbin} || fatload nand 0:0 $scriptbinaddr ${scriptbin}
loglevel=8
nand_root=/dev/nand3
partitions=bootloader@nanda:boot@nandb:linux@nandc
scriptaddr=0x41000000
scriptbin=/script.bin
scriptbinaddr=0x43000000
setargs_nand=run loadbootenv loadscriptbin loadkernel setmachid
setmachid=setenv machid 10bb
stderr=serial
stdin=serial
stdout=serial

Environment size: 1035/131068 bytes

Und ändert das RootFS testweise per Hand

sun7i#env set nand_root /dev/sda1

Und bootet testweise...

sun7i#boot

Dann loggt man sich ein und prüft das Ergebnis:
root@Cubian:/home/cubie# cat /proc/cmdline
console=ttyS0,115200 root=/dev/sda1 loglevel=8
root@Cubian:/home/cubie# df -h
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
rootfs           56G    1,5G   52G    3% /
/dev/root        56G    1,5G   52G    3% /
devtmpfs        887M       0  887M    0% /dev
tmpfs           197M    192K  197M    1% /run
tmpfs           5,0M       0  5,0M    0% /run/lock
tmpfs           394M       0  394M    0% /run/shm

Siehe da es geht...

Probiere ich jetzt aber in uBoot die geänderten Variablen zu speichern, erhalte ich zwar keine direkte Fehlermeldung, aber es geht irgendwie nicht:
sun7i#env save
env - environment handling commands

Usage:
env default -f - reset default environment
env export [-t | -b | -c] addr [size] - export environment
env import [-d] [-t | -b | -c] addr [size] - import environment
env print [name ...] - print environment
env run var [...] - run commands in an environment variable
env save - save environment
env set [-f] name [arg ...]


@marvin78:
Weißt du welche uBoot-Version du nutzt? Scheinbar ist die mit Cubian geliefere Version recht alt...

marvin78

Was für Variablen änderst du denn in u-boot? Cubian hat doch eigentlich kein u-boot.bin File

https://github.com/cubieplayer/Cubian/issues/184

sweetie-pie

Nach meinem Verständnis ein klares Jein:  ;)

Wenn Du die SD-Karte hast, findest Du kein u-boot.bin, der liegt vor der ersten Partition, im Bootsektor der SD-Karte, genau wie z.B. grub oder der Windows-Bootloader.
Im Dateisystem der Partition des SD-Karte wirst du demnach kein u-boot.bin finden.

Wenn Du von Nand bootest liegt der Bootlader in /dev/nanda
Mountest Du z.B. /dev/nanda siehst du in /linux die Datei u-boot.bin
Dabei hat der Bootloader einen Bereich im Flash, wo er seine Konfiguration (enviroment) abspeichert.
Diese kann man, wenn man den Bootloader unterbricht (geht über die serielle Schnittstelle auf dem Cubie-Board) verändern, ähnlich wie bei grub.
Diese Parameter habe ich angepasst (geht m.E. nur über das serielle Terminal, was ja eine meiner Eingangsfragen war).

Der Bootprozess vom A20 ist hier ganz gut beschrieben: http://linux-sunxi.org/BROM
Vergleichbar mit der Firmware im Bios eines normalen PCs hat das Cubie ein BROM (integrated non-replaceable 32 KiB ROM chip (Boot ROM or BROM) mit  dem primären Programm-Lader.
Dieser lädt dann in Abhängigkeit von der FEL-Taste weiteren Code nach.
Ist FEL gedrückt, geht das Cubie-Board in den FEL-Modus, mehr hier: http://linux-sunxi.org/FEL/USBBoot

Ist FEL nicht gedrückt, gilt laut Beschreibung folgende Bootreihenfolge:

  • SD Card also known as MMC0
  • Internal NAND flash also known as NAND
  • SD Card2 also known as MMC2
  • SPI connected NOR flash also known as SPI
  • Wenn alles fehl schlägt geht das Board auch in den FEL/USB Boot, als wenn die FEL-Taste gedrückt wäre

Von dem entsprechenden Medium wird nun der Bootlader u-boot geladen. Dieser ist (zumindest bei Cubian) unterschiedlich ob SDKarte oder NAND-Installation.
Version SD-Karte:
U-Boot 2014.01-rc1-09161-g108ec3f (Jan 20 2014 - 05:50:52) Allwinner Technology
Version Nand:
U-Boot 2011.09-rc1-00000-gf75abad (Aug 15 2013 - 08:47:58) Allwinner Technology
Die alte Version (Nand) schein wohl ein Bug zu haben und speichert die Umgebungsvariablen nicht. Hier hat jemand ein ähnliches Problem: http://www.cubieforums.com/index.php?topic=656.75

@marvin78:
Kannst Du mir mal deine Dateien aus /dev/nanda per PM senden?
dd if=/dev/nanda of=nanda.bin

Ansonsten komme ich zum Schluss, Cubian mit rootfs auf SATA-Disk geht nur wenn von SD gebootet wird..
. (ohne besondere Klimmzüge)



marvin78

Eine nanda.bin hätte bei Cubieez 64 MB. Die kann ich nicht schicken, mal ganz abgesehen davon, dass ich ohnehin keine Dateien per PN versenden kann. Die u-boot.bin kannste haben. Ob sie dir hilft....


sweetie-pie

Danke für die Datei... hat leider auch nicht geklappt.

Ich habe jetzt, auch wenn ich mich ungern geschlagen gebe, das Image gewechselt.
Ich nutze nun http://www.igorpecovnik.com/2013/12/24/cubietruck-debian-wheezy-sd-card-image/.

Damit hat es auf Anhieb geklappt, nur dass ich die ganze Einrichtung wieder von vorne erledigen musste...  :(

Bleibt festzuhalten:

  • Ich habe heute viel über den Bootprozess vom Cubietruck gelernt
  • Cubian lässt sich nicht von Nand in Kombination SATA booten...

Schönen Samstag noch
   Holger

Charity

Ich hab es auch mit allen möglichen Anleitungen nicht geschafft das RootFs auf die SATA Disk zu schieben.
Egal welches Image ich verwendet habe.

Meine Alternativ Lösung, war für die Ordner /opt /var /tmp jeweils ext4 Partitionen zu erstellen und die Ordner auf die Partitionen zu mounten.


epsrw1

Ich habe keine Ahnung, aber davon wenigstens ganz viel

Franz Tenbrock

Hallo
aufgrund der Tatsache das die Fritte wohl demnächst nicht mehr geht ?! muss man sich ja mit Alternativen beschäftigen.
Leider steht nichts im Wiki
Das ist super schade da der eine oder andere wenn er keine Anleitung findet hier wohl Fragen stellen wird.

Ich hab auch schon mal einen Wiki Eintrag geschrieben und es ist wirlich einfach.

Es würde doch schon mal reichen dort ein paar Infos für die Hardeware ( unterschiedlcihe Versionen etc ) zusammenzutragen.
Man braucht leider immer Stunden um sich durch den Wust im Forum zu lesen und für die die hier immer geduldig antworten ( 1000 Dank ) wäre es doch auch sicher weniger Arbeit

Nur so mal als Anregung.

Beagle bone wohl nicht zu bekommen, Raspi große Probleme mit USB
etc
Der Umstieg ist nicht einfach, da sicher die meisten Fritten von Linux Analphabeten sind.

Ist doch einfach super was hier auf die Beine gestellt wurde, mit dem einen oder anderen Wiki Artikel wäre es gerade für Anfänger noch viel einfacher.
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

epsrw1

Hallo Frank,
Deine Idee ist prima. Ich mag gerne unterstützen mit technischen antworten für denjenigen der sich die Mühe machen würde das im Wiki zu schreiben und mit den dortigen admin Sonderwünschen klarkommt.
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel