据我所知,ATAG 和 cmdline 都是将内核参数从引导加载程序传递到内核的方法。 但是我不明白它们之间有什么区别。
当我移植设备驱动程序时,我使用 ATAG 和 cmdline 将内核参数从引导加载程序传递到内核。 我搜了一下,他们之间还是搞不懂。 据我所知,ATAG 表示 ARM 架构中使用的内核标记列表,而 Flattened device tree 的功能与 ATAG 非常相似。 我可以说我得到了一些了解 ATAG 的线索。 然而 cmdline 如此困惑。
ATAG 像设备树吗? cmdline 是一个向 ATAG 添加属性的工具吗?
最佳答案
ATAG 和DeviceTree 是向内核传递参数的两种方法。 命令行是参数之一。
以下面的LK代码(小内核:app/aboot/aboot.c)为例,在函数boot_linux()中, 根据 DEVICE_TREE 的定义,final_cmdline 通过设备树或 atags 传递给内核。
void boot_linux(void *kernel, unsigned *tags,
const char *cmdline, unsigned machtype,
void *ramdisk, unsigned ramdisk_size)
{
...
#if DEVICE_TREE
dprintf(INFO, "Updating device tree: start\n");
/* Update the Device Tree */
ret = update_device_tree((void *)tags,(const char *)final_cmdline, ramdisk, ramdisk_size);
if(ret)
{
dprintf(CRITICAL, "ERROR: Updating Device Tree Failed \n");
ASSERT(0);
}
dprintf(INFO, "Updating device tree: done\n");
#else
/* Generating the Atags */
generate_atags(tags, final_cmdline, ramdisk, ramdisk_size);
#endif
...
}
关于linux - STAG 和命令行有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55568721/