用途
目前为止最新Release edk2-stable202105 MdePkg一共声明了67个头文件,MdeModulePkg一共声明了32个头文件,虽说常用API唯手熟尔,但有时候知道有什么,有个全局的印象,用到的时候才能想到去查,不用自己在子函数里造轮子。UDK2017和UDK02018是有提供生成好的包含MdePkg和MdeModulePkg的CHM文档的,本文记录下基于edk2—stable212105用Doxygen生成CHM踩的坑
Tool部署
需要三个工具:doxygen安装包、graphviz安装包、htmlhelp安装包。其中doxygen是一种开源跨平台的文档系统,doxygen可以从一套归档源文件开始,生成HTML格式的在线类浏览器,或离线的LATEX、RTF参考手册
doxygen可以生成好几种格式的文档,要生成.chm格式的手册就必须安装htmlhelp,要生成关系图必须安装依graphviz
doxygen安装包
graphviz安装包
htmlhelp安装包
https://www.microsoft.com/en-us/download/details.aspx?id=21138
生成机制
Doxygen可以根据固定格式的代码注释生成相对应的
*.chm
格式的手册。支持的语言有好多种,如C/C++/C#/Objective-C/PHP/Java等。edk2源码主要是C语言,Doxygen可以识别的固定格式注释有以下几种:
/**
* ...text...
*/
///
///...text...
///
/************************************
* ...text...
************************************/
来看下edk2代码注释的Sample, 所有的函数都使用这样统一格式的注释,还是较为优雅的
/**
Translate a *.BMP graphics image to a GOP blt buffer. If a NULL Blt buffer
is passed in a GopBlt buffer will be allocated by this routine using
EFI_BOOT_SERVICES.AllocatePool(). If a GopBlt buffer is passed in it will be
used if it is big enough.
@param [in] BmpImage Pointer to BMP file.
@param [in] BmpImageSize Number of bytes in BmpImage.
@param [in, out] GopBlt Buffer containing GOP version of BmpImage.
@param [in, out] GopBltSize Size of GopBlt in bytes.
@param [out] PixelHeight Height of GopBlt/BmpImage in pixels.
@param [out] PixelWidth Width of GopBlt/BmpImage in pixels.
@retval RETURN_SUCCESS GopBlt and GopBltSize are returned.
@retval RETURN_INVALID_PARAMETER BmpImage is NULL.
@retval RETURN_INVALID_PARAMETER GopBlt is NULL.
@retval RETURN_INVALID_PARAMETER GopBltSize is NULL.
@retval RETURN_INVALID_PARAMETER PixelHeight is NULL.
@retval RETURN_INVALID_PARAMETER PixelWidth is NULL.
@retval RETURN_UNSUPPORTED BmpImage is not a valid *.BMP image.
@retval RETURN_BUFFER_TOO_SMALL The passed in GopBlt buffer is not big
enough. The required size is returned in
GopBltSize.
@retval RETURN_OUT_OF_RESOURCES The GopBlt buffer could not be allocated.
**/
RETURN_STATUS
EFIAPI
TranslateBmpToGopBlt (
IN VOID *BmpImage,
IN UINTN BmpImageSize,
IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL **GopBlt,
IN OUT UINTN *GopBltSize,
OUT UINTN *PixelHeight,
OUT UINTN *PixelWidth
);