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

标签 linux linux-kernel embedded-linux

mtd 分区表的示例位于 beagleboard 的 arch/arm/mach-omap2/board-omap3beagle.c 中 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 driver 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/可以通过多种方式创 build 备文件。通常,它们现在是使用作为内核一部分的 devtmpfs 创建的。当驱动程序或子系统注册新设备时,将调用 devtmpfs_create_node 这会唤醒一个线程,该线程会将设备节点添加到 devtmpfs 文件系统。

如果您的内核没有使用 devtmpfs,那么您必须使用 mknod 手动创建这些设备文件。另外mdev也是一个可以创 build 备文件的工具。最后,udev 用于创 build 备文件,但现在依赖于 devtmpfs

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

关于linux - Linux内核如何创建/dev/mtdx节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33294876/

相关文章:

linux - 如何在我的系统上找到可执行文件的所有版本?

linux - 为什么内核要在进程的页表中添加内核主页表?

user-interface - 是否可以仅使用 HTML、CSS 和 JS 在 Linux Embedded 上开发 GUI?

linux - Yocto Initramfs 添加 cryptsetup 包时发生事务错误

linux - 如何使用shell脚本按字母顺序将一行插入到文件中

linux - 如何在c中创建一个窗口?

linux - 我的网络服务器的版本控制

linux - 如何将模块安装到 Linux 内核 2.6.29

c - device_create 使用现有设备名称

linux - udev规则匹配雷凌wifi卡加载rt2800usb