Zenith432 Posted November 26, 2014 Share Posted November 26, 2014 (edited) I made a stage 1 boot record for booting Chameleon off an exFAT partition.It's called boot1x.Analog of boot1h or boot1f32. Also made an program 'boot1-install' that can install the stage 1 boot loader for all three file systemsboot1f32 -> FAT32boot1h -> HFS+boot1x -> exFAT So far, installing boot1h on HFS+ can be done trivially with dd.Installing boot1f32 can be done with a shell script boot1f32-install.sh (though the script doesn't always recognize a proper FAT32 boot record.)However, installing an exFAT boot record requires a companion program because it needs to compute a checksum of the exFAT VBR. So I made a program to install all three types of boot records. It is similar to fdisk440 that installs boot0/boot0hfs on MBR. Files included:sources for boot1x.s, boot0xg.s and boot1-install.c.binaries for boot1x, boot1xalt, boot1f32, boot1h, boot0xg and boot1-install. For Using exFAT under MBRInstall Chameleon's boot0 on MBR using fdisk440.Set the exFAT partition as active (can be done with fdisk440 as well).install boot1x or boot1xalt on exFAT partition using boot1-install.Copy Chameleon's 2nd stage boot to /boot on the exFAT partition.For Using exFAT under GPTInstall Chameleon's boot0 (or boot0xg) on protective MBR using fdisk440.install boot1x or boot1xalt on exFAT partition using boot1-install.Copy Chameleon's 2nd stage boot to /boot on the exFAT partition.boot0xg is a modified version of boot0 such that when searching GPT it looks for exFAT or FAT32partitions marked as "Microsoft basic data" type. The normal boot0 looks for EFI System Partitionformatted as FAT32. As of r2507, Chameleon's boot0 has been replaced by boot0xg. boot0xg has all features of previous boot0 +recognize exFAT on MBR marked active + recognize exFAT+FAT32 on GPT typed as "Microsoft basic data". As of r2516, Chameleon's boot2 supports reading configuration files from an exFAT partition.boot1xalt is an alternate variant of boot1x that waits 2 seconds for a keypress of a single digit X.If a digit is pressed, it loads /bootX instead of boot. This feature may be used for selectingone of multiple stage-2 boot loaders.Enjoy. Changelog 1.0.5 - See description in post #44. 1.0.4 - Incorporated Micky1979's force umount option -u (post #38), Use xcrun in Makefile to find build tools. 1.0.3 - Beefed up boot0xg, see post #19. 1.0.2 - Added boot0xg and Readme.txt. 1.0.1 - Fixed crash with CFStringGetCStringPtr in boot1-install. 1.0 - Original. ChameleonExfatVBR_1.0.5.tar.gz Edited January 12, 2015 by Zenith432 6 Link to comment Share on other sites More sharing options...
kvonlinee Posted November 26, 2014 Share Posted November 26, 2014 So for this one, drive boot is format to GUID table, where would this apply to? 1 Link to comment Share on other sites More sharing options...
Zenith432 Posted November 26, 2014 Author Share Posted November 26, 2014 So for this one, drive boot is format to GUID table, where would this apply to? Unfortunately it's not possible to use with GPT right now. boot1x is oblivious to whether exFAT partition is on MBR or GPT. All it needs is bios drive # in DL and first 2 sectors loaded from exFAT partition. However, boot0 is not equipped to boot exFAT partition from GPT. It boots either HFS+ or EFI System Partition (formatted as FAT32). I looked at the boot0 code, and it's not difficult to allow for exFAT, BUT there is not enough space in the MBR. So I'll make modified boot0 that supports exFAT on GPT instead of EFI System Partition. Stay tuned. Solved in 1.0.2. Thanks for pointing this out. Link to comment Share on other sites More sharing options...
Slice Posted November 26, 2014 Share Posted November 26, 2014 Hi Zenith432! There is great deal to implement exFAT volume support. May I apply it for Clover? Clover already has EXFAT driver and can read all support files from the partition. It's a pity the driver is read-only as well as HFSplus driver. Cheer! Link to comment Share on other sites More sharing options...
Zenith432 Posted November 26, 2014 Author Share Posted November 26, 2014 Yes, sure - go ahead. For Clover to fully work with exFAT, its boot2 stage must be able read files from exFAT volume. Technical specs are boot1x expects boot0 to load 1024 bytes form exFAT partition, whether MBR or GPT. Drive number passed in DL. The partition offset is already stored in the bios parameter block in exFAT boot record, so no need for that. [update Jan 12 2015 - Starting with version 1.0.5, it's enough for boot0 to load initial 512 bytes.] It loads /boot from the exFAT volume. Max size of /boot is 512 * 1024 - 512 (to fit in addresses 0x20200 - 0xa0000). boot1-install detect volume type (exFAT, FAT32 or HFS+) and either For HFS+, store 1024 bytes of boot file template (boot1h) in sectors 0-1. For FAT32, store 512 bytes of boot file template (boot1f32), overwrite bytes 3 - 89 with existing FAT32 BPB. For exFAT, store 1024 bytes of boot file template (boot1x) and prepare VBR area (24 sectors total) according to spec. You can use custom templates as follows For HFS+ boot file template must be 1024 bytes. For FAT32 boot file template must be 512 bytes, with space left for FAT32 BPB and 0x55AA signature. For exFAT boot file template must be 512 - 4608 bytes, leave space for exFAT BPB (bytes 3 - 119) and signature of 0x55AA at end of each sector. Hi Zenith432! There is great deal to implement exFAT volume support. May I apply it for Clover? Clover already has EXFAT driver and can read all support files from the partition. It's a pity the driver is read-only as well as HFSplus driver. Cheer! 1 Link to comment Share on other sites More sharing options...
Slice Posted November 26, 2014 Share Posted November 26, 2014 I think your bin files are ready to use with Clover as technology is the same. This is CloverEFI==boot with EXFAT driver included. boot.zip I will prepare USB stick tomorrow to test. (MBR, exFAT) Link to comment Share on other sites More sharing options...
Zenith432 Posted November 26, 2014 Author Share Posted November 26, 2014 (edited) Ok, I prepared a variant of boot0 called boot0xg For booting an exFAT partition stored in GPT. For booting exFAT from MBR can use regular boot0. What boot0xg boot is one of 1) any MBR partition marked as active. 2) any HFS partition on MBR 3) any HFS parition on GPT 4) any exFAT or FAT32 parition on GPT classified as "Microsoft Basic Data" type (this is the normal kind.) 5) Any FAT32 partition on GPT classified as "EFI System Partition" Functionality dropped from boot0 - dropped printing of string 'test' to make some space for code. assemble with nasm -DCONFIG_BOOT0_DEBUG=0 -DCONFIG_BOOT0_VERBOSE=1 -o boot0xg boot0xg.s EDIT: Attachment removed - boot0xg is now packaged with everything else in post #1. Edited November 29, 2014 by Zenith432 1 Link to comment Share on other sites More sharing options...
Slice Posted November 27, 2014 Share Posted November 27, 2014 Hey Sergeys-iMac:bin slice$ ./boot1-install Illegal instruction: 4 Sergeys-iMac:bin slice$ You have post #432! Link to comment Share on other sites More sharing options...
Slice Posted November 27, 2014 Share Posted November 27, 2014 Hi Zenith432, I set printf to see why it is not working and got DAVolumeKind (null) if (CFDictionaryGetValueIfPresent(descDict, kDADiskDescriptionVolumeKindKey, (void const**) &s_ref)) { char const* cstr = CFStringGetCStringPtr(s_ref, kCFStringEncodingUTF8); #if 1 printf("DAVolumeKind %s\n", cstr); #endif What is wrong? EDITED: I made this way char const* cstr = CFStringGetCStringPtr(s_ref, kCFStringEncodingUTF8); #if 1 printf("DAVolumeKind %s\n", cstr); #endif if (!cstr) { daVolumeKind = _undetected; } else 1 Link to comment Share on other sites More sharing options...
Slice Posted November 27, 2014 Share Posted November 27, 2014 OK, this way boot1-install successfully write boot1 on my USB drive. It now looks like Attempt to boot from is failed. Now I boot into system usual way and see the drive is broken What is happen? Why the contents changed? Continue testing with QEMU... EDITED. No, boot1x is not working. This is the image for testing with QEMU CF32.img.lzma.zip Link to comment Share on other sites More sharing options...
Zenith432 Posted November 27, 2014 Author Share Posted November 27, 2014 (edited) The problem with illegal instruction is call to CFStringGetCStringPtr which sometimes fails. I need to change code to provide a buffer. Will fix. Fixed. Do you know why the boot sector got overwritten with 0xf4? (hlt instruction) It's the default boot sector OS X creates for exFAT. Anyways, the sector looks okay in your disc image. [Note: the boot sector may have been overwritten if the partition wasn't dismounted when installing boot1x.] I'll analyze the disc image you uploaded later when I have time. See post #12. I've tested boot0xg, and it seems to work, but chameleon boot2 is not succeeding in loading org.chameleon.Boot.plist from adjoining fat32 partition. So I'm still checking it. Done testing boot0xg. It works. For some reason, when the adjoining partition for /Extra is FAT32, Chameleon's boot2 can't read it on GPT. However, if the adjoining partition for /Extra is HFS+, things work fine. I've repackaged boot0xg with the other stuff and added a Readme.txt file for installing. EDIT: starting with r2494, Chameleon can read files off FAT32 in GPT. Now it's 433 posts I uploaded version 1.0.1 with a fix for the bug pointed out in posts # 8 - 9. The code change is diff --git a/boot1-install.c b/boot1-install.c --- a/boot1-install.c +++ b/boot1-install.c @@ -581,7 +581,12 @@ int checkDevicePath2(char const* pathName) if (CFDictionaryContainsKey(descDict, kDADiskDescriptionVolumePathKey)) isVolumeMounted = 1; if (CFDictionaryGetValueIfPresent(descDict, kDADiskDescriptionVolumeKindKey, (void const**) &s_ref)) { + static char cstr_buffer[64]; char const* cstr = CFStringGetCStringPtr(s_ref, kCFStringEncodingUTF8); + if (!cstr) { + CFStringGetCString(s_ref, &cstr_buffer[0], (CFIndex) sizeof cstr_buffer, kCFStringEncodingUTF8); + cstr = &cstr_buffer[0]; + } #if 0 printf("DAVolumeKind %s\n", cstr); #endif Edited November 29, 2014 by Zenith432 Link to comment Share on other sites More sharing options...
Zenith432 Posted November 27, 2014 Author Share Posted November 27, 2014 SliceI copied your disk image CF32 "as is" onto a USB stick starting at sector 32, length 62432.Wrapped it with an MBR.Installed boot0 on the MBR. Made the CF32 partition type 7 (ntfs/exfat) and active.And guess what?It works. It boots clover This was in real hardware, not virtual machine. So why not work in qemu? Could be a couple of things I used an instruction in the code for boot1x not legal for x86 real mode. [Don't think I did.] A BIOS problem, most likely int 0x13, function 0x42 returning error. Then I remembered - The /boot file is contiguous on the disk, and the code tries to load in as big a chunks as possible. - For this I used kMaxBlockCount = 127, which is maximum EDD spec for int 0x13, func 0x42 allows. - But the code for boot1f32 says some BIOSes don't like the 16 bit offset in the address to be negative (go above 0x8000). - Which means they can only load 64 sectors (32 KB). - So attached is a more tolerant variant of boot1x.s with kMaxBlockCount=64. - Please try see if this works in qemu. - If tolerant version works, I'll set the max count to 64 permanently like in boot1f32. Continue testing with QEMU...EDITED.No, boot1x is not working. boot1x_tolerant.zip Link to comment Share on other sites More sharing options...
Slice Posted November 28, 2014 Share Posted November 28, 2014 I confirm, it works! I used tolerant version and made "make" in src folder of 1.0.2 package. Inserted USB drive and make sudo ./boot1-install -yM /dev/rdisk1s1 It's fine. Then use Disk Utility to make ISO from the drive. Yesterday I made a mistake creating iso from partition while for QEMU it must be whole drive. Now it is. CFx3.img.lzma.zip Then I will think how to add this possibility to Clover package. Link to comment Share on other sites More sharing options...
Zenith432 Posted November 28, 2014 Author Share Posted November 28, 2014 boot1x does not work from a naked exFAT partition (unwrapped with MBR) - because it expects previous boot code to load entire 1024 bytes. Legacy BIOS by convention only loads 512 bytes. So this was probably the reason it didn't work - not the use of kMaxBlockCount=127 with int 0x13. I will leave kMaxBlockCount at 127 for the time being. Yesterday I made a mistake creating iso from partition while for QEMU it must be whole drive. Now it is. Link to comment Share on other sites More sharing options...
ErmaC Posted November 29, 2014 Share Posted November 29, 2014 Hi Zenith432THX for for your continue effort in making the things better!I merge your "EXFAT boot support" (not completely) see commit 2495 I'm not completely sure... and I have problem to build the boo1x.s (nasm version? no idea...) So I add it (boot1x.s) but is not called anywhere in any makefile. ErmaC 1 Link to comment Share on other sites More sharing options...
Slice Posted November 29, 2014 Share Posted November 29, 2014 Hi Zenith432 THX for for your continue effort in making the things better! I merge your "EXFAT boot support" (not completely) see commit 2495 I'm not completely sure... and I have problem to build the boo1x.s (nasm version? no idea...) So I add it (boot1x.s) but is not called anywhere in any makefile. ErmaC Yes, NASM version. Use the most recent. 2.11. 1 Link to comment Share on other sites More sharing options...
Zenith432 Posted November 29, 2014 Author Share Posted November 29, 2014 (edited) As Slice said, the errors are due to use of nasm 2.11.06. Attached is a patch to r2495 to make it build with Apple's nasm 0.98 and add boot1x to the Makefiles. PS: I suggest you add nasm -O3 optimization to boot0 Makefile as well. It is the default in nasm 2.11.06, and I've used boot0 and boot0hfs successfully when optimized that way. Hi Zenith432THX for for your continue effort in making the things better!I merge your "EXFAT boot support" (not completely) see commit 2495 I'm not completely sure... and I have problem to build the boo1x.s (nasm version? no idea...) So I add it (boot1x.s) but is not called anywhere in any makefile. ErmaC [fix boot1x mak r2495 diff] diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -76,6 +76,7 @@ dist-local image-local: @cp -f ${SYMROOT}/i386/boot0xg ${IMGROOT}/usr/standalone/i386 @cp -f ${SYMROOT}/i386/boot1h ${IMGROOT}/usr/standalone/i386 @cp -f ${SYMROOT}/i386/boot1f32 ${IMGROOT}/usr/standalone/i386 + @cp -f ${SYMROOT}/i386/boot1x ${IMGROOT}/usr/standalone/i386 ifdef CONFIG_FDISK440 @cp -f ${SYMROOT}/i386/fdisk440 ${IMGROOT}/usr/bin endif diff --git a/i386/boot1/Makefile b/i386/boot1/Makefile --- a/i386/boot1/Makefile +++ b/i386/boot1/Makefile @@ -16,7 +16,7 @@ DIRS_NEEDED = $(SYMROOT) VERS = `vers_string -f 5.0 | tr - .` NEW_VERS = Darwin boot1h v$(VERS) -PROGRAMS = boot1hp boot1f32 +PROGRAMS = boot1hp boot1f32 boot1x ifeq (${CONFIG_BOOT1_HFS}, y) PROGRAMS += boot1h @@ -37,7 +37,7 @@ $(SYMROOT)/boot1h: boot1h.s $(PROGRAMS): $(SRCROOT)/autoconf.inc @echo " [NASM] $(@F)" - @$(NASM) $(@F).s -o $@ + @$(NASM) $(@F).s -o $@ -O3 install_i386:: all $(INSTALLDIR) cp $(SYMROOT)/boot1h $(INSTALLDIR)/ diff --git a/i386/boot1/boot1x.s b/i386/boot1/boot1x.s --- a/i386/boot1/boot1x.s +++ b/i386/boot1/boot1x.s @@ -90,8 +90,8 @@ gsFATCache: times FATCache_size db 0 ; ; exFAT BPB ; -gPartitionOffset: dq 0 -gVolumeLength: dq 0 +gPartitionOffset: dd 0, 0 +gVolumeLength: dd 0, 0 gFATOffset: dd 0 gFATLength: dd 0 gClusterHeapOffset: dd 0 @@ -429,7 +429,7 @@ getRange: .loop: cmp eax, 2 jb .finishup - cmp eax, kMaxCluster + cmp eax, -9 ;kMaxCluster jnb .finishup cmp bx, kMaxContigClusters jnb .finishup Edited December 20, 2014 by Zenith432 1 Link to comment Share on other sites More sharing options...
ErmaC Posted November 29, 2014 Share Posted November 29, 2014 Yes, NASM version. Use the most recent. 2.11. ermac$ nasm -v NASM version 0.98.40 (Apple Computer, Inc. build 11) compiled on Sep 18 2014 ================= Making all in boot1 ================= [NASM] boot1hp [NASM] boot1f32 [NASM] boot1x boot1x.s:93: error: integer supplied to a DQ instruction boot1x.s:94: error: integer supplied to a DQ instruction boot1x.s:183: error: short jump is out of range boot1x.s:188: error: short jump is out of range boot1x.s:199: error: short jump is out of range boot1x.s:226: error: short jump is out of range make[3]: *** [/Users/ermac/Documents/local/chameleon/sym/i386/boot1x] Error 1 make[2]: *** [all-recursive] Error 1 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2 http://www.nasm.us/pub/nasm/releasebuilds/2.11.06/nasm-2.11.06.tar.xz ermac$ cd /Users/ermac/Downloads/nasm-2.11.06 nasm-2.11.06 ermac$ ./configure checking for prefix by checking for nasm... /usr/bin/nasm checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking whether ln -s works... yes checking whether make sets $(MAKE)... yes checking for a BSD-compatible install... /usr/bin/install -c checking if gcc accepts -W... yes checking if gcc accepts -Wall... yes checking if gcc accepts -std=c99... yes checking if gcc accepts -pedantic... yes checking for nroff... nroff checking for asciidoc... no checking for xmlto... no checking for acrodist... no checking for ps2pdf... no checking for pstopdf... pstopdf configure: WARNING: No acsciidoc package found configure: WARNING: No xmlto package found checking for ANSI C header files... (cached) yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking for inttypes.h... (cached) yes checking for strings.h... (cached) yes checking stdbool.h usability... yes checking stdbool.h presence... yes checking for stdbool.h... yes checking for an ANSI C-conforming const... yes checking for inline... inline checking for C/C++ restrict keyword... __restrict checking for size_t... yes checking if gcc has a working bool type... yes checking whether byte ordering is bigendian... no checking for strcspn... yes checking for strspn... yes checking for vsnprintf... yes checking for _vsnprintf... no checking for snprintf... yes checking for _snprintf... no checking for strcasecmp... yes checking for stricmp... no checking for strncasecmp... yes checking for strnicmp... no checking for strsep... yes checking for strlcpy... yes checking for getuid... yes checking for getgid... yes checking whether strcasecmp is declared... yes checking whether stricmp is declared... no checking whether strncasecmp is declared... yes checking whether strnicmp is declared... no checking whether strsep is declared... yes checking whether strlcpy is declared... yes configure: creating ./config.status config.status: creating Makefile config.status: creating rdoff/Makefile config.status: creating doc/Makefile config.status: creating config.h config.status: executing default-1 commands nasm-2.11.06 ermac$ make gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o nasm.o nasm.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o nasmlib.o nasmlib.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o ver.o ver.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o raa.o raa.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o saa.o saa.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o rbtree.o rbtree.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o float.o float.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o insnsa.o insnsa.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o insnsb.o insnsb.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o directiv.o directiv.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o assemble.o assemble.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o labels.o labels.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o hashtbl.o hashtbl.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o crc64.o crc64.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o parser.o parser.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outform.o output/outform.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outlib.o output/outlib.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/nulldbg.o output/nulldbg.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/nullout.o output/nullout.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outbin.o output/outbin.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outaout.o output/outaout.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outcoff.o output/outcoff.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outelf.o output/outelf.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outelf32.o output/outelf32.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outelf64.o output/outelf64.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outelfx32.o output/outelfx32.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outobj.o output/outobj.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outas86.o output/outas86.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outrdf2.o output/outrdf2.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outdbg.o output/outdbg.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outieee.o output/outieee.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outmac32.o output/outmac32.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o output/outmac64.o output/outmac64.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o preproc.o preproc.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o quote.o quote.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o pptok.o pptok.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o macros.o macros.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o listing.o listing.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o eval.o eval.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o exprlib.o exprlib.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o stdscan.o stdscan.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o strfunc.o strfunc.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o tokhash.o tokhash.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o regvals.o regvals.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o regflags.o regflags.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o ilog2.o ilog2.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o lib/strlcpy.o lib/strlcpy.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o preproc-nop.o preproc-nop.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o disp8.o disp8.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o iflag.o iflag.c gcc -o nasm nasm.o nasmlib.o ver.o raa.o saa.o rbtree.o float.o insnsa.o insnsb.o directiv.o assemble.o labels.o hashtbl.o crc64.o parser.o output/outform.o output/outlib.o output/nulldbg.o output/nullout.o output/outbin.o output/outaout.o output/outcoff.o output/outelf.o output/outelf32.o output/outelf64.o output/outelfx32.o output/outobj.o output/outas86.o output/outrdf2.o output/outdbg.o output/outieee.o output/outmac32.o output/outmac64.o preproc.o quote.o pptok.o macros.o listing.o eval.o exprlib.o stdscan.o strfunc.o tokhash.o regvals.o regflags.o ilog2.o lib/strlcpy.o preproc-nop.o disp8.o iflag.o gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o ndisasm.o ndisasm.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o disasm.o disasm.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o sync.o sync.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o insnsd.o insnsd.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o insnsn.o insnsn.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o regs.o regs.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I. -o regdis.o regdis.c gcc -o ndisasm ndisasm.o disasm.o sync.o nasmlib.o ver.o insnsd.o insnsb.o insnsn.o regs.o regdis.o disp8.o iflag.o cd rdoff && /Applications/Xcode.app/Contents/Developer/usr/bin/make all gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdfdump.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdoff.c gcc -o rdfdump rdfdump.o rdoff.o gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. ldrdf.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. symtab.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. collectn.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdlib.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. segtab.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. hash.c gcc -o ldrdf ldrdf.o rdoff.o symtab.o collectn.o rdlib.o segtab.o hash.o ../nasmlib.o gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdx.c gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdfload.c gcc -o rdx rdx.o rdoff.o rdfload.o symtab.o collectn.o hash.o ../nasmlib.o gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdflib.c gcc -o rdflib rdflib.o gcc -c -g -O2 -W -Wall -std=c99 -pedantic -DHAVE_CONFIG_H -I. -I.. rdf2bin.c gcc -o rdf2bin rdf2bin.o rdoff.o rdfload.o symtab.o collectn.o hash.o ../nasmlib.o rm -f rdf2com && ln -s rdf2bin rdf2com rm -f rdf2ith && ln -s rdf2bin rdf2ith rm -f rdf2ihx && ln -s rdf2bin rdf2ihx rm -f rdf2srec && ln -s rdf2bin rdf2srec nasm-2.11.06 ermac$ sudo make install Password: mkdir -p /usr/bin /usr/bin/install -c nasm /usr/bin/nasm /usr/bin/install -c ndisasm /usr/bin/ndisasm mkdir -p /usr/share/man/man1 /usr/bin/install -c -m 644 ./nasm.1 /usr/share/man/man1/nasm.1 /usr/bin/install -c -m 644 ./ndisasm.1 /usr/share/man/man1/ndisasm.1 ermac$ nasm -v NASM version 2.11.06 compiled on Nov 29 2014 [RANLIB] libsaio.a ================= Making all in boot0 ================= [NASM] boot0 [NASM] boot0hfs [NASM] boot0md [NASM] boot0xg [NASM] chain0 ================= Making all in boot1 ================= [NASM] boot1hp [NASM] boot1f32 [NASM] boot1x [NASM] boot1h [NASM] boot1he ================= Making all in boot2 ================= THX! ErmaC As Slice said, the errors are due to use of nasm 2.11.06. Attached is a patch to r2495 to make it build with Apple's nasm 0.98 and add boot1x to the Makefiles. THX again guys! I merge the diff to the SVN in a couple of minute... EDIT: done 2496 PS: I suggest you add nasm -O3 optimization to boot0 Makefile as well. done 2497 ... I will update the installer scripts too! ...soon. ErmaC 1 Link to comment Share on other sites More sharing options...
Zenith432 Posted November 29, 2014 Author Share Posted November 29, 2014 I've optimized boot0xg code to save space, and added back the feature to recognize EFI System Partition. It's packaged in 1.0.3, post #1. Full features of newest boot0xg summarized in post #7. boot0xg is now upward compatible with boot0 in that - it does everything boot0 does + recognize exFAT on MBR marked active + recognize exFAT+FAT32 on GPT typed as "Microsoft basic data". ErmaC: Since boot0xg now has all features of boot0, it's possible to replace boot0 with it instead of having separate variants. [in clover it's the variant called boot0af.] 2 Link to comment Share on other sites More sharing options...
ErmaC Posted November 29, 2014 Share Posted November 29, 2014 ErmaC: Since boot0xg now has all features of boot0, it's possible to replace boot0 with it instead of having separate variants.Done 2507 Again... amazing job Zenith432! ErmaC Link to comment Share on other sites More sharing options...
Micky1979 Posted November 30, 2014 Share Posted November 30, 2014 Hi Zenith432, thanks for your new work. I'm (would) update some scripts and I need to figure out what to do. Doing that in Terminal return an uuid only if is an exfat filesystem: /System/Library/Filesystems/exfat.fs/Contents/Resources/exfat.util -k disk2s1 3FB67114-5845-34C2-88A3-1CED9E85A974 ...that is the same of Diskarbitration return for kDADiskDescriptionVolumeUUIDKey ....36 length otherwise 0 for non-exfat. or, I can use its exit status (254 if contain exfat filesystem as writed in the man page) can be this a secure way in all scenario to know in advance if I have to use new boot files and your boot1-install, using exfat.util in the Chameleon's CheckFatType.sh script? Link to comment Share on other sites More sharing options...
Slice Posted December 1, 2014 Share Posted December 1, 2014 exFAT partition UUID is EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (Linux/Windows data) 1 Link to comment Share on other sites More sharing options...
Zenith432 Posted December 1, 2014 Author Share Posted December 1, 2014 For exfat, the kDADiskDescriptionVolumeKindKey in DiskArbitration should be 'exfat'. If you run 'diskutil info disk2s1' you should see a line with 'Type: exfat' somewhere in there and can grep for that in a script. There may be identifiable UUIDs in 'diskutil info' too. can be this a secure way in all scenario to know in advance if I have to use new boot files and your boot1-install, using exfat.util in the Chameleon's CheckFatType.sh script? 1 Link to comment Share on other sites More sharing options...
Micky1979 Posted December 1, 2014 Share Posted December 1, 2014 If you run 'diskutil info disk2s1' you should see a line with 'Type: exfat' somewhere in there and can grep for that in a script. There may be identifiable UUIDs in 'diskutil info' too. Yep, sorry that's why I have asked. Sometimes "diskutil info" made me crazy about its output that can be different in differents OS (like | grep 'Mount point' or 'Mount Point') that would really be better to avoid. Hoping that this does not appen for: File System Personality: ExFAT Type (Bundle): exfat Name (User Visible): ExFAT ...now and in the future Only for this. Link to comment Share on other sites More sharing options...
Zenith432 Posted December 1, 2014 Author Share Posted December 1, 2014 "Type (Bundle)" is the value of kDADiskDescriptionVolumeKindKey, and it's the name of the bundle in /System/Library/Filesystems that is handling the volume. [+ there's grep -i ] 1 Link to comment Share on other sites More sharing options...
Recommended Posts