[ros-diffs] [evb] 45423: - Change NANDFlash again for Versatile support. Now the LLB and OS Loader are created in one binary blob (loaded with -kernel), while the RAMDISK is loaded with -initrd. - Now the only complication is that RAMDISK loaded at 0x80000 which will conflict with the 0x800000 range where kernel loads. Could move RAMDISK in code through LLB, but that would be very expensive (shift by 16MB up). Instead, NANDflash creates ramdisk image starting at offset 16MB. This way, emulator thinks it's loading at 0x80000, but actually loads at 0x1800000. Would be better if QEMU not hardcoded the INITRD_LOAD_ADDR...

evb at svn.reactos.org evb at svn.reactos.org
Thu Feb 4 20:49:25 CET 2010


Author: evb
Date: Thu Feb  4 20:49:25 2010
New Revision: 45423

URL: http://svn.reactos.org/svn/reactos?rev=45423&view=rev
Log:
- Change NANDFlash again for Versatile support. Now the LLB and OS Loader are created in one binary blob (loaded with -kernel), while the RAMDISK is loaded with -initrd.
- Now the only complication is that RAMDISK loaded at 0x80000 which will conflict with the 0x800000 range where kernel loads. Could move RAMDISK in code through LLB, but that would be very expensive (shift by 16MB up). Instead, NANDflash creates ramdisk image starting at offset 16MB. This way, emulator thinks it's loading at 0x80000, but actually loads at 0x1800000. Would be better if QEMU not hardcoded the INITRD_LOAD_ADDR...

Modified:
    trunk/reactos/tools/nandflash/main.c

Modified: trunk/reactos/tools/nandflash/main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/tools/nandflash/main.c?rev=45423&r1=45422&r2=45423&view=diff
==============================================================================
--- trunk/reactos/tools/nandflash/main.c [iso-8859-1] (original)
+++ trunk/reactos/tools/nandflash/main.c [iso-8859-1] Thu Feb  4 20:49:25 2010
@@ -16,7 +16,8 @@
 PCHAR NandImageName       = "reactos.bin";
 PCHAR LlbImageName        = "./output-arm/boot/armllb/armllb.bin";
 PCHAR BootLdrImageName    = "./output-arm/boot/freeldr/freeldr/freeldr.sys";
-PCHAR FsImageName         = "ReactOS.img";
+PCHAR FsImageName         = "ramdisk.img";
+PCHAR RamImageName        = "ramdisk.bin";
 
 /* NAND On-Disk Memory Map */
 ULONG LlbStart     = 0x00000000,     LlbEnd = 0x00010000;   // 64  KB
@@ -135,11 +136,23 @@
     close(FileDescriptor);
 }
 
+VOID
+NTAPI
+WriteRamDisk(IN INT RamDiskFile)
+{
+    INT FileDescriptor;
+
+    /* Open FS image and write it 16MB later */
+    FileDescriptor = open(FsImageName, O_RDWR);
+    WriteToFlash(RamDiskFile, FileDescriptor, 16 * 1024 * 1024, (32 + 16) * 1024 * 1024);
+    close(FileDescriptor);
+}
+
 int
 main(ULONG argc,
      char **argv)
 {
-    INT NandImageFile;
+    INT NandImageFile, RamDiskFile;
     
     /* Flat NAND, no OOB */
     if (argc == 2) NeedsOob = FALSE;
@@ -151,7 +164,24 @@
     /* Write components */
     WriteLlb(NandImageFile);
     WriteBootLdr(NandImageFile);
-    WriteFileSystem(NandImageFile);
+    if (NeedsOob)
+    {
+        /* Write the ramdisk normaly */
+        WriteFileSystem(NandImageFile);
+    }
+    else
+    {
+        /* Open a new file for the ramdisk */
+        RamDiskFile = open(RamImageName, O_RDWR | O_CREAT);
+        if (!RamDiskFile) exit(-1);
+
+        /* Write it */
+        WriteRamDisk(RamDiskFile);
+        
+        /* Close */
+        close(RamDiskFile);
+    }
+
 
     /* Close and return */
     close(NandImageFile);




More information about the Ros-diffs mailing list