Linux kernel 在小内核引导加载程序中检查malloc之后是否为null?

Linux kernel 在小内核引导加载程序中检查malloc之后是否为null?,linux-kernel,malloc,bootloader,Linux Kernel,Malloc,Bootloader,在许多地方的小内核引导加载程序中,在malloc或memalign之后不检查null 例如:在 void flash_init(void) at flash_cmdlist = memalign(32, 1024); char *target_cmdline(char *org_cmdline) { cmdline = (char *)malloc(MAX_CMDLINE_LEN); memset(cmdline, 0, MAX_CMDLINE_LEN); } 是否假定mal

在许多地方的小内核引导加载程序中,在malloc或memalign之后不检查null

例如:在

void flash_init(void) at flash_cmdlist = memalign(32, 1024);

char *target_cmdline(char *org_cmdline)
{
    cmdline = (char *)malloc(MAX_CMDLINE_LEN);
    memset(cmdline, 0, MAX_CMDLINE_LEN);
}

是否假定malloc在引导时不会返回null

您应该始终检查null,但是,如果引导加载程序无法执行malloc,它将如何恢复?没有地方可以恢复。。。它可能会重新启动,但这可能会导致不停地重新启动。也许这就是他们没有检查null的原因。

分流,您可能应该做一些代码背景研究:)

你提到的代码实际上不是由LK的作者提供的,而是来自Google/Qcom,并且该部分(aboot)是使用遗留android引导加载程序的一些转储创建的,我仍然有一些看起来太相似的文件,但无法将它们发布到公共域


他们不检查null的原因是因为在传统的引导加载程序中,堆被实现为非常基本的,没有空闲的,没有块,只是分配,增加地址,然后忘记它,因为堆无论如何不会被使用很长时间,所以这不是一个问题,但在LK中,它本身非常能够执行类似操作系统的任务,这完全是错误的,因为heap支持free和其他标准的heap函数。

可能他们没有检查错误,因为如果引导加载程序无法malloc,设备将被阻塞;)所以应该检查它是否为null?您应该始终检查null,但是如果引导加载程序无法恢复,它将如何恢复?没有地方可以恢复。。。它可能会重新启动,但这可能会导致不停地重新启动。也许这就是为什么他们没有检查空值的原因。我确实想知道为什么你想在引导加载程序中malloc。。。但这是离题的;p@DipSwitch我们需要内存来初始化基本设置。小内核。我正在寻找的代码是从code aurora LK project下载的。在平台中,分配内存时没有检查null。我想这正是我想说的,代码不是来自LK的作者,而是来自codeaurora Qualcomm,他们那里有糟糕的代码,检查qsd8k的计时器,它可能会导致线程死锁,甚至可能会因为计时器被重置而导致整个系统崩溃,因此如果一个线程在mdelay中被抢占,而另一个线程使用计时器,BOOM。