On 21. 5. 17., John Nielsen wrote: > Hi all- > > I’m not much of a kernel programmer but I’m trying to maintain/improve the > isboot module, which allows booting directly from iSCSI by reading the iSCSI > Boot Firmware Table (iBFT), bringing up the interface with the details > specified therein and connecting to the specified iSCSI target before trying > to mount root. > > I’m not the original author but as the port maintainer I am hosting the code > here: https://github.com/jnielsendotnet/isboot > > I have a test system where the module loads but fails to find the iBFT. I > reviewed the iBFT code and realized it has a bunch of magic numbers mixed in > with some random memory diving. If I’m reading it right (see > https://github.com/jnielsendotnet/isboot/blob/master/src/ibft.h#L37 and > https://github.com/jnielsendotnet/isboot/blob/master/src/ibft.c#L521), it > looks like it scans all of the (kernel?) memory between 512K and 1M in > 16-byte increments looking for one beginning with the string “iBFT”, which if > it finds will be used as the offset for reading the table. I don’t know where > the 512K and 1M values came from or if they are correct, but I do have a > system where that method does not work. > > IIUC, the iBFT is an ACPI table, and it seems like using ACPI to find it > would be safer and more reliable. So my question is: how does one do that? > Are there other places in the kernel code that do this sort of thing that I > could use as a model? Any gotchas I should know about as a (less-than) novice > kernel programmer?
You may use AcpiGetTable() and AcpiPutTable(), e.g., status = AcpiGetTable(ACPI_SIG_IBFT, ...); Jung-uk Kim