mirror of
https://github.com/reactos/reactos.git
synced 2025-06-25 14:39:43 +00:00
[FREELDR]
Start splitting FreeLdr in the same spirit as our new UEFI boot manager/loader: split into a boot library, the boot manager code, and the NT loader. - The boot library provides the basic support (read INI/INF files, memory management, debugging, ARC compatibility/emulation, ...). - The boot manager code is FreeLdr proper. - The NT loader is used for loading Windows or ReactOS. Because of that fact I rename its directory "windows" into "NTLDR" to underline the fact it can load NT-type OSes (more exactly version 5.x), to which both Windows 2k/XP/2k3 and ReactOS belong. The APIs will certainly be renamed "NtLdrXXX" instead of "WinLdrXXX". - The general PE loader is put into the boot library since it is needed also by FreeLdr proper to be able to load SCSI drivers (on x86/64/... architectures; on ARC systems SCSI support is automatically provided). svn path=/trunk/; revision=70692
This commit is contained in:
parent
ee1d2a2874
commit
c62cd02730
29 changed files with 134 additions and 79 deletions
|
@ -32,37 +32,55 @@ include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf)
|
||||||
|
|
||||||
add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_)
|
add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_)
|
||||||
|
|
||||||
list(APPEND FREELDR_COMMON_SOURCE
|
|
||||||
include/freeldr.h
|
list(APPEND FREELDR_BOOTLIB_COMMON_SOURCE
|
||||||
|
lib/debug.c
|
||||||
|
lib/peloader.c
|
||||||
|
|
||||||
|
lib/comm/rs232.c
|
||||||
|
## add KD support
|
||||||
|
lib/fs/ext2.c
|
||||||
|
lib/fs/fat.c
|
||||||
|
lib/fs/fs.c
|
||||||
|
lib/fs/iso.c
|
||||||
|
lib/fs/ntfs.c
|
||||||
|
lib/inifile/ini_init.c
|
||||||
|
lib/inifile/inifile.c
|
||||||
|
lib/inifile/parse.c
|
||||||
|
lib/mm/meminit.c
|
||||||
|
lib/mm/mm.c
|
||||||
|
lib/mm/heap.c
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND FREELDR_NTLDR_COMMON_SOURCE
|
||||||
|
ntldr/conversion.c
|
||||||
|
ntldr/registry.c
|
||||||
|
ntldr/winldr.c
|
||||||
|
ntldr/wlmemory.c
|
||||||
|
ntldr/wlregistry.c
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND FREELDR_ARC_COMMON_SOURCE
|
||||||
arcname.c
|
arcname.c
|
||||||
cmdline.c
|
|
||||||
custom.c
|
|
||||||
debug.c
|
|
||||||
linuxboot.c
|
|
||||||
miscboot.c
|
|
||||||
machine.c
|
machine.c
|
||||||
options.c
|
|
||||||
oslist.c
|
|
||||||
version.c
|
|
||||||
arch/archwsup.c
|
arch/archwsup.c
|
||||||
cache/blocklist.c
|
cache/blocklist.c
|
||||||
cache/cache.c
|
cache/cache.c
|
||||||
comm/rs232.c
|
|
||||||
disk/disk.c
|
disk/disk.c
|
||||||
disk/partition.c
|
disk/partition.c
|
||||||
disk/ramdisk.c
|
disk/ramdisk.c
|
||||||
#disk/scsiport.c
|
#disk/scsiport.c
|
||||||
fs/ext2.c
|
)
|
||||||
fs/fat.c
|
|
||||||
fs/fs.c
|
list(APPEND FREELDR_COMMON_SOURCE
|
||||||
fs/iso.c
|
include/freeldr.h
|
||||||
fs/ntfs.c
|
cmdline.c
|
||||||
lib/inifile/ini_init.c
|
custom.c
|
||||||
lib/inifile/inifile.c
|
linuxboot.c
|
||||||
lib/inifile/parse.c
|
miscboot.c
|
||||||
mm/meminit.c
|
options.c
|
||||||
mm/mm.c
|
oslist.c
|
||||||
mm/heap.c
|
version.c
|
||||||
ui/directui.c
|
ui/directui.c
|
||||||
ui/gui.c
|
ui/gui.c
|
||||||
ui/minitui.c
|
ui/minitui.c
|
||||||
|
@ -73,12 +91,7 @@ list(APPEND FREELDR_COMMON_SOURCE
|
||||||
video/fade.c
|
video/fade.c
|
||||||
video/palette.c
|
video/palette.c
|
||||||
video/video.c
|
video/video.c
|
||||||
windows/conversion.c
|
)
|
||||||
windows/peloader.c
|
|
||||||
windows/registry.c
|
|
||||||
windows/winldr.c
|
|
||||||
windows/wlmemory.c
|
|
||||||
windows/wlregistry.c)
|
|
||||||
|
|
||||||
if(ARCH STREQUAL "i386")
|
if(ARCH STREQUAL "i386")
|
||||||
list(APPEND FREELDR_COMMON_ASM_SOURCE
|
list(APPEND FREELDR_COMMON_ASM_SOURCE
|
||||||
|
@ -86,9 +99,21 @@ if(ARCH STREQUAL "i386")
|
||||||
arch/i386/i386pnp.S
|
arch/i386/i386pnp.S
|
||||||
arch/i386/i386trap.S
|
arch/i386/i386trap.S
|
||||||
arch/i386/linux.S
|
arch/i386/linux.S
|
||||||
arch/i386/mb.S)
|
arch/i386/mb.S
|
||||||
list(APPEND FREELDR_COMMON_SOURCE
|
)
|
||||||
fs/pxe.c
|
|
||||||
|
list(APPEND FREELDR_NTLDR_COMMON_SOURCE
|
||||||
|
ntldr/arch/i386/winldr.c
|
||||||
|
ntldr/headless.c
|
||||||
|
)
|
||||||
|
|
||||||
|
## list(APPEND FREELDR_COMMON_SOURCE
|
||||||
|
list(APPEND FREELDR_ARC_COMMON_SOURCE
|
||||||
|
lib/fs/pxe.c
|
||||||
|
|
||||||
|
arch/i386/halstub.c
|
||||||
|
arch/i386/ntoskrnl.c
|
||||||
|
|
||||||
arch/i386/archmach.c
|
arch/i386/archmach.c
|
||||||
arch/i386/drivemap.c
|
arch/i386/drivemap.c
|
||||||
arch/i386/hardware.c
|
arch/i386/hardware.c
|
||||||
|
@ -116,10 +141,6 @@ if(ARCH STREQUAL "i386")
|
||||||
arch/i386/xboxmem.c
|
arch/i386/xboxmem.c
|
||||||
arch/i386/xboxrtc.c
|
arch/i386/xboxrtc.c
|
||||||
arch/i386/xboxvideo.c
|
arch/i386/xboxvideo.c
|
||||||
windows/arch/i386/halstub.c
|
|
||||||
windows/arch/i386/ntoskrnl.c
|
|
||||||
windows/arch/i386/winldr.c
|
|
||||||
windows/headless.c
|
|
||||||
disk/scsiport.c)
|
disk/scsiport.c)
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
list(APPEND FREELDR_COMMON_ASM_SOURCE arch/i386/drvmap.S)
|
list(APPEND FREELDR_COMMON_ASM_SOURCE arch/i386/drvmap.S)
|
||||||
|
@ -129,8 +150,17 @@ elseif(ARCH STREQUAL "amd64")
|
||||||
arch/amd64/entry.S
|
arch/amd64/entry.S
|
||||||
arch/amd64/int386.S
|
arch/amd64/int386.S
|
||||||
arch/amd64/pnpbios.S)
|
arch/amd64/pnpbios.S)
|
||||||
list(APPEND FREELDR_COMMON_SOURCE
|
|
||||||
fs/pxe.c
|
list(APPEND FREELDR_NTLDR_COMMON_SOURCE
|
||||||
|
ntldr/arch/amd64/winldr.c
|
||||||
|
)
|
||||||
|
|
||||||
|
## list(APPEND FREELDR_COMMON_SOURCE
|
||||||
|
list(APPEND FREELDR_ARC_COMMON_SOURCE
|
||||||
|
lib/fs/pxe.c
|
||||||
|
|
||||||
|
arch/i386/ntoskrnl.c
|
||||||
|
|
||||||
arch/i386/drivemap.c
|
arch/i386/drivemap.c
|
||||||
arch/i386/hardware.c
|
arch/i386/hardware.c
|
||||||
arch/i386/hwacpi.c
|
arch/i386/hwacpi.c
|
||||||
|
@ -146,22 +176,27 @@ elseif(ARCH STREQUAL "amd64")
|
||||||
arch/i386/pcdisk.c
|
arch/i386/pcdisk.c
|
||||||
arch/i386/pcmem.c
|
arch/i386/pcmem.c
|
||||||
arch/i386/pcrtc.c
|
arch/i386/pcrtc.c
|
||||||
arch/i386/pcvideo.c
|
arch/i386/pcvideo.c)
|
||||||
windows/arch/i386/ntoskrnl.c
|
|
||||||
windows/arch/amd64/winldr.c)
|
|
||||||
elseif(ARCH STREQUAL "arm")
|
elseif(ARCH STREQUAL "arm")
|
||||||
list(APPEND FREELDR_COMMON_ASM_SOURCE
|
list(APPEND FREELDR_COMMON_ASM_SOURCE
|
||||||
arch/arm/boot.S)
|
arch/arm/boot.S)
|
||||||
list(APPEND FREELDR_COMMON_SOURCE
|
|
||||||
|
list(APPEND FREELDR_NTLDR_COMMON_SOURCE
|
||||||
|
ntldr/arch/arm/winldr.c
|
||||||
|
)
|
||||||
|
|
||||||
|
## list(APPEND FREELDR_COMMON_SOURCE
|
||||||
|
list(APPEND FREELDR_ARC_COMMON_SOURCE
|
||||||
arch/arm/entry.c
|
arch/arm/entry.c
|
||||||
arch/arm/macharm.c
|
arch/arm/macharm.c)
|
||||||
windows/arch/arm/winldr.c)
|
|
||||||
else()
|
else()
|
||||||
#TBD
|
#TBD
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_asm_files(freeldr_common_asm ${FREELDR_COMMON_ASM_SOURCE})
|
add_asm_files(freeldr_common_asm ${FREELDR_COMMON_ASM_SOURCE})
|
||||||
add_library(freeldr_common ${FREELDR_COMMON_SOURCE} ${freeldr_common_asm})
|
add_library(freeldr_common ${FREELDR_BOOTLIB_COMMON_SOURCE} ${FREELDR_ARC_COMMON_SOURCE}
|
||||||
|
${FREELDR_NTLDR_COMMON_SOURCE}
|
||||||
|
${FREELDR_COMMON_SOURCE} ${freeldr_common_asm})
|
||||||
add_pch(freeldr_common include/freeldr.h FREELDR_COMMON_SOURCE)
|
add_pch(freeldr_common include/freeldr.h FREELDR_COMMON_SOURCE)
|
||||||
add_dependencies(freeldr_common bugcodes asm xdk)
|
add_dependencies(freeldr_common bugcodes asm xdk)
|
||||||
|
|
||||||
|
@ -173,7 +208,10 @@ endif()
|
||||||
list(APPEND FREELDR_BASE_SOURCE
|
list(APPEND FREELDR_BASE_SOURCE
|
||||||
bootmgr.c # This file is compiled with custom definitions
|
bootmgr.c # This file is compiled with custom definitions
|
||||||
freeldr.c
|
freeldr.c
|
||||||
windows/setupldr.c
|
ntldr/setupldr.c ## Strangely enough this file is needed in GCC builds
|
||||||
|
## even if ${FREELDR_NTLDR_COMMON_SOURCE} is not added,
|
||||||
|
## otherwise we get linking errors with Rtl**Bitmap** APIs.
|
||||||
|
## Do not happen on MSVC builds however...
|
||||||
lib/inffile/inffile.c
|
lib/inffile/inffile.c
|
||||||
lib/rtl/libsupp.c)
|
lib/rtl/libsupp.c)
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
/* INCLUDES ******************************************************************/
|
/* INCLUDES ******************************************************************/
|
||||||
|
|
||||||
#include "ntoskrnl.h"
|
#include <ntoskrnl.h>
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
/* INCLUDES ******************************************************************/
|
/* INCLUDES ******************************************************************/
|
||||||
|
|
||||||
#include "ntoskrnl.h"
|
#include <ntoskrnl.h>
|
||||||
|
|
||||||
/* For KeStallExecutionProcessor */
|
/* For KeStallExecutionProcessor */
|
||||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
#if defined(_M_IX86) || defined(_M_AMD64)
|
40
reactos/boot/freeldr/freeldr/include/conversion.h
Normal file
40
reactos/boot/freeldr/freeldr/include/conversion.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* PROJECT: EFI Windows Loader
|
||||||
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
|
* FILE: boot/freeldr/freeldr/windows/conversion.c
|
||||||
|
* PURPOSE: Physical <-> Virtual addressing mode conversions (arch-specific)
|
||||||
|
* PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef _ZOOM2_
|
||||||
|
/* Arch-specific addresses translation implementation */
|
||||||
|
FORCEINLINE
|
||||||
|
PVOID
|
||||||
|
VaToPa(PVOID Va)
|
||||||
|
{
|
||||||
|
return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE);
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
PVOID
|
||||||
|
PaToVa(PVOID Pa)
|
||||||
|
{
|
||||||
|
return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
FORCEINLINE
|
||||||
|
PVOID
|
||||||
|
VaToPa(PVOID Va)
|
||||||
|
{
|
||||||
|
return Va;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCEINLINE
|
||||||
|
PVOID
|
||||||
|
PaToVa(PVOID Pa)
|
||||||
|
{
|
||||||
|
return Pa;
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -81,6 +81,7 @@
|
||||||
|
|
||||||
/* NTOS loader */
|
/* NTOS loader */
|
||||||
#include <winldr.h>
|
#include <winldr.h>
|
||||||
|
#include <conversion.h> // More-or-less related to MM also...
|
||||||
|
|
||||||
/* File system headers */
|
/* File system headers */
|
||||||
#include <fs/ext2.h>
|
#include <fs/ext2.h>
|
||||||
|
|
|
@ -2,15 +2,18 @@
|
||||||
* PROJECT: FreeLoader
|
* PROJECT: FreeLoader
|
||||||
* LICENSE: GPL - See COPYING in the top level directory
|
* LICENSE: GPL - See COPYING in the top level directory
|
||||||
* FILE: boot/freeldr/freeldr/windows/peloader.c
|
* FILE: boot/freeldr/freeldr/windows/peloader.c
|
||||||
* PURPOSE: Provides routines for loading PE files. To be merged with
|
* PURPOSE: Provides routines for loading PE files.
|
||||||
* arch/i386/loader.c in future
|
* (Deprecated remark) To be merged with arch/i386/loader.c in future.
|
||||||
* This article was very handy during development:
|
*
|
||||||
* http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/
|
|
||||||
* PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
|
* PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org)
|
||||||
|
*
|
||||||
* The source code in this file is based on the work of respective
|
* The source code in this file is based on the work of respective
|
||||||
* authors of PE loading code in ReactOS and Brian Palmer and
|
* authors of PE loading code in ReactOS and Brian Palmer and
|
||||||
* Alex Ionescu's arch/i386/loader.c, and my research project
|
* Alex Ionescu's arch/i386/loader.c, and my research project
|
||||||
* (creating a native EFI loader for Windows)
|
* (creating a native EFI loader for Windows).
|
||||||
|
*
|
||||||
|
* NOTE: This article was very handy during development:
|
||||||
|
* http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* INCLUDES ***************************************************************/
|
/* INCLUDES ***************************************************************/
|
|
@ -17,33 +17,6 @@ DBG_DEFAULT_CHANNEL(WINDOWS);
|
||||||
|
|
||||||
/* FUNCTIONS **************************************************************/
|
/* FUNCTIONS **************************************************************/
|
||||||
|
|
||||||
#ifndef _ZOOM2_
|
|
||||||
/* Arch-specific addresses translation implementation */
|
|
||||||
PVOID
|
|
||||||
VaToPa(PVOID Va)
|
|
||||||
{
|
|
||||||
return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE);
|
|
||||||
}
|
|
||||||
|
|
||||||
PVOID
|
|
||||||
PaToVa(PVOID Pa)
|
|
||||||
{
|
|
||||||
return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
PVOID
|
|
||||||
VaToPa(PVOID Va)
|
|
||||||
{
|
|
||||||
return Va;
|
|
||||||
}
|
|
||||||
|
|
||||||
PVOID
|
|
||||||
PaToVa(PVOID Pa)
|
|
||||||
{
|
|
||||||
return Pa;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
List_PaToVa(_In_ PLIST_ENTRY ListHeadPa)
|
List_PaToVa(_In_ PLIST_ENTRY ListHeadPa)
|
||||||
{
|
{
|
Loading…
Add table
Add a link
Reference in a new issue