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

Reply via email to