Add 2011 host tools: InitrdReader and ramdisk image sample

This commit is contained in:
jenkins committed 2011-10-15 16:31:57 +03:00
1 parent 90424967b7
commit 93ec3e6368
17 files changed
+1202

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
# This code depends on make tool being used
DEPFILES=$(wildcard $(addsuffix .d, ${OBJECTFILES}))
ifneq (${DEPFILES},)
include ${DEPFILES}
endif
+128
View File
@@ -0,0 +1,128 @@
#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_PLATFORM_${CONF} platform name (current configuration)
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# build tests
build-tests: .build-tests-post
.build-tests-pre:
# Add your pre 'build-tests' code here...
.build-tests-post: .build-tests-impl
# Add your post 'build-tests' code here...
# run tests
test: .test-post
.test-pre:
# Add your pre 'test' code here...
.test-post: .test-impl
# Add your post 'test' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk
+103
View File
@@ -0,0 +1,103 @@
/*
* dynamic-arr.c
*
* Created on: Sep 3, 2011
* Author: Tiberiu
*/
#include <stdlib.h>
#include "array.h"
void DynamicArrayCreate (uint32 ElemSize, DynamicArray* arr)
{
// Create a simple array. Allocate 16 elems for start
arr->ElemSize = ElemSize;
arr->Size = 0;
arr->Allocated = 0x10;
arr->Data = malloc(0x10 * ElemSize);
}
void DynamicArrayPush (void* item, DynamicArray* arr)
{
// Make sure we have enough space
if (arr->Allocated <= arr->Size)
{
arr->Allocated += 0x10;
arr->Data = realloc(arr->Data, arr->Allocated * arr->ElemSize);
}
// Calculate the address of next item
uint32 addr = (uint32)arr->Data + arr->Size * arr->ElemSize;
// Copy data
memcpy((void*)addr, item, arr->ElemSize);
++arr->Size;
}
void DynamicArrayPop (DynamicArray* arr)
{
// Decrease size
--arr->Size;
}
void DynamicArrayInsert (void* item, uint32 index, DynamicArray* arr)
{
// Make sure we have enough space
if (arr->Allocated <= arr->Size)
{
arr->Allocated += 0x10;
arr->Data = realloc(arr->Data, arr->Allocated * arr->ElemSize);
}
// Move the data out of the way
uint8* buffer = (uint8*) arr->Data;
uint32 start = index * arr->ElemSize;
uint32 end = arr->Size * arr->ElemSize;
for (--end; end >= start; end--)
buffer[end + arr->ElemSize] = buffer[end];
// Insert item
memcpy((void*)((uint32)arr->Data + start) , item, arr->ElemSize);
++ arr->Size;
}
void DynamicArrayRemove (uint32 index, DynamicArray* arr)
{
uint8* buffer = (uint8*) arr->Data;
uint32 start = index * arr->ElemSize;
uint32 end = (arr->Size-1) * arr->ElemSize;
for (; start < end; start++)
buffer[start] = buffer[start + arr->ElemSize];
-- arr->Size;
}
void DynamicArraySwap (uint32 a, uint32 b, DynamicArray* arr)
{
uint8 temp, *buffer = (uint8*) arr->Data;
uint32 addra = a * arr->ElemSize;
uint32 addrb = b * arr->ElemSize;
uint32 i;
for (i = 0; i < arr->ElemSize; i++)
{
// Swap byte i from elem A with byte i from elem B
temp = buffer[addra + i];
buffer[addra + i] = buffer[addrb + i];
buffer[addrb + i] = temp;
}
}
void DynamicArrayDispose (DynamicArray* arr)
{
// Free used data
free(arr->Data);
// Set everything to 0 so we don't attempt to add more items and stuff
arr->Allocated = 0;
arr->Size = 0;
arr->ElemSize = 0;
}
+34
View File
@@ -0,0 +1,34 @@
/*
* array.h
*
* Created on: Sep 3, 2011
* Author: Tiberiu
*/
#ifndef ARRAY_H_
#define ARRAY_H_
#include "fileio.h"
/*******************************************
* Dynamically expanding array *
*******************************************/
typedef struct {
// You can cast the Data to any type of array
// because it contains the actual data, not pointers
void* Data;
uint32 ElemSize;
uint32 Size;
uint32 Allocated;
} DynamicArray;
extern void DynamicArrayCreate (uint32 ElemSize, DynamicArray* arr);
extern void DynamicArrayPush (void* item, DynamicArray* arr);
extern void DynamicArrayPop (DynamicArray* arr);
extern void DynamicArrayInsert (void* item, uint32 index, DynamicArray* arr);
extern void DynamicArrayRemove (uint32 index, DynamicArray* arr);
extern void DynamicArraySwap (uint32 a, uint32 b, DynamicArray* arr);
extern void DynamicArrayDispose (DynamicArray* arr);
#endif /* ARRAY_H_ */
+90
View File
@@ -0,0 +1,90 @@
#ifndef FILEIO_H_
#define FILEIO_H_
#define MAX_FILENAME_LEN 256
#define MAX_MOUNTPOINTNAME_LEN 64
typedef unsigned int uint32;
typedef int int32;
typedef unsigned char uint8;
typedef char* string;
typedef struct { uint32 Date, Time; } TimeSystem;
// Device routines, will read/write 'BlockSize' bytes per call
typedef uint32 (*DevReadRoutine)(uint32 offset, void* buffer);
typedef uint32 (*DevWriteRoutine)(uint32 offset, void* buffer);
enum FileFlags
{
FileFile = 0x1,
FileDirectory = 0x2,
FileCharDevice = 0x3,
FileBlockDevice = 0x4,
FilePipe = 0x5,
FileSymbolLink = 0x6,
FileMountPoint = 0x7,
FileOwnerRead = 0x8,
FileOwnerWrite = 0x10,
FileOwnerExecute = 0x20,
FileGroupRead = 0x40,
FileGroupWrite = 0x80,
FileGroupExecute = 0x100,
FileOtherRead = 0x200,
FileOtherWrite = 0x400,
FileOtherExecute = 0x800,
FileHidden = 0x1000,
};
typedef struct
{
uint32 DeviceId; // The VFS identifies the mounted device that uses this
uint32 Id; // The FS identifies files using this field
char* Name;
/*** Flags look like this:
*
* bits 31 ... 13 | 12 | 11 10 9 | 8 7 6 | 5 4 3 | 2 1 0
* unassigned | Hidden | x w r | x w r | x w r | file type (enum above)
* | others | group | owner |
* Note: In windows FSs, the readonly and system attributes are set
* using permissions mask and owner id (0 = system) */
uint32 Flags, OwnerId, GroupId;
uint32 Size;
// Useful for file systems
void *BufStart, *BufPos, *BufEnd ;
uint32 FsData[8]; // Can store info such as current cluster, etc
} myFILE;
typedef struct _DirectoryEntry
{
char Name[MAX_FILENAME_LEN];
uint32 Flags, OwnerId, GroupId, Size;
TimeSystem TimeCreated, TimeModified, TimeAccessed;
} __attribute__((packed)) DirectoryEntry;
typedef struct {
uint32 Id, FsId;
char Name[MAX_MOUNTPOINTNAME_LEN];
uint32 BlockSize;
DevReadRoutine Read;
DevWriteRoutine Write;
uint32 FsData[8];
} MountPoint;
extern uint32 luxInitrdDevRead (uint32 offset, void* buffer);
extern uint32 luxDetect (MountPoint* mp);
extern DirectoryEntry* luxTest (MountPoint* mp, string path);
extern myFILE* luxOpen (MountPoint* mp, myFILE* f, string path);
extern myFILE* luxClose (MountPoint* mp, myFILE* f);
extern uint32 luxRead (MountPoint* mp, myFILE* f, uint32 elemsz, uint32 n, uint8* buffer);
extern DirectoryEntry* luxReadDir (MountPoint* mp, myFILE* f, uint32 index);
#endif /* FILEIO_H_ */
+186
View File
@@ -0,0 +1,186 @@
/*
* initrd.c
*
* Created on: Sep 1, 2011
* Author: Tiberiu
*/
#define LUXMAGIC 0xCC23AA90
#define OEMSTR "luxram"
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include "fileio.h"
#define Min(a,b) ((a < b) ? (a) : (b))
typedef struct {
DirectoryEntry De;
uint32 Offset;
} __attribute__((packed)) luxDirectoryEntry;
/*typedef struct {
uint32 Count;
luxDirectoryEntry* Entries;
} __attribute__((packed)) luxDirectory;
*/
typedef struct {
uint32 Magic;
char Oem[6];
uint32 Root; // address of this is address of root. The value is the size of root
} __attribute__((packed)) luxHeader;
/**************************************
* DEVICE 'FAKE' READ ROUTINE *
**************************************/
uint32 luxInitrdDevRead (uint32 offset, void* buffer)
{
return LUXMAGIC;
}
/**************************************
* OTHER USEFUL ROUTINES *
**************************************/
// Navigates and returns the directory entry that contains the file/folder
luxDirectoryEntry rootDirectoryEntry;
luxDirectoryEntry* luxGetFile (string path, uint32 data)
{
luxHeader* head = (luxHeader*)data;
uint32 end = strlen(path);
uint32 start, next = 0;
char* tmp;
// Remove ending '/' (if any)
if (path[end-1] == '/') --end;
// Empty string? Return the root
if (end == 0) {
rootDirectoryEntry.De.Flags = 0xB68; // read & execute only
rootDirectoryEntry.De.GroupId = 0; // system group
rootDirectoryEntry.De.OwnerId = 0; // system owner
rootDirectoryEntry.De.Size = sizeof(uint32) + head->Root * sizeof(luxDirectoryEntry);
rootDirectoryEntry.Offset = (uint32)(&head->Root) - data; // calculate offset
return &rootDirectoryEntry;
}
// Make sure path is correct
if (path[0] != '/') return NULL;
// Parse each directory until we find the one containing the file;
uint32 cDir = (uint32)&head->Root;
while (next < end)
{
// Parse string
start = next + 1; // Skip path separator
tmp = strchr(&path[start], '/'); // Find next separator
next = (!tmp) ? end : (uint32)(tmp - path) ; // Mark end of string, or next dir position in path
// strchr doesn't know when to end
if (next >= end) { tmp = 0; next = end; }
// Look for directory
uint32 i, find = 0xffffffff;
uint32 size = *(uint32*)cDir;
luxDirectoryEntry* de = (luxDirectoryEntry*)(cDir + sizeof(uint32));
for (i = 0; i < size && find == 0xffffffff; i++)
if (strncmp(&path[start], de[i].De.Name, next-start) == 0)
find = i;
// Not found? Nope, not good
if (find == 0xffffffff) return NULL;
// End of string? Return directory entry
if (!tmp) return &de[find];
// make sure we don't try to read a file as a folder
if ((de[find].De.Flags & 0x7) != FileDirectory) return NULL;
// Not end of string? Continue
cDir = (uint32) (data + de[find].Offset);
}
return NULL;
}
/**************************************
* myFILE SYSTEM INTERFACE ROUTINES *
**************************************/
uint32 luxDetect (MountPoint* mp)
{
void* buffer = malloc(mp->BlockSize); // must allocate a buffer for non-initrd devices...
uint32 result = mp->Read(0, buffer); // read something
free(buffer); // get rid of the not needed buffer
return (result == LUXMAGIC); // returned magic number? good
}
// Test if a file exists
DirectoryEntry* luxTest (MountPoint* mp, string path)
{
// MountPoint.FsData[0] contains initrd image start address
// luxDirectoryEntry contains a DirectoryEntry
return (DirectoryEntry*) luxGetFile(path, mp->FsData[0]); // Get a directory and see
}
// Open a file
myFILE* luxOpen (MountPoint* mp, myFILE* f, string path)
{
// Find it first. mp->FsData[0] contains initrd image start address.
luxDirectoryEntry* entry = luxGetFile(path, mp->FsData[0]);
// Invalid entry
if (entry == NULL) return NULL;
// Set some data fields
f->Name = entry->De.Name;
f->Flags = entry->De.Flags;
f->GroupId = entry->De.GroupId;
f->OwnerId = entry->De.OwnerId;
f->Size = entry->De.Size;
// Set up the buffer info. We will use these to read/write the file.
f->BufStart = (void*) (mp->FsData[0] + entry->Offset);
f->BufPos = f->BufStart;
f->BufEnd = f->BufStart + entry->De.Size;
// And return it
return f;
}
// Close a file
myFILE* luxClose (MountPoint* mp, myFILE* f)
{
// Just empty buffer info, so we don't attempt to read it again
f->BufStart = f->BufPos = f->BufEnd = NULL;
return f;
}
// Read data from a file
// Returns byte count read
uint32 luxRead (MountPoint* mp, myFILE* f, uint32 elemsz, uint32 n, uint8* buffer)
{
// Make sure we don't read more than we can
uint32 total = Min(elemsz * n, (uint32)f->BufEnd - (uint32)f->BufPos);
memcpy(buffer, f->BufPos, total); // Copy data
f->BufPos = (void*) ((uint32)f->BufPos + total); // Set new buffer position
return total; // Return byte count read
}
// Read contents of a directory
DirectoryEntry* luxReadDir (MountPoint* mp, myFILE* f, uint32 index)
{
uint32 size = *(uint32*)f->BufStart;
luxDirectoryEntry* de = (luxDirectoryEntry*) ((uint32)f->BufStart + sizeof(uint32));
if (index >= size) return NULL;
return (DirectoryEntry*) &de[index];
}
+57
View File
@@ -0,0 +1,57 @@
/*
* File: main.c
* Author: Tiberiu
*
* Created on September 3, 2011, 3:54 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include "array.h"
#include "fileio.h"
MountPoint Mp = {0, 0, "dev", 0, luxInitrdDevRead, 0, {0,0,0,0,0,0,0,0}};
void* buffer;
void InstallFs(char* file)
{
// Detect
uint32 detect = luxDetect(&Mp);
printf("Detection result: %u\n", detect);
// Read initrd file
FILE* f = fopen(file, "r"); // Open
fseek(f, 0, SEEK_END); // Seek to the end
uint32 size = ftell(f); // Get file size
fseek(f, 0, 0);
buffer = malloc(size); // Allocate enough space
fread(buffer, 1, size, f); // Read it
fclose(f); // Close file
// Set up data
Mp.FsData[0] = (uint32)buffer; // ModuleStart
Mp.FsData[1] = (uint32)buffer + size; // ModuleEnd
}
int main(int argc, char** argv) {
InstallFs("C:\\Dev\\lux\\Modules\\initrd.lux");
myFILE file;
luxOpen (&Mp, &file, "/info.h");
uint8* bf = malloc(0x100);
uint32 sz, i;
while ((sz = luxRead(&Mp, &file, 1, 0x100, bf)))
{
for (i = 0; i < sz; i++) printf("%c", bf[i]);
}
luxClose(&Mp, &file);
free(bf);
free(buffer);
return 0;
}
@@ -0,0 +1,94 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Environment
MKDIR=mkdir
CP=cp
GREP=grep
NM=nm
CCADMIN=CCadmin
RANLIB=ranlib
CC=gcc.exe
CCC=g++.exe
CXX=g++.exe
FC=
AS=as.exe
# Macros
CND_PLATFORM=MinGW-Windows
CND_CONF=Debug
CND_DISTDIR=dist
# Include project Makefile
include Makefile
# Object Directory
OBJECTDIR=build/${CND_CONF}/${CND_PLATFORM}
# Object Files
OBJECTFILES= \
${OBJECTDIR}/initrd.o \
${OBJECTDIR}/main.o \
${OBJECTDIR}/array.o
# C Compiler Flags
CFLAGS=
# CC Compiler Flags
CCFLAGS=
CXXFLAGS=
# Fortran Compiler Flags
FFLAGS=
# Assembler Flags
ASFLAGS=
# Link Libraries and Options
LDLIBSOPTIONS=
# Build Targets
.build-conf: ${BUILD_SUBPROJECTS}
"${MAKE}" -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/initrdreader.exe
dist/Debug/MinGW-Windows/initrdreader.exe: ${OBJECTFILES}
${MKDIR} -p dist/Debug/MinGW-Windows
${LINK.c} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/initrdreader ${OBJECTFILES} ${LDLIBSOPTIONS}
${OBJECTDIR}/initrd.o: initrd.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -g -MMD -MP -MF $@.d -o ${OBJECTDIR}/initrd.o initrd.c
${OBJECTDIR}/main.o: main.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -g -MMD -MP -MF $@.d -o ${OBJECTDIR}/main.o main.c
${OBJECTDIR}/array.o: array.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -g -MMD -MP -MF $@.d -o ${OBJECTDIR}/array.o array.c
# Subprojects
.build-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
${RM} -r build/Debug
${RM} dist/Debug/MinGW-Windows/initrdreader.exe
# Subprojects
.clean-subprojects:
# Enable dependency checking
.dep.inc: .depcheck-impl
include .dep.inc
@@ -0,0 +1,94 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a -pre and a -post target defined where you can add customized code.
#
# This makefile implements configuration specific macros and targets.
# Environment
MKDIR=mkdir
CP=cp
GREP=grep
NM=nm
CCADMIN=CCadmin
RANLIB=ranlib
CC=gcc.exe
CCC=g++.exe
CXX=g++.exe
FC=
AS=as.exe
# Macros
CND_PLATFORM=MinGW-Windows
CND_CONF=Release
CND_DISTDIR=dist
# Include project Makefile
include Makefile
# Object Directory
OBJECTDIR=build/${CND_CONF}/${CND_PLATFORM}
# Object Files
OBJECTFILES= \
${OBJECTDIR}/initrd.o \
${OBJECTDIR}/main.o \
${OBJECTDIR}/array.o
# C Compiler Flags
CFLAGS=
# CC Compiler Flags
CCFLAGS=
CXXFLAGS=
# Fortran Compiler Flags
FFLAGS=
# Assembler Flags
ASFLAGS=
# Link Libraries and Options
LDLIBSOPTIONS=
# Build Targets
.build-conf: ${BUILD_SUBPROJECTS}
"${MAKE}" -f nbproject/Makefile-Release.mk dist/Release/MinGW-Windows/initrdreader.exe
dist/Release/MinGW-Windows/initrdreader.exe: ${OBJECTFILES}
${MKDIR} -p dist/Release/MinGW-Windows
${LINK.c} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/initrdreader ${OBJECTFILES} ${LDLIBSOPTIONS}
${OBJECTDIR}/initrd.o: initrd.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/initrd.o initrd.c
${OBJECTDIR}/main.o: main.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/main.o main.c
${OBJECTDIR}/array.o: array.c
${MKDIR} -p ${OBJECTDIR}
${RM} $@.d
$(COMPILE.c) -O2 -MMD -MP -MF $@.d -o ${OBJECTDIR}/array.o array.c
# Subprojects
.build-subprojects:
# Clean Targets
.clean-conf: ${CLEAN_SUBPROJECTS}
${RM} -r build/Release
${RM} dist/Release/MinGW-Windows/initrdreader.exe
# Subprojects
.clean-subprojects:
# Enable dependency checking
.dep.inc: .depcheck-impl
include .dep.inc
+133
View File
@@ -0,0 +1,133 @@
#
# Generated Makefile - do not edit!
#
# Edit the Makefile in the project folder instead (../Makefile). Each target
# has a pre- and a post- target defined where you can add customization code.
#
# This makefile implements macros and targets common to all configurations.
#
# NOCDDL
# Building and Cleaning subprojects are done by default, but can be controlled with the SUB
# macro. If SUB=no, subprojects will not be built or cleaned. The following macro
# statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf
# and .clean-reqprojects-conf unless SUB has the value 'no'
SUB_no=NO
SUBPROJECTS=${SUB_${SUB}}
BUILD_SUBPROJECTS_=.build-subprojects
BUILD_SUBPROJECTS_NO=
BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}}
CLEAN_SUBPROJECTS_=.clean-subprojects
CLEAN_SUBPROJECTS_NO=
CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
# Project Name
PROJECTNAME=InitrdReader
# Active Configuration
DEFAULTCONF=Debug
CONF=${DEFAULTCONF}
# All Configurations
ALLCONFS=Debug Release
# build
.build-impl: .build-pre .validate-impl .depcheck-impl
@#echo "=> Running $@... Configuration=$(CONF)"
"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf
# clean
.clean-impl: .clean-pre .validate-impl .depcheck-impl
@#echo "=> Running $@... Configuration=$(CONF)"
"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf
# clobber
.clobber-impl: .clobber-pre .depcheck-impl
@#echo "=> Running $@..."
for CONF in ${ALLCONFS}; \
do \
"${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf; \
done
# all
.all-impl: .all-pre .depcheck-impl
@#echo "=> Running $@..."
for CONF in ${ALLCONFS}; \
do \
"${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf; \
done
# build tests
.build-tests-impl: .build-impl .build-tests-pre
@#echo "=> Running $@... Configuration=$(CONF)"
"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-tests-conf
# run tests
.test-impl: .build-tests-impl .test-pre
@#echo "=> Running $@... Configuration=$(CONF)"
"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .test-conf
# dependency checking support
.depcheck-impl:
@echo "# This code depends on make tool being used" >.dep.inc
@if [ -n "${MAKE_VERSION}" ]; then \
echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \
echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \
echo "include \$${DEPFILES}" >>.dep.inc; \
echo "endif" >>.dep.inc; \
else \
echo ".KEEP_STATE:" >>.dep.inc; \
echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \
fi
# configuration validation
.validate-impl:
@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
then \
echo ""; \
echo "Error: can not find the makefile for configuration '${CONF}' in project ${PROJECTNAME}"; \
echo "See 'make help' for details."; \
echo "Current directory: " `pwd`; \
echo ""; \
fi
@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
then \
exit 1; \
fi
# help
.help-impl: .help-pre
@echo "This makefile supports the following configurations:"
@echo " ${ALLCONFS}"
@echo ""
@echo "and the following targets:"
@echo " build (default target)"
@echo " clean"
@echo " clobber"
@echo " all"
@echo " help"
@echo ""
@echo "Makefile Usage:"
@echo " make [CONF=<CONFIGURATION>] [SUB=no] build"
@echo " make [CONF=<CONFIGURATION>] [SUB=no] clean"
@echo " make [SUB=no] clobber"
@echo " make [SUB=no] all"
@echo " make help"
@echo ""
@echo "Target 'build' will build a specific configuration and, unless 'SUB=no',"
@echo " also build subprojects."
@echo "Target 'clean' will clean a specific configuration and, unless 'SUB=no',"
@echo " also clean subprojects."
@echo "Target 'clobber' will remove all built files from all configurations and,"
@echo " unless 'SUB=no', also from subprojects."
@echo "Target 'all' will will build all configurations and, unless 'SUB=no',"
@echo " also build subprojects."
@echo "Target 'help' prints this message."
@echo ""
@@ -0,0 +1,24 @@
#
# Generated - do not edit!
#
# NOCDDL
#
CND_BASEDIR=`pwd`
CND_BUILDDIR=build
CND_DISTDIR=dist
# Debug configuration
CND_PLATFORM_Debug=MinGW-Windows
CND_ARTIFACT_DIR_Debug=dist/Debug/MinGW-Windows
CND_ARTIFACT_NAME_Debug=initrdreader
CND_ARTIFACT_PATH_Debug=dist/Debug/MinGW-Windows/initrdreader
CND_PACKAGE_DIR_Debug=dist/Debug/MinGW-Windows/package
CND_PACKAGE_NAME_Debug=initrdreader.tar
CND_PACKAGE_PATH_Debug=dist/Debug/MinGW-Windows/package/initrdreader.tar
# Release configuration
CND_PLATFORM_Release=MinGW-Windows
CND_ARTIFACT_DIR_Release=dist/Release/MinGW-Windows
CND_ARTIFACT_NAME_Release=initrdreader
CND_ARTIFACT_PATH_Release=dist/Release/MinGW-Windows/initrdreader
CND_PACKAGE_DIR_Release=dist/Release/MinGW-Windows/package
CND_PACKAGE_NAME_Release=initrdreader.tar
CND_PACKAGE_PATH_Release=dist/Release/MinGW-Windows/package/initrdreader.tar
@@ -0,0 +1,74 @@
#!/bin/bash -x
#
# Generated - do not edit!
#
# Macros
TOP=`pwd`
CND_PLATFORM=MinGW-Windows
CND_CONF=Debug
CND_DISTDIR=dist
NBTMPDIR=build/${CND_CONF}/${CND_PLATFORM}/tmp-packaging
TMPDIRNAME=tmp-packaging
OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/initrdreader
OUTPUT_BASENAME=initrdreader
PACKAGE_TOP_DIR=initrdreader/
# Functions
function checkReturnCode
{
rc=$?
if [ $rc != 0 ]
then
exit $rc
fi
}
function makeDirectory
# $1 directory path
# $2 permission (optional)
{
mkdir -p "$1"
checkReturnCode
if [ "$2" != "" ]
then
chmod $2 "$1"
checkReturnCode
fi
}
function copyFileToTmpDir
# $1 from-file path
# $2 to-file path
# $3 permission
{
cp "$1" "$2"
checkReturnCode
if [ "$3" != "" ]
then
chmod $3 "$2"
checkReturnCode
fi
}
# Setup
cd "${TOP}"
mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package
rm -rf ${NBTMPDIR}
mkdir -p ${NBTMPDIR}
# Copy files and create directories and links
cd "${TOP}"
makeDirectory "${NBTMPDIR}/initrdreader/bin"
copyFileToTmpDir "${OUTPUT_PATH}.exe" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}.exe" 0755
# Generate tar file
cd "${TOP}"
rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/initrdreader.tar
cd ${NBTMPDIR}
tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/initrdreader.tar *
checkReturnCode
# Cleanup
cd "${TOP}"
rm -rf ${NBTMPDIR}
@@ -0,0 +1,74 @@
#!/bin/bash -x
#
# Generated - do not edit!
#
# Macros
TOP=`pwd`
CND_PLATFORM=MinGW-Windows
CND_CONF=Release
CND_DISTDIR=dist
NBTMPDIR=build/${CND_CONF}/${CND_PLATFORM}/tmp-packaging
TMPDIRNAME=tmp-packaging
OUTPUT_PATH=${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/initrdreader
OUTPUT_BASENAME=initrdreader
PACKAGE_TOP_DIR=initrdreader/
# Functions
function checkReturnCode
{
rc=$?
if [ $rc != 0 ]
then
exit $rc
fi
}
function makeDirectory
# $1 directory path
# $2 permission (optional)
{
mkdir -p "$1"
checkReturnCode
if [ "$2" != "" ]
then
chmod $2 "$1"
checkReturnCode
fi
}
function copyFileToTmpDir
# $1 from-file path
# $2 to-file path
# $3 permission
{
cp "$1" "$2"
checkReturnCode
if [ "$3" != "" ]
then
chmod $3 "$2"
checkReturnCode
fi
}
# Setup
cd "${TOP}"
mkdir -p ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package
rm -rf ${NBTMPDIR}
mkdir -p ${NBTMPDIR}
# Copy files and create directories and links
cd "${TOP}"
makeDirectory "${NBTMPDIR}/initrdreader/bin"
copyFileToTmpDir "${OUTPUT_PATH}.exe" "${NBTMPDIR}/${PACKAGE_TOP_DIR}bin/${OUTPUT_BASENAME}.exe" 0755
# Generate tar file
cd "${TOP}"
rm -f ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/initrdreader.tar
cd ${NBTMPDIR}
tar -vcf ../../../../${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/package/initrdreader.tar *
checkReturnCode
# Cleanup
cd "${TOP}"
rm -rf ${NBTMPDIR}
@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="69">
<logicalFolder name="root" displayName="root" projectFiles="true">
<logicalFolder name="HeaderFiles"
displayName="Header Files"
projectFiles="true"
kind="SOURCE_LOGICAL_FOLDER">
</logicalFolder>
<logicalFolder name="ResourceFiles"
displayName="Resource Files"
projectFiles="true"
kind="SOURCE_LOGICAL_FOLDER">
</logicalFolder>
<logicalFolder name="SourceFiles"
displayName="Source Files"
projectFiles="true"
kind="SOURCE_LOGICAL_FOLDER">
<itemPath>main.c</itemPath>
</logicalFolder>
<logicalFolder name="TestFiles"
displayName="Test Files"
projectFiles="false"
kind="TEST_LOGICAL_FOLDER">
</logicalFolder>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
projectFiles="false"
kind="IMPORTANT_FILES_FOLDER">
<itemPath>Makefile</itemPath>
</logicalFolder>
<itemPath>array.c</itemPath>
<itemPath>array.h</itemPath>
<itemPath>fileio.h</itemPath>
<itemPath>initrd.c</itemPath>
</logicalFolder>
<projectmakefile>Makefile</projectmakefile>
<confs>
<conf name="Debug" type="1">
<toolsSet>
<developmentServer>localhost</developmentServer>
<compilerSet>MinGW|MinGW</compilerSet>
<platform>3</platform>
</toolsSet>
<compileType>
</compileType>
</conf>
<conf name="Release" type="1">
<toolsSet>
<developmentServer>localhost</developmentServer>
<compilerSet>MinGW|MinGW</compilerSet>
<platform>3</platform>
</toolsSet>
<compileType>
<cTool>
<developmentMode>5</developmentMode>
</cTool>
<ccTool>
<developmentMode>5</developmentMode>
</ccTool>
<fortranCompilerTool>
<developmentMode>5</developmentMode>
</fortranCompilerTool>
<asmTool>
<developmentMode>5</developmentMode>
</asmTool>
</compileType>
</conf>
</confs>
</configurationDescriptor>
+20
View File
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.cnd.makeproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/make-project/1">
<name>InitrdReader</name>
<make-project-type>0</make-project-type>
<c-extensions>c</c-extensions>
<cpp-extensions/>
<header-extensions>h</header-extensions>
<sourceEncoding>UTF-8</sourceEncoding>
<make-dep-projects/>
<sourceRootList/>
<confList>
<confElem>Debug</confElem>
<confElem>Release</confElem>
</confList>
</data>
</configuration>
</project>
+17
View File
@@ -0,0 +1,17 @@
# exp
Side projects from the original 2011 luxOS development, written as NetBeans
(and a few Eclipse) projects. They are user-space programs that were used to
build, test and prototype pieces of the OS on the host machine, so they are
not part of the kernel build. Each folder is kept as it was, minus build
output and NetBeans private settings.
## Host tools
- `InitrdReader/` (Sep 2011): reads a luxOS initrd image with the same
filesystem code the kernel uses (initrd.c), to check that images produced
by the ramdisk writer can be parsed. Windows/MinGW build.
- `RamdiskWriter/myram.sys` (Sep 2011): sample ramdisk image produced by the
ramdisk writer. The writer's sources are in `Modules/Rom image maker/`;
this is the 2011-09-05 variant of the image, which differs from the copy
stored there.
Binary file not shown.