Adding support for BeagleBoard.
ArmPkg - Supoprt for ARM specific things that can change as the architecture changes. Plus semihosting JTAG drivers. EmbeddedPkg - Generic support for an embeddded platform. Including a light weight command line shell. BeagleBoardPkg - Platform specifics for BeagleBoard. SD Card works, but USB has issues. Looks like a bug in the open source USB stack (Our internal stack works fine). git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9518 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
152
EmbeddedPkg/EblExternCmd/EntryPointGlue.c
Normal file
152
EmbeddedPkg/EblExternCmd/EntryPointGlue.c
Normal file
@@ -0,0 +1,152 @@
|
||||
/** @file
|
||||
Glue code that contains the EFI entry point and converts it to an EBL
|
||||
ASCII Argc, Argv sytle entry point
|
||||
|
||||
|
||||
Copyright (c) 2007, Intel Corporation<BR>
|
||||
Portions copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
**/
|
||||
|
||||
#define CMD_SEPERATOR ';'
|
||||
#define MAX_ARGS 32
|
||||
|
||||
EFI_STATUS
|
||||
EblMain (
|
||||
IN UINTN Argc,
|
||||
IN CHAR8 **Argv
|
||||
);
|
||||
|
||||
|
||||
///
|
||||
/// EdkExternCmdEntry() & ParseArguments() convert the standard EFI entry point
|
||||
/// into Argc, Argv form that calls EblMain().
|
||||
///
|
||||
|
||||
|
||||
/**
|
||||
Parse the CmdLine and break it up into Argc (arg count) and Argv (array of
|
||||
pointers to each argument). The Cmd buffer is altered and seperators are
|
||||
converted to string terminators. This allows Argv to point into CmdLine.
|
||||
A CmdLine can support multiple commands. The next command in the command line
|
||||
is returned if it exists.
|
||||
|
||||
@param CmdLine String to parse for a set of commands
|
||||
@param CmdLineSize Size of CmdLine in bytes
|
||||
@param Argc Returns the number of arguments in the CmdLine current command
|
||||
@param Argv Argc pointers to each string in CmdLine
|
||||
|
||||
@return Next Command in the command line or NULL if non exists
|
||||
**/
|
||||
VOID
|
||||
ParseArguments (
|
||||
IN CHAR8 *CmdLine,
|
||||
IN UINTN CmdLineSize,
|
||||
OUT UINTN *Argc,
|
||||
OUT CHAR8 **Argv
|
||||
)
|
||||
{
|
||||
UINTN Arg;
|
||||
CHAR8 *Char;
|
||||
BOOLEAN LookingForArg;
|
||||
BOOLEAN InQuote;
|
||||
UINTN Index;
|
||||
|
||||
*Argc = 0;
|
||||
if ((CmdLineSize == 0) || (AsciiStrLen (CmdLine) == 0)) {
|
||||
// basic error checking failed on the arguments
|
||||
return;
|
||||
}
|
||||
|
||||
// Walk a single command line. A CMD_SEPERATOR allows mult commands on a single line
|
||||
InQuote = FALSE;
|
||||
LookingForArg = TRUE;
|
||||
for (Char = CmdLine, Arg = 0, Index = 0; *Char != '\0' && *Char != CMD_SEPERATOR; Char++, Index++) {
|
||||
// Perform any text coversion here
|
||||
if (*Char == '\t') {
|
||||
// TAB to space
|
||||
*Char = ' ';
|
||||
}
|
||||
|
||||
if (LookingForArg) {
|
||||
// Look for the beging of an Argv[] entry
|
||||
if (*Char == '"') {
|
||||
Argv[Arg++] = ++Char;
|
||||
LookingForArg = FALSE;
|
||||
InQuote = TRUE;
|
||||
} else if (*Char != ' ') {
|
||||
Argv[Arg++] = Char;
|
||||
LookingForArg = FALSE;
|
||||
}
|
||||
} else {
|
||||
// Looking for the terminator of an Argv[] entry
|
||||
if ((InQuote && (*Char == '"')) || (!InQuote && (*Char == ' '))) {
|
||||
*Char = '\0';
|
||||
LookingForArg = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if ((Arg >= MAX_ARGS) || (Index > CmdLineSize)) {
|
||||
// Error check buffer and exit since it does not look valid
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
*Argc = Arg;
|
||||
|
||||
if (*Char == CMD_SEPERATOR) {
|
||||
// Replace the command delimeter with null
|
||||
*Char = '\0';
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Embedded Boot Loader (EBL) - A simple EFI command line application for embedded
|
||||
devices. PcdEmbeddedAutomaticBootCommand is a complied in commnad line that
|
||||
gets executed automatically. The ; seperator allows multiple commands
|
||||
for each command line.
|
||||
|
||||
@param ImageHandle EFI ImageHandle for this application.
|
||||
@param SystemTable EFI system table
|
||||
|
||||
@return EFI status of the applicaiton
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
EdkExternCmdEntry (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_LOADED_IMAGE_PROTOCOL *ImageInfo;
|
||||
UINTN Argc;
|
||||
CHAR8 *Argv[MAX_ARGS];
|
||||
|
||||
Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid, (VOID **)&ImageInfo);
|
||||
if (EFI_ERROR (Status)) {
|
||||
Argc = 0;
|
||||
} else {
|
||||
// Looks like valid commands were passed in.
|
||||
ParseArguments (ImageInfo->LoadOptions, ImageInfo->LoadOptionsSize, &Argc, Argv);
|
||||
}
|
||||
|
||||
return EblMain (Argc, Argv);
|
||||
}
|
||||
|
||||
|
52
EmbeddedPkg/EblExternCmd/Main.c
Normal file
52
EmbeddedPkg/EblExternCmd/Main.c
Normal file
@@ -0,0 +1,52 @@
|
||||
/** @file
|
||||
Example of an external EBL command. It's loaded via EBL start command.
|
||||
Argc and Argv are passed in via "" of the EBL command line.
|
||||
|
||||
Start fs0:\EdkExternCmd.efi "Argv[0] Argv[1] 2"
|
||||
|
||||
will launch this command with
|
||||
Argv[0] = "Argv[0]"
|
||||
Argv[1] = "Argv[2]"
|
||||
Argv[2] = "3"
|
||||
|
||||
Copyright (c) 2007, Intel Corporation<BR>
|
||||
Portions copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||
|
||||
All rights reserved. This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
**/
|
||||
|
||||
|
||||
/**
|
||||
Entry point with Argc, Argv. Put your code here.
|
||||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EblMain (
|
||||
IN UINTN Argc,
|
||||
IN CHAR8 **Argv
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
AsciiPrint ("Hello World\n");
|
||||
for (Index = 0; Index < Argc; Index++) {
|
||||
AsciiPrint ("Argv[%d] = %a\n", Index, Argv[Index]);
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user