BIOS工程师一枚,工作中常碰到用PXE装系统的情况,有的客户用ipxe装系统,有时会遇到一些问题,所以研究一下ipxe的内容是必须的。
ipxe 的官网: https://ipxe.org/download
code执行的大概流程:
ipxe执行大体可以分为3个部分,初始化:initialise,加载一些驱动:startup,boot到加载的image:ipxe
在ipxe的code中比较喜欢将函数编译到表中,然后遍历表来执行里面的函数,搞懂这些对理解ipxe的code事半功倍
比如:initialise
可以看到它是在执行INIT_FNS里面的函数,
什么样的函数放到INIT_FNS里面呢,其实是用 init_fn 声明的一些函数会被编译到里面,比如:
了解这个小知识点之后就可以轻松理清pixe执行的脉络了,
根据这一点可以知道 startup 执行的是 STARTUP_FNS 里面的代码;
追踪ipxe的脉络,可以看到
1、在 initialise 里面会初始化image的data,或从文件系统里面获取image,或从网络端拉取image;
2、在startup里面会将initalise里面初始化的image的data,注册到系统中;
3、在pxe里面会执行注册到系统中的image;
ipxe的执行大体就是这个流程,详细信息可以追code再慢慢分析。
有一点要特殊关注的是在startup中会disconnect UEFI的一些网络驱动,然后在ipxe的这个环境中重新connect,这时比较容易出一些部件兼容性的问题。