Copyright (C) 2000-2012 |
GNU Info (mtools.info)Porting mtoolsPorting mtools to architectures which are not supported yet *********************************************************** This chapter is only interesting for those who want to port mtools to an architecture which is not yet supported. For most common systems, default drives are already defined. If you want to add default drives for a still unsupported system, run config.guess, to see which identification autoconf uses for that system. This identification is of the form cpu-vendor-os (for example sparc-sun-sunos). The cpu and the os parts are passed to the compiler as preprocessor flags. The OS part is passed to the compiler in three forms. 1. The complete os name, with dots replaced by underscores. sco3.2v2 would yield sco3_2v2 2. The base os name. Sco3.2v2 would yield Sco 3. The base os name plus its major version. Sco3.2v2 would yield Sco3 All three versions are passed, if they are different. To define the devices, use the entries for the systems that are already present as templates. In general, they have the following form: #if (defined (my_cpu) && defined(my_os)) #define predefined_devices struct device devices[] = { { "/dev/first_drive", 'drive_letter', drive_description}, ... { "/dev/last_drive", 'drive_letter', drive_description} } #define INIT_NOOP #endif "/dev/first_drive" is the name of the device or image file representing the drive. Drive_letter is a letter ranging from a to z giving access to the drive. Drive_description describes the type of the drive: `ED312' extra density (2.88M) 3 1/2 disk `HD312' high density 3 1/2 disk `DD312' double density 3 1/2 disk `HD514' high density 5 1/4 disk `DD514' double density 5 1/4 disk `DDsmall' 8 sector double density 5 1/4 disk `SS514' single sided double density 5 1/4 disk `SSsmall' single sided 8 sector double density 5 1/4 disk `GENFD' generic floppy drive (12 bit FAT) `GENHD' generic hard disk (16 bit FAT) `GEN' generic device (all parameters match) `ZIPJAZ(flags)' generic ZIP drive using normal access. This uses partition 4. `Flags' are any special flags to be passed to open. `RZIPJAZ(flags)' generic ZIP drive using raw SCSI access. This uses partition 4. `Flags' are any special flags to be passed to open. `REMOTE' the remote drive used for floppyd. Unlike the other items, this macro also includes the file name ($DISPLAY) and the drive letter (X) Entries may be described in more detail: fat_bits,open_flags,cylinders,heads,sectors,DEF_ARG or, if you need to describe an offset (filesystem doesn't start at beginning of filesystem) fat_bits, open_flags, cylinders, heads, sectors, offset, DEF_ARG0 `fat_bits' is either 12, 16 or 0. 0 means that the device accepts both types of FAT. `open_flags' may include flags such as O_NDELAY, or O_RDONLY, which might be necessary to open the device. 0 means no special flags are needed. `cylinders,heads,sectors' describe the geometry of the disk. If cylinders is 0, the heads and sectors parameters are ignored, and the drive accepts any geometry. `offset' is used if the DOS filesystem doesn't begin at the start of the device or image file. This is mostly useful for Atari Ram disks (which contain their device driver at the beginning of the file) or for DOS emulator images (which may represent a partitioned device. Definition of defaults in the devices file should only be done if these same devices are found on a large number of hosts of this type. In that case, could you also let me know about your new definitions, so that I can include them into the next release. For purely local file, I recommend that you use the `/usr/local/etc/mtools.conf' and `~/.mtoolsrc' configuration files. However, the devices files also allows to supply geometry setting routines. These are necessary if you want to access high capacity disks. Two routines should be supplied: 1. Reading the current parameters static inline int get_parameters(int fd, struct generic_floppy_struct *floppy) This probes the current configured geometry, and return it in the structure generic_floppy_struct (which must also be declared). Fd is an open file descriptor for the device, and buf is an already filled in stat structure, which may be useful. This routine should return 1 if the probing fails, and 0 otherwise. 2. Setting new parameters static inline int set_parameters(int fd, struct generic_floppy_struct *floppy) struct stat *buf) This configures the geometry contained in floppy on the file descriptor fd. Buf is the result of a stat call (already filled in). This should return 1 if the new geometry cannot be configured, and 0 otherwise. A certain number of preprocessor macros should also be supplied: `TRACKS(floppy)' refers to the track field in the floppy structure `HEADS(floppy)' refers to the heads field in the floppy structure `SECTORS(floppy)' refers to the sectors per track field in the floppy structure `SECTORS_PER_DISK(floppy)' refers to the sectors per disk field in the floppy structure (if applicable, otherwise leave undefined) `BLOCK_MAJOR' major number of the floppy device, when viewed as a block device `CHAR_MAJOR' major number of the floppy device, when viewed as a character device (a.k.a. "raw" device, used for fsck) (leave this undefined, if your OS doesn't have raw devices) For the truly high capacity formats (XDF, 2m, etc), there is no clean and documented interface yet. automatically generated by info2www version 1.2.2.9 |