linux - STAG 和命令行有什么区别?

标签 linux linux-kernel linux-device-driver

据我所知,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/

相关文章:

linux - UDP套接字状态列表?

linux - Linux 中每个进程访问的虚拟页面

linux-kernel - 具有平台驱动程序和字符设备接口(interface)的设备特定数据结构

linux - 在没有 IP SAN 的情况下使用带有 SSL 证书的 Docker 注册表

linux - 什么是设备树?优点和缺点?

linux-kernel - 如何加快android构建系统

linux - 不同子系统驱动程序之间的通信(例如 : IIO and Charging driver)

Java/JDBC/Sybase 登录失败 - JZ00L

linux - p4 命令的搜索输出

linux - mv 等效的 rsync 命令