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内核中的哪个文件是从?
答案 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