STAG 和命令行有什么区别?
What is difference between ATAG and cmdline?
据我所知,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
...
}
据我所知,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
...
}