github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/smbios/README.md (about) 1 # SMBIOS Information Library 2 3 TODO: godoc link 4 5 ## Adding a new type 6 7 Types are defined in [DMTF DSP0134](https://www.dmtf.org/dsp/DSP0134). As of 8 July 2019, the most recent published version is 3.2.0. 9 10 Adding a type largely consists of copy-pasting a bunch of information from the 11 doicument to define a Go struct and its string representation. To make that 12 easier, a set of tools is provided ina Gist 13 [here](https://gist.github.com/rojer/4fa173442fb00e24dc7b9d120c2e30af). These 14 are Python scripts that take chunks of data copy-pasted from this document and 15 produce a struct, anum or bit field declaration. These are by no means perfect 16 and do not handle all the cases of weird formatting in the document, and may be 17 broken completely by future formatting changes (but hopefully can be fixed if 18 needed). 19 20 So, adding a type should look something like this: 21 22 * Create `typeXXX_new_information.go` with boilerplate from some other type 23 (copyright, imports). 24 25 * Generate the struct: `tools/gen_struct.py NewInformation >> 26 typeXXX_new_information.go`. 27 28 * Generate enums and bitfields if needed. 29 30 * Examine the generated code and tweak it manually if necessart. 31 32 * Run `gofmt` on it: `gofmt typeXXX_new_information.go`. 33 34 * Add new Type and a corresponding constant to [table_type.go](table_type.go). 35 36 * Implement the constructor function, `NewNewInformation` in this case. 37 38 * Most of the parsing can be done by reflection-based parser, see 39 `parseStruct`. 40 41 * Add data validation and any additional custom parsing code necessary. 42 43 * Implement the `String()` method for `*NewInformation`. 44 45 * Add getter to the `Info` type, `GetNewInformation`.