高通uefi的abl增加新的kernel cmdlin标签经验分享

编程入门 行业动态 更新时间:2024-10-11 13:25:41

<a href=https://www.elefans.com/category/jswz/34/1768455.html style=高通uefi的abl增加新的kernel cmdlin标签经验分享"/>

高通uefi的abl增加新的kernel cmdlin标签经验分享

高通uefi的abl增加新的kernel cmdlin标签经验分享

a、在此先介绍一下abl中拉起bootimage的流程:

代码路径:

bootloader/edk2/QcomModulePkg/Application/LinuxLoader/LinuxLoader.c

函数头部:

/**Linux Loader Application EntryPoint@param[in] ImageHandle    The firmware allocated handle for the EFI image.@param[in] SystemTable    A pointer to the EFI System Table.@retval EFI_SUCCESS       The entry point is executed successfully.@retval other             Some error occurs when executing this entry point.**/EFI_STATUS EFIAPI  __attribute__ ( (no_sanitize ("safe-stack")))
LinuxLoaderEntry (IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)

这个函数主要是在加载bootimage和dtbimage及加载之前做一些检查,例如a/b分区检查,重启原因检查,是否有开机按键事件等,具体代码我就不一介绍,只介绍下这小段:

  if (!BootIntoFastboot) {BootInfo Info = {0};Info.MultiSlotBoot = MultiSlotBoot;Info.BootIntoRecovery = BootIntoRecovery;Info.BootReasonAlarm = BootReasonAlarm;Status = LoadImageAndAuth (&Info);if (Status != EFI_SUCCESS) {DEBUG ((EFI_D_ERROR, "LoadImageAndAuth failed: %r\n", Status));goto fastboot;}BootLinux (&Info);}

其中最后的BootLinux 就是加载bootimage的函数,函数的声明代码路径:

bootloader/edk2/QcomModulePkg/Library/BootLib/BootLinux.c

函数头部:

EFI_STATUS BootLinux (BootInfo *Info)

这个函数主要是做一些镜像检查,还有dtb的选择,但我这里只介绍这段:

Status = UpdateCmdLine (BootParamlistPtr.CmdLine, FfbmStr, Recovery,AlarmBoot, Info->VBCmdLine, &BootParamlistPtr.FinalCmdLine);if (EFI_ERROR (Status)) {DEBUG ((EFI_D_ERROR, "Error updating cmdline. Device Error %r\n", Status));return Status;}

函数名就简白,就是更新cmdline的,函数声明代码路径:

/*Update command line: appends boot information to the original commandline*that is taken from boot image header*/
EFI_STATUS
UpdateCmdLine (CONST CHAR8 *CmdLine,CHAR8 *FfbmStr,BOOLEAN Recovery,BOOLEAN AlarmBoot,CONST CHAR8 *VBCmdLine,CHAR8 **FinalCmdLine)
{

这个函数没什么介绍的了,看到函数后面这个,就是真正更新cmdlind的函数:

Status = UpdateCmdLineParams (&Param, FinalCmdLine);if (Status != EFI_SUCCESS) {return Status;}

当然由于传参都是指针,顾名思义这里也是将自己的字段加上cmdline指针上,但实际加载我们不需要理解,实际修改这里就能满足要求了。

b、下面给一个例子:

UpdateCmdLineParams 函数修改:

+  Src = Param->BoardCmdLine;
+  AsciiStrCatS (Dst, MaxCmdLineLen, Src);

UpdateCmdLine 函数修改:

+  UINT32 BoardCmdNum = 0;
+  CHAR8 BoardCmdLineStr[BOARD_CMDLINE_LENGTH] = "\0";+  BoardCmdNum = 1;
+  AsciiSPrint (BoardCmdLineStr, sizeof (BoardCmdLineStr),
+                "%a%d", BoardCmdline, BoardCmdNum);
+  CmdLineLen += AsciiStrLen (BoardCmdLineStr);+  Param.BoardCmdLine = BoardCmdLineStr;

由于没有贴全,注意修改的位置及变量声明

更多推荐

高通uefi的abl增加新的kernel cmdlin标签经验分享

本文发布于:2024-02-11 11:34:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1680766.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:高通   标签   经验   uefi   kernel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!