据我所知,ATAG和cmdline都是将内核参数从引导加载程序传递到内核的方法。
但是我不明白他们之间有什么不同。
当我移植设备驱动程序时,我使用ATAG和cmdline将内核参数从引导加载程序传递到内核。
我搜了一下,还是不明白。
据我所知,ATAG意味着ARM架构中使用的内核标记列表,而扁平化的设备树函数与ATAG非常相似。
我可以说我有一些线索来理解ATAG。
然而,cmdline让人困惑。
ATAG类似于设备树吗?cmdline是一个向ATAG添加属性的工具吗?

最佳答案

ATAG和DeviceTree是向内核传递参数的两种方法。
命令行是参数之一。
以下面的LK代码(小内核:app/aboot/aboot.c)为例,在函数boot_linux()中,
根据设备树的定义,最终的命令行可以通过设备树或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 - ATAG和cmdline有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55568721/

10-10 09:23