[#1] dysk.device - szukam MINIMALNEGO przykładu
Od kilku dni próbuję napisać sterownik dysku.
Co bym nie robił to nic się nie pojawia (mount xxx:).
Nie widać go ani w hdtoolboxie, ani w sysinfo.

#include <exec/errors.h>
#include <exec/memory.h>
#include <devices/trackdisk.h>

struct ExecBase* SysBase;

const char DevName[]="mntsd.device";
const char DevIdString[]="mntsd 1.0 (28 Feb 2018)";

const UWORD DevVersion=1;
const UWORD DevRevision=0;

#include "stabs.h"

int __UserDevInit(struct Device* dev)
{
  return 1;
}

int __UserDevCleanup(void)
{
  return 0;
}

int __UserDevOpen(struct IORequest *io, ULONG unitnum, ULONG flags)
{
  io->io_Error = 0;
  return 0;
}

int __UserDevClose(struct IORequest *io)
{
  return 0;
}

ADDTABL_1(__BeginIO,a1);
void __BeginIO(struct IOStdReq *iostd) {
  unsigned int err = IOERR_NOCMD;
  unsigned int offset;
  struct DriveGeometry *geo;

  switch (iostd->io_Command) {
  case CMD_RESET:
  case CMD_UPDATE:
  case CMD_CLEAR:
  case CMD_STOP:
  case CMD_START:
  case CMD_FLUSH:
  case TD_MOTOR:
  case TD_SEEK:
  case TD_REMOVE:
  case TD_CHANGENUM:
  case TD_CHANGESTATE:
  case TD_PROTSTATUS:
  case TD_ADDCHANGEINT:
  case TD_REMCHANGEINT:
    iostd->io_Actual = 0;
    err = 0;
    break;
  case TD_GETDRIVETYPE:
    iostd->io_Actual = DG_DIRECT_ACCESS;
    err = 0;
    break;
  case TD_GETGEOMETRY:
    geo = (struct DriveGeometry *)iostd->io_Data;
    geo->dg_SectorSize = 512;
    geo->dg_TotalSectors = 22;
    geo->dg_Cylinders = 80;
    geo->dg_CylSectors = 44;
    geo->dg_Heads = 2;
    geo->dg_TrackSectors = 22;
    geo->dg_BufMemType = MEMF_PUBLIC;
    geo->dg_DeviceType = DG_DIRECT_ACCESS;
    geo->dg_Flags = DGF_REMOVABLE;
    err = 0;
    break;
  case TD_FORMAT:
  case CMD_WRITE:
    offset  = iostd->io_Offset;
    iostd->io_Actual = iostd->io_Length;
    err = 0;//SD_ReadWrite(sdu, io, offset, 1);
    break;
  case CMD_READ:
    offset  = iostd->io_Offset;
    iostd->io_Actual = iostd->io_Length;
    err = 0;//SD_ReadWrite(sdu, io, offset, 0);
    break;
  default:
    kprintf("Unknown IO command: %ld\n", iostd->io_Command);
    err = IOERR_NOCMD;
    break;
  }

  iostd->io_Error = err;
  
  if (!(iostd->io_Flags & IOF_QUICK)) {
    // ReplyMsg does this: io->io_Message.mn_Node.ln_Type = NT_REPLYMSG;
    ReplyMsg(&iostd->io_Message);
  }
}

ADDTABL_1(__AbortIO,a1);
void __AbortIO(struct IORequest* io) {
	if (!io) return;
	io->io_Error = IOERR_ABORTED;
}

ADDTABL_END();
[#2] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #1

Nie znam się na programowaniu ale zerknij na to być może znajdziesz tam coś z czego można zrobić użytek
[#3] Re: dysk.device - szukam MINIMALNEGO przykładu

@lukzer, post #2

Robiłem na podstawie tego:
https://github.com/mntmn/amiga2000-gfxcard/tree/master/drivers/sdcard

Nie wiem..., mount niby coś montuje bo drugi raz się nie da, ale nic nie widać.
[#4] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #3

Pewnie nie pomoge zawiele ale z tego co wiem samo mount nie wystarczy.
Jesli wpisales to z Shella to poniej jeszcze trzeba wykonac jakas instrukcje ktora odniesie sie
do tego urzadzenia np: cd albo dir.
[#5] Re: dysk.device - szukam MINIMALNEGO przykładu

@Phibrizzo, post #4

To też robiłem. Dostaję "object not found".
[#6] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #1

Może źle to rozumiem.. znam się trochę na sprzęcie ... a o pisaniu sterowników nie mam pojęcia.. ale czy sterownik nie musi odnosić się do sprzętu ? np. jakiegoś adresu pod którym znajduje się dane urządzenie ?
[#7] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #5

//SD_ReadWrite(sdu, io, offset, 1); musiałoby jakieś dane zwracać i może wówczas pokaże się ikonka dysku
[#8] Re: dysk.device - szukam MINIMALNEGO przykładu

@spidi, post #7

czy sterownik nie musi odnosić się do sprzętu ? np. jakiegoś adresu pod którym znajduje się dane urządzenie ?

Niekoniecznie - np. napęd virtualny

//SD_ReadWrite(sdu, io, offset, 1); musiałoby jakieś dane zwracać i może wówczas pokaże się ikonka dysku

Zwraca status poprawnego odczytu, dane chyba nie mają znaczenia do wykrycia dysku?
Próbowałem wcześniej i z działającymi funkcjami odczytu/zapisu, też nie było reakcji.
[#9] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #8

[#10] Re: dysk.device - szukam MINIMALNEGO przykładu

@Norbert, post #9

Nie, to nie to, tam jest jak używać driverów.
Tylko DosDev jest przykładem ale też nie to z tego co patrzę po funkcjach. To chyba jak bym chciał dodać system plików.
Ja potrzebuję coś maksymalnie prostego, odczyt/zapis sektora, raportowanie rozmiaru dysku i tyle.
[#11] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #10

Też robiłem takie poszukiwania za przykładami, bo mam do napisania jeden .device i powiem Ci, że jak znajdziesz coś lepszego niż .device z MNT-VA2000 to daj znać. ;)

Gdzieś w developer docsach jest przykład okrojonego ramdisk.device, ale nie można go nazwać przykładem minimalnym.
[#12] Re: dysk.device - szukam MINIMALNEGO przykładu

@teh_KaiN, post #11

Ha, chyba znalazłem co było nie tak.
Później napiszę co, jak już wszystko uruchomię.
[#13] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #12

OK, hdtoolbox działa. W information trzeba było zmienić :)
Teraz jak zrobić żeby automatycznie wykrywało partycje bez tworzenia devs:Mountlist ?
Jak zintegrować driver z kickstartem żeby można było bootować?
[#14] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #13

Czy dobrze podejrzewam że ma to związek z obsługą plikopartycji czy całego usb w hxc/flashfloppy ?
[#15] Re: dysk.device - szukam MINIMALNEGO przykładu

@Norbert, post #14

Nie, dodaję obsługę SD do własnego projektu:
DIY-A586
[#16] Re: dysk.device - szukam MINIMALNEGO przykładu

@piotr_go, post #15

Automatyczne dodawanie partycji zrobione.
Po //loadmodule devs:sd.device// i resecie pojawiają się dyski.
Jak teraz zrobić żeby były bootowalne?
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem