As it was asked I've copied fsys_ffs.c in fsys_ufs2.c. I've make changes in files (see attached patch).
The first trouble I've met is a comment from disk_io.c: /* XX FFS should come last as it's superblock is commonly crossing tracks on floppies from track 1 to 2, while others only use 1. */ But anyway I've placed code after it.
The second problem is rebooting just after stage2 loaded. As I discover it may be undefined fsys_table[fsys_type].mount_func int attempt_mount() (from disk_io.c) for ufs2_mount. (I'm not sure, but I'm sure ufs2_mount is not called and it looks like other *_mount is called. I checked it with printf()).
And finally I can't to debug grub with grub-shell. When I ran it and type 'root (hd0)' I got an error:
Error 21: Selected disk does not exist
Even after I have created a device map file with a content: (hd0) /dev/ad0 and ran grub --device-map=mydev.map
Please, hint me for they all! -- Sem.
--- Makefile.am.orig Mon Feb 4 07:55:48 2002 +++ stage2/Makefile.am Tue Sep 23 04:33:34 2003 @@ -4,9 +4,10 @@ # For dist target. noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ + disk_inode_ufs2.h \ fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ imgact_aout.h jfs.h mb_header.h mb_info.h md5.h pc_slice.h \ - serial.h shared.h smp-imps.h nbi.h vstafs.h xfs.h + serial.h shared.h smp-imps.h nbi.h vstafs.h xfs.h disk_inode_ufs2.h EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) # For <stage1.h>. @@ -15,11 +16,11 @@ # The library for /sbin/grub. noinst_LIBRARIES = libgrub.a libgrub_a_SOURCES = boot.c builtins.c common.c char_io.c cmdline.c \ - disk_io.c gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c \ + disk_io.c gunzip.c fsys_ffs.c fsys_ufs2.c fsys_ext2fs.c fsys_fat.c \ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_vstafs.c \ fsys_xfs.c stage2.c md5.c libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ + -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 -DFSYS_UFS2=1 \ -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1 \ -DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \ -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -fwritable-strings @@ -30,23 +31,23 @@ EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec if DISKLESS_SUPPORT -pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \ +pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 ufs2_stage1_5 \ jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \ xfs_stage1_5 nbgrub pxegrub noinst_DATA = pre_stage2 start nbloader pxeloader diskless noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \ - fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \ - minix_stage1_5.exec reiserfs_stage1_5.exec \ + fat_stage1_5.exec ffs_stage1_5.exec ufs2_stage1_5.exec \ + jfs_stage1_5.exec minix_stage1_5.exec reiserfs_stage1_5.exec \ vstafs_stage1_5.exec xfs_stage1_5.exec nbloader.exec \ pxeloader.exec diskless.exec else -pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \ +pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 ufs2_stage1_5 \ jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \ xfs_stage1_5 noinst_DATA = pre_stage2 start noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \ - fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \ - minix_stage1_5.exec reiserfs_stage1_5.exec \ + fat_stage1_5.exec ffs_stage1_5.exec ufs2_stage1_5.exec \ + jfs_stage1_5.exec minix_stage1_5.exec reiserfs_stage1_5.exec \ vstafs_stage1_5.exec xfs_stage1_5.exec endif MOSTLYCLEANFILES = $(noinst_PROGRAMS) @@ -83,9 +84,9 @@ # For stage2 target. pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c common.c \ char_io.c cmdline.c disk_io.c gunzip.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_jfs.c fsys_minix.c fsys_reiserfs.c \ - fsys_vstafs.c fsys_xfs.c hercules.c serial.c smp-imps.c \ - stage2.c md5.c + fsys_fat.c fsys_ffs.c fsys_ufs2.c fsys_jfs.c fsys_minix.c \ + fsys_reiserfs.c fsys_vstafs.c fsys_xfs.c hercules.c serial.c \ + smp-imps.c stage2.c md5.c pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) pre_stage2_exec_ASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) @@ -147,6 +148,15 @@ ffs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ -DNO_BLOCK_FILES=1 ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) + +# For ufs2_stage1_5 target. +ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ + stage1_5.c fsys_ufs2.c bios.c +ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ + -DNO_BLOCK_FILES=1 +ufs2_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ + -DNO_BLOCK_FILES=1 +ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) # For minix_stage1_5 target. minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ --- filesys.h.orig Mon Nov 12 09:57:29 2001 +++ stage2/filesys.h Tue Sep 23 04:33:34 2003 @@ -30,6 +30,16 @@ #define FSYS_FFS_NUM 0 #endif +#ifdef FSYS_UFS2 +#define FSYS_UFS2_NUM 1 +int ufs2_mount (void); +int ufs2_read (char *buf, int len); +int ufs2_dir (char *dirname); +int ufs2_embed (int *start_sector, int needed_sectors); +#else +#define FSYS_UFS2_NUM 0 +#endif + #ifdef FSYS_FAT #define FSYS_FAT_NUM 1 int fat_mount (void); @@ -107,7 +117,8 @@ #ifndef NUM_FSYS #define NUM_FSYS \ - (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM \ + (FSYS_FFS_NUM + FSYS_UFS2_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM \ + + FSYS_MINIX_NUM \ + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM \ + FSYS_TFTP_NUM) #endif --- disk_io.c.orig Wed Nov 28 21:43:56 2001 +++ stage2/disk_io.c Fri Oct 10 03:17:52 2003 @@ -68,6 +68,9 @@ # ifdef FSYS_XFS {"xfs", xfs_mount, xfs_read, xfs_dir, 0, 0}, # endif +# ifdef FSYS_UFS2 + {"ufs2", ufs2_mount, ufs2_read, ufs2_dir, 0, ufs2_embed}, +# endif /* XX FFS should come last as it's superblock is commonly crossing tracks on floppies from track 1 to 2, while others only use 1. */ # ifdef FSYS_FFS
_______________________________________________ Bug-grub mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-grub