2015-10-23 3 views
0

Пример таблицы MTD перегородки в арку/руки/маш-omap2/борт-omap3beagle.c для BeagleBoard http://lxr.free-electrons.com/source/arch/arm/mach-omap2/board-omap3beagle.cКак ядро ​​Linux создает узлы/dev/mtdx?

static struct mtd_partition omap3beagle_nand_partitions[] = { 
/* All the partition sizes are listed in terms of NAND block size */ 
{ 
    .name  = "X-Loader", 
    .offset  = 0, 
    .size  = 4 * NAND_BLOCK_SIZE, 
    .mask_flags = MTD_WRITEABLE, /* force read-only */ 
}, 
{ 
    .name  = "U-Boot", 
    .offset  = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ 
    .size  = 15 * NAND_BLOCK_SIZE, 
    .mask_flags = MTD_WRITEABLE, /* force read-only */ 
}, 
{ 
    .name  = "U-Boot Env", 
    .offset  = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ 
    .size  = 1 * NAND_BLOCK_SIZE, 
}, 
{ 
    .name  = "Kernel", 
    .offset  = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ 
    .size  = 32 * NAND_BLOCK_SIZE, 
}, 
{ 
    .name  = "File System", 
    .offset  = MTDPART_OFS_APPEND, /* Offset = 0x680000 */ 
    .size  = MTDPART_SIZ_FULL, 
}, 
}; 

Еще ссылка государства это: http://landley.net/kdocs/Documentation/DocBook/xhtml-nochunks/mtdnand.html В этой ссылке Nand драйвер флэш board_init функция mtd_partition structure передается add_mtd_partitions(board_mtd, partition_info, NUM_PARTITIONS); функция в файле mtdcore.c файл.

Если я прав, тогда файл mtdcores.c создает разделы mtd?

Теперь у меня есть два вопроса:

1> Если я прав, то omap3_beagle_init функция в файле /board-omap3beagle.c будет вызывать функцию omap_nand_flash_init это будет инициализировать NAND & создать/DEV/mdtx узлы ,

Если я не прав, то что создает узлы/dev/mtd0? Создает ли ядро ​​его или драйвер NAND?

2> Также является ли функция omap3_beagle_init первой функцией, вызываемой ядром? С какого файла в ядре Linux вызывается?

+0

Пожалуйста, любой, кто может предложить на этом посту .. !! – Katoch

ответ

1

1/Существует несколько способов создания файлов устройств. Обычно они создаются с использованием devtmpfs, который является частью ядра. Когда драйвер или подсистема регистрирует новое устройство, вызывается devtmpfs_create_node Это пробуждает поток, который добавит узел устройства в файловую систему devtmpfs.

Если ваше ядро ​​не использует devtmpfs, вам необходимо создать эти файлы устройств вручную, используя mknod. Также mdev также является инструментом, который может создавать файл устройства. Наконец, udev используется для создания файлов устройств, но теперь полагается на devtmpfs.

2/omap3_beagle_init окончательно не является первой функцией, вызываемой ядром. После декомпрессии самой точкой входа является start_kernel в init/main.c. Это независимая архитектура. omap3_beagle_init вызывается из customize_machine arch_initcall в arch/arm/kernel/setup.c

+0

Спасибо за ответ ... Если mtd-раздел определен статически в struct mtd_partition, тогда как ядро ​​создаст узлы/dev/mtdx ... потому что udev все еще не работает .. также какая часть ядра вызовет devtmpfs_create_node для создания/dev/mtdx node ..? – Katoch

+0

Подсистема mtd. 'add_mtd_partitions' ->' add_mtd_device' -> 'device_register' ->' device_add' -> 'devtmpfs_create_node' –

+0

Последний пункт с моей стороны devtmpfs создает файловую систему tmpfs, которая может быть установлена ​​в каталоге/dev после монтирования rootfs ... поэтому это означает, что встроенная система не нуждается в udev или mdev-демонах. правильно? – Katoch

Смежные вопросы