Насколько я знаю, ATAG и cmdline — это способ передачи параметра ядра от загрузчика к ядру. Однако я не могу понять, какие между ними различия.
Когда я портирую драйверы устройств, я использую ATAG и cmdline для передачи параметров ядра из загрузчика в ядро. Я искал их, и я до сих пор не могу понять между ними. Насколько я знаю, ATAG означает список тегов ядра, используемый в архитектуре ARM, а сглаженное дерево устройств работает почти так же, как ATAG. Я, вероятно, могу сказать, что у меня есть некоторая подсказка, чтобы понять ATAG. Однако cmdline так смущает.
Является ли ATAG деревом устройств? И является ли cmdline инструментом для добавления свойства в ATAG?
Означает ли это, что cmdline является компонентом, включенным в ATAG?
См. здесь
Обратите внимание на включая в моем комментарии. И см. данную ссылку в другом комментарии.
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
...
}
Спасибо! Это очень помогает мне понять концепции.
ATAG — это протокол, используемый для передачи параметров загрузчика, включая командную строку, в ядро.