ATAG和cmdline有什么区别?

时间:2019-04-08 08:00:50

标签: linux linux-kernel linux-device-driver

据我所知,ATAG和cmdline都是将内核参数从引导加载程序传递到内核的两种方式。 但是我不明白它们之间有什么区别。

当我移植设备驱动程序时,我使用ATAG和cmdline将内核参数从引导加载程序传递到内核。 我搜寻了它们,但我仍然无法理解它们之间。 据我所知,ATAG表示在ARM体系结构中使用的内核标记列表,而Flattened设备树功能非常类似于ATAG。 我大概可以说我有一些了解ATAG的线索。 但是cmdline如此令人困惑。

ATAG是否类似于设备树? cmdline是向ATAG添加属性的工具吗?

1 个答案:

答案 0 :(得分:0)

ATAG和DeviceTree是将参数传递给内核的两种方法。 命令行是参数之一。

以下面的LK代码(Little Kernel:app / aboot / aboot.c)为例,在函数boot_linux()中, 根据DEVICE_TREE的定义,final_cmdline通过设备树或通过标签传递给内核。

    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
...
}