Linux内核如何创建/ dev / mtdx节点?

时间:2015-10-23 04:26:21

标签: linux linux-kernel embedded-linux

mtd分区表的一个示例位于arch / arm / mach-omap2 / board-omap3beagle.c中,用于beagleboard http://lxr.free-electrons.com/source/arch/arm/mach-omap2/board-omap3beagle.c

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 flash驱动程序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内核中的哪个文件是从?

调用的

1 个答案:

答案 0 :(得分:2)

1 /可以通过多种方式创建设备文件。通常,它们现在使用devtmpfs创建,devtmpfs_create_node是内核的一部分。当驱动程序或子系统注册新设备时,会调用devtmpfs这会唤醒一个将设备节点添加到devtmpfs文件系统的线程。

如果您的内核未使用mknod,则必须使用mdev手动创建这些设备文件。此外,udev也是可以创建设备文件的工具。最后,devtmpfs用于创建设备文件,但现在依赖于omap3_beagle_init

2 / start_kernel绝对不是内核调用的第一个函数。解压缩后,init/main.c中的入口点为omap3_beagle_init。这是独立于架构的。 从arch/arm/kernel/setup.c

中的customize_machine arch_initcall调用1) Javascript client sends a POST to Python backend 2) Python replies with a unique id 3) Javascript connects to the websocket and sends the unique id 4) Python associates the websocket client connection to the unique id