2015-10-23 30 views
0

MTD的分區表的一個例子是在拱/臂/馬赫 - OMAP2 /板omap3beagle.c爲BeagleBoard的http://lxr.free-electrons.com/source/arch/arm/mach-omap2/board-omap3beagle.cLinux內核如何創建/ 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>如果我是正確的,那麼在文件/board-omap3beagle.c的omap3_beagle_init函數將調用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節點..? – Katoch

+0

mtd子系統。 'add_mtd_partitions' - >'add_mtd_device' - >'device_register' - >'device_add' - >'devtmpfs_create_node' –

+0

我的最後一點devtmpfs創建了tmpfs文件系統,一旦rootfs被掛載,它就可以掛載在/ dev目錄中。所以這意味着嵌入式系統不需要udev或者mdev惡魔..對吧? – Katoch