linux - ATAG 和 cmdline 有什么区别?
问题描述
据我所知,ATAG 和 cmdline 都是将内核参数从引导加载程序传递到内核的方式。但是我无法理解它们之间有什么区别。
当我移植设备驱动程序时,我使用 ATAG 和 cmdline 将内核参数从引导加载程序传递到内核。我搜索了他们,我仍然无法理解他们之间的关系。据我所知,ATAG 表示 ARM 架构中使用的内核标记列表,而扁平设备树的功能非常类似于 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
...
}
推荐阅读
- css - 如何调整 MediaWiki 中列表项之间的间距?
- jquery - 如何制作安装 jquery 的书签?
- amazon-web-services - 我们可以将组分配给 AWS 中的角色吗
- c# - 如何在队列触发函数中获取队列messageid
- angular - 如何引用 node_module 包中的图像?
- java - 当不将其用于 connectionProvider 时,抑制“org.hibernate.tool.ant.HibernateToolTask”的编译器警告
- python - yield 语句在 python 中是如何工作的?
- python-3.x - 如何创建用于 Jupiter-Notebook 的机器学习/可视化模块(Pandas/Matplotlib)
- r - 基于模型的聚类的轮廓图
- locust - 蝗虫没有跑