Beiträge von 3141card_

    Hab gesehen, dass es gestern jemand hier gebraucht hat.


    Vor zwei Wochen habe ich die bisher fehlende Unterstützung für Festplatten von Fat PS3's mit NOR flash hinzugefügt.


    https://mega.nz/#!qckCQBZa!VmCqnuo2peXR1MGtfHfiFnWp809iVKhueVJh06d46PA


    Der Rest bleibt wie es ist:


    1. Die PS3 Festplatte nicht unter Windows initialisieren! Einfach nein klicken wenn Windows danach fragt, oder Ihr zerstört die PS3 Partitionstabelle.


    2. Das Programm als Administrator ausführen, sonst gibt's unter Windows keinen raw Zugriff auf die Festplatte und sie kann nicht gefunden werden.


    3. Keine Garantie das es funktioniert. Wenn die Festplatte wirklich defekt ist (unlesbare Sektoren, ein beschädigtes Dateisystem) kann man nichts machen.

    @Freak13


    Das sieht mir jetzt aber nicht danach aus, als würdest du dich nicht mehr mit PS3-Linux beschäftigen.

    Das hat nix mit Ahnung zu tun, und die linux API is einfach zu verstehen und es gibt auch genug Erklärungen im Netz. ;)


    Nachdem wir das ja jetzt suchen mussten wie irre würde mich mal interessieren, wie das "Rebug" macht? Also muss GameOS ja Zugriff auf die Sensoren geben, OtherOS/OtherOS++ aber nicht?


    Noch mal zum Verständnis, ich glaub du siehst das mit dem linux hier falsch.


    Wenn die PS3 startet entschlüsselt lv0 die Komponenten(lv1_kernel, lv2_kernel, EID usw) dann wird der lv1_kernel gestartet.
    Im Speicher bleibt vom lv0 eine Liste mit den entschlüsselten Komponenten zurück und natürlich die Komponenten selbst.


    Jetzt startet "ein" guestOS das virtuell auf dem "echten" kernel, dem lv1, läuft. Dieses guestOS hat als Verbindung zum lv1
    nur die beschränkten Möglichkeiten die zugelassen werden: das GOPI(Guest Os Process Interface, aka hv_syscalls).
    Die virtuellen UARTs die man einrichten kann:
    port 0(avsetup, audio video, z.B. HDMI Kram, RSX Audio Kram, ... Sachen abfragen aber auch setzen können),
    port 2(system manager)


    In der "normalen" Konfiguration(XMB, spielen...) läuft der lv2_kernel als guestOS. Ein "zweiter" kernel. Auf
    dem läuft der vsh Prozess, entweder aleine(XMB) oder "minimiert" neben einem Spiel. So wie der lv1_kernel seinem
    guestOS Prozess ein interface zur Verfügung stellt(stellen muss, sonst läuft ja nix), stellt der lv2_kernel seinen
    Prozessen(vsh, game) auch eines, die lv2_syscalls. Der lv2_kernel richtet auch die vuarts ein die gebraucht werden,
    0(avsetup), 2(systemmanager), 10(ss_multiplexer, hat mit der ganzen decrypt scheisse zu tun, piracy interessiert mich nicht)


    Eine zweite Möglichkeit ist die PS2 Emulation. Basierend auf der Hardware(BC/semi-BC/keine PS2 hardware) läuft als
    GuestOS z.B. der ps2_gxemu oder der ps2_netemu. Auch hier als interface die hv_syscalls. Auch hier müssen die vuart
    ports 0(avsetup) und 2(system manager) eingerichtet werden damit sie benutzt werden können.


    Dritte Möglichkeit linux als GuestOS. KEIN UNTERSCHIED, hv_calls als GOPI, vuart port 0 und 2 sind hier die linux kernel module
    die du in ps3-linux-4.11/drivers/ps3/ hast. Und die können nur das was sie können, wenn Temperatur Abfragen fehlt, muss
    es hinzugeschrieben werden. Aber hier gibt es wenigstens einen source code, rate mal wie lustig es war die temp Anzeige in
    den ps2_netemu zu zaubern. Den source code des ps2_netemu werde ich niemals zu sehen bekommen.



    Wenn ich ein Tool mit z.B. psl1ght schreibe, wie damals das PS3 Temp Tool, dann ist das wie die Toolbox ein lv2(gameOS)_process.
    Mit dem lv2_syscall nr 383 sys_game_get_temperature() fragt man hier die temps ab. Der syscall im lv2_kernel bekommt sie intern
    über vuart port 2(system manager), abgefragt mit hv_call lv1_vuart_write(), Antwort mit lv1_vuart_read(). Du verstehst... ;)


    Wenn du dem linux kernel modul für den system manager die Temperatur Abfrage hinzufügst, ist es so wie mit lv2_syscall nr 383 sys_game_get_temperature() im lv2_kernel.


    Code
    guestOS:        Methode:                             Programm/Prozess das auf dem GuestOS kernel läuft und es nutzt:
    lv2_kernel      lv2_sc: sys_game_get_temperature()   PS3 Temp Tool/Toolbox/MultiMan/...
    linux(kernel)   must du schreiben                    lm-sensors/xsensor/psensors/pwmconfig/...


    Unter der Haube, im lv1 kernel ist es immer das selbe. Und hier z.B. werden Anfragen an den system manager zu Anfragen der syscon, noch ne Ebene tiefer, hehehe.
    Vorher wird nur noch gecheckt ob das guestOS(die LPAR) die Erlaubnis hat es zu tun. Mit dem Toolbox lv1 patches kannst du alle sm Sachen für OtherOS++ "freischalten".


    Und was die Lüfter Regelung angeht, die wird über die gegenwärtige Fan policy automatisch gesteuert. Wenn du in lv2(gameOS) z.B. 'ne eigene mit webman festlegst, dann gilt die auch in linux.
    Den Kram könnte man dem linux system manager natürlich auch noch hinzufügen.

    Also ich sehe nix neues in: ps3-linux-4.11/drivers/ps3/ps3-sys-manager.c


    Dem module bekannte service IDs sind:

    Code
    enum ps3_sys_manager_service_id {
    	/* version 1 */
    	PS3_SM_SERVICE_ID_REQUEST = 1,
    	PS3_SM_SERVICE_ID_RESPONSE = 2,
    	PS3_SM_SERVICE_ID_COMMAND = 3,
    	PS3_SM_SERVICE_ID_EXTERN_EVENT = 4,
    	PS3_SM_SERVICE_ID_SET_NEXT_OP = 5,
    	PS3_SM_SERVICE_ID_REQUEST_ERROR = 6,
    	PS3_SM_SERVICE_ID_SET_ATTR = 8,
    };


    Es gibt aber 61 service IDs im system-manager und die sid zum Temperatur abzufragen ist 13, die zugehörige resonse(Antwort) sid ist 14.
    Wenn ich dieses "Namensschema" für die enums in meinem letzten system_manager reversing fortführe:
    [Blockierte Grafik: http://i.imgur.com/sfM5gsH.png]


    Man müsste also erst mal die beiden neuen hinzufügen:

    Code
    PS3_SM_SERVICE_ID_TEMPERATURE = 13,
      PS3_SM_SERVICE_ID_RESPONSE_TEMPERATURE = 14,


    In ps3_sys_manager_write() zum "senden" von request packets an den system manager hast du folgendes:

    Code
    BUG_ON(header->version != 1);
    	BUG_ON(header->size != 16);
    	BUG_ON(header->payload_size != 8 && header->payload_size != 16);
    	BUG_ON(header->service_id > 8);


    Die version und die header_size sind immer 1 und 16, also ok. Aber BUG_ON() bei einer sid > 8, so wird kein header mit sid 13 durchgelassen.
    Ich würde es quick&dirty auf > 61(max) setzen. Die request(Anfrage) payload_size für den get_temperature header ist 8 byte, verursacht also kein Problem.


    Dann braucht es noch die neue Funktion, benutze z.B. eine andere wie ps3_sys_manager_send_attr() als Vorlage:



    Jetzt bearbeitet der system manager im lv1 unseren request(Anfrage)...
    Die response(Antwort) messages, die vom system manager kommen, handelt die Funktion ps3_sys_manager_handle_msg().
    Das ist so was wie ein übergeordneter handler, der dann die verschiedenen Typen von responses zum zugehöhrigen
    handler weiterleitet.


    Hier brauchst du einen neuen case im switch, falls ein response mit sid 14 reinkommt, also das Antwortpaket mit der Temperatur die du abgefragt hast.

    Der Haupt-handler(First stage msg handler) hier sollte nicht mit code zugemüllt werden, er sollte nur weiterleiten.



    Ein Programm wie lm-sensors muss ps3_sys_manager_get_tempature() ausführen um an die Temp's von CELL und RSX zu kommen,
    einen anderen Weg gibt es nicht. Der handler ps3_sys_manager_handle_temperature_request() muss die Temperatur an lm-sensors zurückgeben.


    Ansonsten kann ich dir nur noch das layout des response payloads sagen:

    Code
    struct payload {
      u8 version;            // 0x00: version, immer 1
      u8 tzone;              // 0x01: die nach der wir gefragt hatten, 0(CELL) oder 1(RSX)
      u8 status;             // 0x02: 0 = OK, wenn nicht ging was vor den baum
      u8 pad_0;              // 0x03: padding
      u8 temp_0;             // 0x04: die "ganzzahl", z.B. 49 °C
      u8 temp_1;             // 0x05: nachkommastelle, siehe devwiki lv2 syscalls zum berechnen
      u16 pad_1;             // 0x06: padding
    };


    Viel weiter kann ich dir nicht helfen, ich finde es gut wenn sich noch Leute für linux auf PS3 interessieren, aber für mich ist es nicht mehr interessant. :)

    Nice, wenn man wegen der bekloppten Hitze nicht zum pennen kommt und einem langweilig ist...
    Ich hab eben mal die vmlinux.elf aus dem letzten Red Ribbon durch IDA gejagt.
    Dann nach hv-calls gesucht, lv1_vuart_write(), hat mich zu einer Funktion namens ps3_sys_manager_write() geführt.
    Also die Funktion gegoogelt und die Seite hier mit den PS3 linux drivern gefunden.


    https://code.woboq.org/linux/l…tml#ps3_sys_manager_write


    Wie man sieht gibt's hier keinen call wie ps3_sm_get_temperature() im Modul. Man muss ihn also schreiben, ist einfach,
    (service_id, payload und seine size, wo im response liegen die temp Werte... alles bekannt)
    und einen kernel kompilieren der dann eben auch diese Funktion in der API hat.
    Dann müssen die von dir oben gennanten Tools erweitert werden, damit man sie für PS3 PPC64 configure'n und
    kompilieren kann. Läuft halt auf der PS3 als guest-OS(VM) mit dem system manager anders als bei "normaler" PC hardware.

    Alles und immer läuft über hypervisor, egal ob der lv2_kernel, einer der ps2_emus oder ein linux.
    Alles ist ein guest-OS das auf dem lv1_kernel läuft und als abgesichertes/virtuallisiertes interface zum lv1 nur die hypervisor-syscalls hat.
    Das wird sich auch nicht ändern, außer jemand schreibt 'ne Firmware wo dann z.B. ein linux direkt auf der hardware läuft.


    Ich interessiere mich nicht mehr für linux auf der PS3 und hab seit Jahren kein linux mehr auf PS3 laufen.


    Im lv1 gibt es den Virtuellen UART, port 2, den system manager. Über Kommunikation mit den Servern im lv1 werden Sachen wie start/shutdown,
    LEDs abfragen und ansteuern, der system buzzer und 'ne Menge andere Sachen erledigt.
    Auch die Temperaturen werden so abgefragt und der Lüfter kann auch angesteuert werden.


    Vielleicht lassen sich die von dir gennanten Tools anpassen. Der linux kernel selbst muss ja auch irgendwie mit dem system manager arbeiten, ansonsten würde gar nix laufen.
    Oder man könnte versuchen herrausbekommen wo die RX/TX buffer für vuart_2 sind, dann kannst du mit lv1_vuart_write() Anfragen im richtigen Packetformat über den TX
    senden und die results über den RX bekommen. Kurz gesagt. Es ist natürlich mehr dazu nötig, z.B. auf Synchronisierung achten und was sonst noch anfällt.

    @SeriousJackson


    Was genau meinst du mit funktioniert nicht? Richtig ausgewechselt(dev_blind)? Das fertige self file für 4.81? Selber für eine andere firmware gesigned, oder gibts eine Fehlermeldung beim starten?...


    Um's noch mal klar zu stellen. Es geht um den ps2_netemu das Ding für die PS2 Classics, nicht den ps2_emu oder den ps2_gxemu. Für die beiden hab ich nix und sie unterscheiden sich auch im code zu stark von einander, vor allem was das menu_frame_work angeht.


    Wenn es der gepatchte netemu ist der läuft dann funzt es auch. Der hinzugefügte Kram nutzt nur die API die auch im emu vorhanden ist.

    Ist von mir, ich hab zeco gebeten es hochzuladen weil ich keinen sony content sharen will. ;)
    Und als .elf file damit es jeder für seine firmeware selber signen kann. Ich benutze die gleiche Datei unter Rebug 4.46.


    Es is ein gimmick. Vor ein paar Monaten hat hier mal wer danach gefragt, deshalb die Idee.

    Das Projekt hier, und auch AlexAltea's nucleus, sind leider ziemlich unbeachtet. Kann mich nur an 2 news erinnern, die zweite vor über 'nem Jahr als das erste kommerzielle Game lief. Es ist 100% kein fake auch wenn es noch weit entfernt von nutzbar ist. Vor über 'nem Jahr hab ich z.B. die gcm library, rsx syscalls usw für AlexAltea und den RPC3 reverst. Wenns in Jahren mal brauchbare PS3 PC Emus gibt, die beiden hier sind die Top-Kandidaten. Ich find die Teile jedenfalls sau interesant und die beteiligten dev's haben echt Ahnung und leisten super Arbeit.

    @ripl


    Danke für den link.


    @MixeryM@xe


    Zitat

    ...geändert/verbessert(?).


    Wegen dem shutdown/reboot yup, da ich keine plugins wie webman benutze und auch nicht spiele
    hab ich das nicht bemerkt. Dann packt er seine png+font.png mit in die binary, dass mach ich halt nicht
    weil ich die prx nicht größer machen will. Wenn die png als segment mitgeladen wird verbraucht sie
    kernel-space, wenn sie von einer externen Datei geladen wird nicht, dann braucht's nur den code zum
    laden(der ist klein) und RAM um sie zu laden/decoden(gibts mehr als genug im XMB).
    Er kann so besser arbeiten, ist OK. :)


    Aber wie anders es schon aussieht, wenn man nur eine Hintergrundbild benutzt, anstelle des einfarbigen
    background den ich im sample benutze. Und du hast ja die samples gesehen dir ich dir geschickt hab,
    Animation usw, is ne Menge möglich.