【问题标题】:What is difference between ATAG and cmdline?STAG 和命令行有什么区别?
【发布时间】:2019-08-29 07:48:05
【问题描述】:

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

当我移植设备驱动程序时,我使用 ATAG 和 cmdline 将内核参数从引导加载程序传递到内核。 我搜索了他们,我仍然无法理解他们之间的关系。 据我所知,ATAG 表示 ARM 架构中使用的内核标记列表,而扁平设备树的功能非常类似于 ATAG。 我可能可以说我得到了一些了解 ATAG 的线索。 但是 cmdline 很混乱。

ATAG 像设备树吗? cmdline 是一个向 ATAG 添加属性的工具吗?

【问题讨论】:

  • ATAG 是一种用于将引导加载程序参数(包括 cmdline)传递给内核的协议。
  • 是不是说cmdline是ATAG中包含的一个组件?
  • here
  • 请注意我的评论中的包括。并在另一条评论中查看给定的链接。

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


【解决方案1】:

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

下面以LK代码(Little Kernel: 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
...
}

【讨论】:

  • 谢谢!它对我理解概念有很大帮助。
猜你喜欢
  • 2023-01-26
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多