[edk2-devel] [PATCH V2] BaseTools/GenBiosId: Add a new tool GenBiosId
Fan, ZhijuX
zhijux.fan at intel.com
Mon Jun 17 10:54:27 UTC 2019
GenBiosId is a tool to generate the BIOS ID binary file which uses
the data from the configuration file.
https://bugzilla.tianocore.org/show_bug.cgi?id=1846
v2:v1 is a tool of C type and v2 is python type.
Cc: Bob Feng <bob.c.feng at intel.com>
Cc: Liming Gao <liming.gao at intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang at intel.com>
---
BaseTools/BinWrappers/PosixLike/GenBiosId | 14 +++
BaseTools/BinWrappers/WindowsLike/GenBiosId.bat | 3 +
BaseTools/Source/Python/GenBiosId/BiosId.env | 27 ++++++
BaseTools/Source/Python/GenBiosId/GenBiosId.py | 118 ++++++++++++++++++++++++
4 files changed, 162 insertions(+)
create mode 100644 BaseTools/BinWrappers/PosixLike/GenBiosId
create mode 100644 BaseTools/BinWrappers/WindowsLike/GenBiosId.bat
create mode 100644 BaseTools/Source/Python/GenBiosId/BiosId.env
create mode 100644 BaseTools/Source/Python/GenBiosId/GenBiosId.py
diff --git a/BaseTools/BinWrappers/PosixLike/GenBiosId b/BaseTools/BinWrappers/PosixLike/GenBiosId
new file mode 100644
index 0000000000..1dd28e9662
--- /dev/null
+++ b/BaseTools/BinWrappers/PosixLike/GenBiosId
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+#python `dirname $0`/RunToolFromSource.py `basename $0` $*
+
+# If a ${PYTHON_COMMAND} command is available, use it in preference to python
+if command -v ${PYTHON_COMMAND} >/dev/null 2>&1; then
+ python_exe=${PYTHON_COMMAND}
+fi
+
+full_cmd=${BASH_SOURCE:-$0} # see http://mywiki.wooledge.org/BashFAQ/028 for a discussion of why $0 is not a good choice here
+dir=$(dirname "$full_cmd")
+exe=$(basename "$full_cmd")
+
+export PYTHONPATH="$dir/../../Source/Python${PYTHONPATH:+:"$PYTHONPATH"}"
+exec "${python_exe:-python}" "$dir/../../Source/Python/$exe/$exe.py" "$@"
diff --git a/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat b/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat
new file mode 100644
index 0000000000..e1f61382c8
--- /dev/null
+++ b/BaseTools/BinWrappers/WindowsLike/GenBiosId.bat
@@ -0,0 +1,3 @@
+ at setlocal
+ at set ToolName=%~n0%
+@%PYTHON_COMMAND% %BASE_TOOLS_PATH%\Source\Python\%ToolName%\%ToolName%.py %*
diff --git a/BaseTools/Source/Python/GenBiosId/BiosId.env b/BaseTools/Source/Python/GenBiosId/BiosId.env
new file mode 100644
index 0000000000..e1e913da76
--- /dev/null
+++ b/BaseTools/Source/Python/GenBiosId/BiosId.env
@@ -0,0 +1,27 @@
+## @file
+# This file is used to define the BIOS ID parameters of the build.
+# This file is processed by GenBiosId.
+# Here, it is just a template and can be customized by user.
+#
+# BIOS ID string format:
+# $(BOARD_ID)$(BOARD_REV).$(BOARD_EXT).$(VERSION_MAJOR).$(BUILD_TYPE)$(VERSION_MINOR).YYMMDDHHMM
+# All fields must have a fixed length. YYMMDDHHMM is UTC time.
+# Example: "EMLATOR1.000.0001.D01.1906141517"
+#
+# If DATE is specified for YYMMDD and TIME is specified for HHMM like below,
+# GenBiosId will use the value of DATE and TIME to fill YYMMDDHHMM,
+# otherwise GenBiosId will fill YYMMDDHHMM with current UTC time of the build machine.
+# DATE = 190614
+# TIME = 1517
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+##
+[config]
+BOARD_ID = EMLATOR
+BOARD_REV = 1
+BOARD_EXT = 000
+BUILD_TYPE = D
+VERSION_MAJOR = 0001
+VERSION_MINOR = 01
diff --git a/BaseTools/Source/Python/GenBiosId/GenBiosId.py b/BaseTools/Source/Python/GenBiosId/GenBiosId.py
new file mode 100644
index 0000000000..8259b17afd
--- /dev/null
+++ b/BaseTools/Source/Python/GenBiosId/GenBiosId.py
@@ -0,0 +1,118 @@
+## @file
+# Trim files preprocessed by compiler
+#
+# Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+
+##
+# Import Modules
+#
+import Common.LongFilePathOs as os
+import sys
+import struct
+import time
+import datetime
+import argparse
+try:
+ from configparser import ConfigParser
+except:
+ from ConfigParser import ConfigParser
+from Common.BuildToolError import *
+from Common.Misc import *
+from Common.DataType import *
+from Common.BuildVersion import gBUILD_VERSION
+import Common.EdkLogger as EdkLogger
+from Common.LongFilePathSupport import OpenLongFilePath as open
+
+_BIOS_Signature = "$IBIOSI$"
+_SectionKeyName = '__name__'
+_SectionName = 'config'
+
+__prog__ = 'GenBiosld'
+__description__ = 'Trim files preprocessed by compiler'
+__copyright__ = 'Copyright (c) 2019, Intel Corporation. All rights reserved.<BR> '
+__version__ = '%s Version %s' % (__prog__, '0.1 ')
+
+_ConfigItem = {
+ "BOARD_ID" : {'Value' : '', 'Length' : 7},
+ "BOARD_REV" : {'Value' : '', 'Length' : 1},
+ "BOARD_EXT" : { 'Value' : '', 'Length' : 3},
+ "BUILD_TYPE" : {'Value' : '', 'Length' :1},
+ "VERSION_MAJOR" : {'Value' : '0000', 'Length' : 4},
+ "VERSION_MINOR" : {'Value' : '00', 'Length' : 2},
+
+}
+
+
+_Usage = "Usage: GenBiosId -i Configfile -o OutputFile [-ob OutputBatchFile]"
+_ConfigSectionNotDefine = "Not support the config file format, need config section"
+_ConfigLenInvalid = "Config item %s length is invalid"
+_ConfigItemInvalid = "Item %s is invalid"
+
+def Main():
+ parser = argparse.ArgumentParser(prog=__prog__,
+ description=__description__ + __copyright__ + _Usage,
+ conflict_handler='resolve')
+ parser.add_argument('-v', '--version', action='version', version=__version__,
+ help="show program's version number and exit")
+ parser.add_argument('-i', '--int', metavar='FILENAME', dest='InputFile', help="Input Config file")
+ parser.add_argument('-o', '--out', metavar='FILENAME', dest='OutputFile', help="Output file")
+ parser.add_argument('-ob', '--batch', metavar='FILENAME', dest='OutputBatchFile', help="OutputBatch file")
+ Options = parser.parse_args()
+ try:
+ EdkLogger.Initialize()
+ if len(sys.argv) !=5 and not (len(sys.argv) == 7 and Options.OutputBatchFile):
+ EdkLogger.error("GenBiosId", OPTION_MISSING, ExtraData=_Usage)
+ elif not Options.InputFile or not Options.OutputFile:
+ EdkLogger.error("GenBiosId", OPTION_MISSING, ExtraData=_Usage)
+ except FatalError as X:
+ return 1
+ InputFile = Options.InputFile
+ OutputFile = Options.OutputFile
+ OutputBatchFile = Options.OutputBatchFile
+ if not os.path.exists(InputFile):
+ EdkLogger.error("GenBiosId", FILE_NOT_FOUND, ExtraData="Input file not found")
+ cf = ConfigParser()
+ cf.optionxform = str
+ cf.read(InputFile)
+ if _SectionName not in cf._sections:
+ EdkLogger.error("GenBiosId", FORMAT_NOT_SUPPORTED, ExtraData=_ConfigSectionNotDefine)
+ for Item in cf._sections[_SectionName]:
+ if Item == _SectionKeyName:
+ continue
+ if Item not in _ConfigItem:
+ EdkLogger.error("GenBiosId", FORMAT_INVALID, ExtraData=_ConfigItemInvalid % Item)
+ _ConfigItem[Item]['Value'] = cf._sections[_SectionName][Item]
+ if len(_ConfigItem[Item]['Value']) != _ConfigItem[Item]['Length']:
+ EdkLogger.error("GenBiosId", FORMAT_INVALID, ExtraData=_ConfigLenInvalid % Item)
+ for Item in _ConfigItem:
+ if not _ConfigItem[Item]['Value']:
+ EdkLogger.error("GenBiosId", FORMAT_UNKNOWN_ERROR, ExtraData="Item %s is missing" % Item)
+ utcnow = datetime.datetime.utcnow()
+ TimeStamp = time.strftime("%y%m%d%H%M", utcnow.timetuple())
+
+ Id_Str = _ConfigItem['BOARD_ID']['Value'] + _ConfigItem['BOARD_REV']['Value'] + '.' + _ConfigItem['BOARD_EXT']['Value'] + '.' + _ConfigItem['VERSION_MAJOR']['Value'] + \
+ '.' + _ConfigItem["BUILD_TYPE"]['Value'] + _ConfigItem['VERSION_MINOR']['Value'] + '.' + TimeStamp
+ with open(OutputFile, 'wb') as FdOut:
+ for i in _BIOS_Signature:
+ FdOut.write(struct.pack('B', ord(i)))
+
+ for i in Id_Str:
+ FdOut.write(struct.pack('H', ord(i)))
+
+ FdOut.write(struct.pack('H', 0x00))
+ if OutputBatchFile:
+ with open(OutputBatchFile, 'w') as FdOut:
+ if sys.platform.startswith('win'):
+ Id_Str = 'SET BIOS_ID=' + Id_Str
+ else:
+ Id_Str = 'export BIOS_ID=' + Id_Str
+ FdOut.write(Id_Str)
+ return 0
+
+if __name__ == '__main__':
+ r = Main()
+ ## 0-127 is a safe return range, and 1 is a standard default error
+ if r < 0 or r > 127: r = 1
+ sys.exit(r)
--
2.14.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#42506): https://edk2.groups.io/g/devel/message/42506
Mute This Topic: https://groups.io/mt/32093449/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 6825 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/edk2-devel-archive/attachments/20190617/586fd34a/attachment.bin>
More information about the edk2-devel-archive
mailing list