[PATCH 3/4] Linux loader: integrate lilo.c to Hatari and add --lilo option |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
- Subject: [PATCH 3/4] Linux loader: integrate lilo.c to Hatari and add --lilo option
- From: Eero Tamminen <oak@xxxxxxxxxxxxxx>
- Date: Tue, 19 Mar 2019 00:58:50 +0200
There are few bugs:
* Hatari itself doesn't have yet good enough Falcon support for Linux
(booting works on real devices, but not in Hatari)
* Disassembly and memdump show just zero memory content for the
executed instructions after Linux has been started
---
src/CMakeLists.txt | 2 +-
src/configuration.c | 30 ++++++++++++++++++++++++++++++
src/includes/configuration.h | 12 ++++++++++++
src/options.c | 27 ++++++++++++++++++++++++++-
src/tos.c | 11 +++++++++--
5 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index fe9567b7..c941d829 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -9,7 +9,7 @@ set(SOURCES
ncr5380.c paths.c psg.c printer.c resolution.c rs232.c reset.c rtc.c
scandir.c scc.c stMemory.c screen.c screenConvert.c screenSnapShot.c
shortcut.c sound.c spec512.c statusbar.c str.c tos.c utils.c
- vdi.c inffile.c video.c wavFormat.c xbios.c ymFormat.c)
+ vdi.c inffile.c video.c wavFormat.c xbios.c ymFormat.c lilo.c)
# Disk image code is shared with the hmsa tool, so we put it into a library:
add_library(Floppy createBlankImage.c dim.c msa.c st.c zip.c)
diff --git a/src/configuration.c b/src/configuration.c
index d781ca2d..d3ce9504 100644
--- a/src/configuration.c
+++ b/src/configuration.c
@@ -540,6 +540,17 @@ static const struct Config_Tag configs_Rom[] =
{ NULL , Error_Tag, NULL }
};
+/* Used to load/save LILO options, names are same as with Aranym */
+static const struct Config_Tag configs_Lilo[] =
+{
+ { "Args", String_Tag, ConfigureParams.Lilo.szCommandLine },
+ { "Kernel", String_Tag, ConfigureParams.Lilo.szKernelFileName },
+ { "Ramdisk", String_Tag, ConfigureParams.Lilo.szRamdiskFileName },
+ { "HaltOnReboot", Bool_Tag, &ConfigureParams.Lilo.bHaltOnReboot },
+ { "LoadToFastRam", Bool_Tag, &ConfigureParams.Lilo.bLoadFastRam },
+ { NULL , Error_Tag, NULL }
+};
+
/* Used to load/save RS232 options */
static const struct Config_Tag configs_Rs232[] =
{
@@ -846,6 +857,16 @@ void Configuration_SetDefault(void)
ConfigureParams.Rom.bPatchTos = true;
strcpy(ConfigureParams.Rom.szCartridgeImageFileName, "");
+ /* Set defaults for Lilo */
+ strcpy(ConfigureParams.Lilo.szCommandLine,
+ "root=/dev/ram video=atafb:vga16 load_ramdisk=1");
+ sprintf(ConfigureParams.Lilo.szKernelFileName,
+ "%s%cvmlinuz", Paths_GetDataDir(), PATHSEP);
+ sprintf(ConfigureParams.Lilo.szRamdiskFileName,
+ "%s%cinitrd", Paths_GetDataDir(), PATHSEP);
+ ConfigureParams.Lilo.bHaltOnReboot = true;
+ ConfigureParams.Lilo.bLoadFastRam = true;
+
/* Set defaults for System */
ConfigureParams.System.nMachineType = MACHINE_ST;
ConfigureParams.System.nCpuLevel = 0;
@@ -976,6 +997,10 @@ void Configuration_Apply(bool bReset)
File_MakeAbsoluteName(ConfigureParams.Rom.szTosImageFileName);
if (strlen(ConfigureParams.Rom.szCartridgeImageFileName) > 0)
File_MakeAbsoluteName(ConfigureParams.Rom.szCartridgeImageFileName);
+ if (strlen(ConfigureParams.Lilo.szKernelFileName) > 0)
+ File_MakeAbsoluteName(ConfigureParams.Lilo.szKernelFileName);
+ if (strlen(ConfigureParams.Lilo.szRamdiskFileName) > 0)
+ File_MakeAbsoluteName(ConfigureParams.Lilo.szRamdiskFileName);
File_CleanFileName(ConfigureParams.HardDisk.szHardDiskDirectories[0]);
File_MakeAbsoluteName(ConfigureParams.HardDisk.szHardDiskDirectories[0]);
File_MakeAbsoluteName(ConfigureParams.Memory.szMemoryCaptureFileName);
@@ -1123,6 +1148,7 @@ void Configuration_Load(const char *psFileName)
Configuration_LoadSection(psFileName, configs_Scsi, "[SCSI]");
Configuration_LoadSection(psFileName, configs_Ide, "[IDE]");
Configuration_LoadSection(psFileName, configs_Rom, "[ROM]");
+ Configuration_LoadSection(psFileName, configs_Lilo, "[LILO]");
Configuration_LoadSection(psFileName, configs_Rs232, "[RS232]");
Configuration_LoadSection(psFileName, configs_Printer, "[Printer]");
Configuration_LoadSection(psFileName, configs_Midi, "[Midi]");
@@ -1179,6 +1205,7 @@ void Configuration_Save(void)
Configuration_SaveSection(sConfigFileName, configs_Scsi, "[SCSI]");
Configuration_SaveSection(sConfigFileName, configs_Ide, "[IDE]");
Configuration_SaveSection(sConfigFileName, configs_Rom, "[ROM]");
+ Configuration_SaveSection(sConfigFileName, configs_Lilo, "[LILO]");
Configuration_SaveSection(sConfigFileName, configs_Rs232, "[RS232]");
Configuration_SaveSection(sConfigFileName, configs_Printer, "[Printer]");
Configuration_SaveSection(sConfigFileName, configs_Midi, "[Midi]");
@@ -1199,6 +1226,9 @@ void Configuration_MemorySnapShot_Capture(bool bSave)
MemorySnapShot_Store(ConfigureParams.Rom.szTosImageFileName, sizeof(ConfigureParams.Rom.szTosImageFileName));
MemorySnapShot_Store(ConfigureParams.Rom.szCartridgeImageFileName, sizeof(ConfigureParams.Rom.szCartridgeImageFileName));
+ MemorySnapShot_Store(ConfigureParams.Lilo.szKernelFileName, sizeof(ConfigureParams.Lilo.szKernelFileName));
+ MemorySnapShot_Store(ConfigureParams.Lilo.szRamdiskFileName, sizeof(ConfigureParams.Lilo.szRamdiskFileName));
+
MemorySnapShot_Store(&ConfigureParams.Memory.STRamSize_KB, sizeof(ConfigureParams.Memory.STRamSize_KB));
MemorySnapShot_Store(&ConfigureParams.Memory.TTRamSize_KB, sizeof(ConfigureParams.Memory.TTRamSize_KB));
diff --git a/src/includes/configuration.h b/src/includes/configuration.h
index b83575e3..b0b43036 100644
--- a/src/includes/configuration.h
+++ b/src/includes/configuration.h
@@ -50,6 +50,17 @@ typedef struct
} CNF_ROM;
+/* LILO (Linux loader) configuration */
+typedef struct
+{
+ char szCommandLine[256]; /* bootinfo CL_SIZE */
+ char szKernelFileName[FILENAME_MAX];
+ char szRamdiskFileName[FILENAME_MAX];
+ bool bHaltOnReboot;
+ bool bLoadFastRam;
+} CNF_LILO;
+
+
/* Sound configuration */
typedef struct
{
@@ -410,6 +421,7 @@ typedef struct
CNF_SCSIDEV Scsi[MAX_SCSI_DEVS];
CNF_IDEDEV Ide[MAX_IDE_DEVS];
CNF_ROM Rom;
+ CNF_LILO Lilo;
CNF_RS232 RS232;
CNF_PRINTER Printer;
CNF_MIDI Midi;
diff --git a/src/options.c b/src/options.c
index 2a4d8dc3..ae8ac4bb 100644
--- a/src/options.c
+++ b/src/options.c
@@ -44,6 +44,7 @@ const char Options_fileid[] = "Hatari options.c : " __DATE__ " " __TIME__;
#include "xbios.h"
#include "stMemory.h"
#include "tos.h"
+#include "lilo.h"
bool bLoadAutoSave; /* Load autosave memory snapshot at startup */
@@ -172,6 +173,9 @@ enum {
#endif
OPT_DEBUG,
OPT_EXCEPTIONS,
+#if ENABLE_WINUAE_CPU
+ OPT_LILO,
+#endif
OPT_BIOSINTERCEPT,
OPT_CONOUT,
OPT_DISASM,
@@ -458,6 +462,9 @@ static const opt_t HatariOptions[] = {
NULL, "Toggle whether CPU exceptions invoke debugger" },
{ OPT_EXCEPTIONS, NULL, "--debug-except",
"<flags>", "Exceptions invoking debugger, see '--debug-except help'" },
+#if ENABLE_WINUAE_CPU
+ { OPT_LILO, NULL, "--lilo", "<x>", "Boot Linux (see manual page)" },
+#endif
{ OPT_BIOSINTERCEPT, NULL, "--bios-intercept",
"<bool>", "Enable/disable XBIOS command parsing support" },
{ OPT_CONOUT, NULL, "--conout",
@@ -1037,6 +1044,7 @@ bool Opt_ParseParameters(int argc, const char * const argv[])
int ncpu, skips, zoom, planes, cpuclock, threshold, memsize, port, freq, temp, drive;
const char *errstr, *str;
int i, ok = true;
+ size_t len;
int val;
/* Defaults for loading initial memory snap-shots */
@@ -2073,7 +2081,24 @@ bool Opt_ParseParameters(int argc, const char * const argv[])
oldmask, ExceptionDebugMask);
}
break;
-
+#if ENABLE_WINUAE_CPU
+ case OPT_LILO:
+ len = strlen(argv[++i]);
+ len += strlen(ConfigureParams.Lilo.szCommandLine);
+ if (argv[i][0] && len+2 < sizeof(ConfigureParams.Lilo.szCommandLine))
+ {
+ strcat(ConfigureParams.Lilo.szCommandLine, " ");
+ strcat(ConfigureParams.Lilo.szCommandLine, argv[i]);
+ bLoadAutoSave = false;
+ bUseLilo = true;
+ bUseTos = false;
+ }
+ else
+ {
+ return Opt_ShowError(OPT_LILO, argv[i], "kernel command line too long");
+ }
+ break;
+#endif
case OPT_BIOSINTERCEPT:
ok = Opt_Bool(argv[++i], OPT_BIOSINTERCEPT, &bBiosIntercept);
Log_Printf(LOG_DEBUG, "XBIOS 11/20/255 Hatari versions %sabled: "
diff --git a/src/tos.c b/src/tos.c
index a310a34b..2746a722 100644
--- a/src/tos.c
+++ b/src/tos.c
@@ -32,6 +32,7 @@ const char TOS_fileid[] = "Hatari tos.c : " __DATE__ " " __TIME__;
#include "stMemory.h"
#include "str.h"
#include "tos.h"
+#include "lilo.h"
#include "vdi.h"
#include "falcon/dsp.h"
#include "clocks_timings.h"
@@ -1189,9 +1190,15 @@ int TOS_InitImage(void)
/* Set connected devices, memory configuration, etc. */
STMemory_SetDefaultConfig();
- /* Load test program (has to be done after memory has been cleared */
- if (!bUseTos)
+ if (bUseLilo)
{
+ /* load linux */
+ if (!lilo_init())
+ return -1;
+ }
+ else if (!bUseTos)
+ {
+ /* Load test program (has to be done after memory has been cleared) */
if (psTestPrg)
{
Log_Printf(LOG_DEBUG, "Loading '%s' to 0x%x.\n",
--
2.11.0
--------------676EC20B7BBD131CA1167E41
Content-Type: text/x-patch;
name="0002-Linux-loader-adapt-lilo.c-Aranym-code-to-Hatari.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename*0="0002-Linux-loader-adapt-lilo.c-Aranym-code-to-Hatari.patch"