mtd分区表的一个示例是beagleboard http://lxr.free-electrons.com/source/arch/arm/mach-omap2/board-omap3beagle.c的arch/arm/mach-omap2 2/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在这个链接中N和闪存驱动程序board_init
函数传递,mtd_partition structure
被传递到文件mtdcore.c
文件中的add_mtd_partitions(board_mtd, partition_info, NUM_PARTITIONS);
函数。
如果我是对的,那么mtdcores.c
文件是否创建mtd分区?
现在我有两个问题:
如果我是对的,那么文件/board中的1>函数-omap3beagle.c将调用omap_nand_flash_init
函数,这将初始化NAND & create /dev/mdtx节点。
如果我不正确,那么是什么创建了/dev/mtd0 0节点?内核是创建它还是NAND驱动程序?
2>还有,omap3_beagle_init
函数是内核调用的第一个函数吗?从linux内核中调用哪个文件?
发布于 2015-10-23 10:20:45
[1]设备文件的创建有多种方法。通常,它们现在是使用devtmpfs
(内核的一部分)创建的。当驱动程序或子系统注册新设备时,devtmpfs_create_node
被调用--这将唤醒一个线程,该线程将将设备节点添加到devtmpfs
文件系统。
如果您的内核不使用devtmpfs
,那么您必须使用mknod
手动创建这些设备文件。另外,mdev
也是一个可以创建设备文件的工具。最后,udev
过去常常创建设备文件,但现在依赖于devtmpfs
。
2/ omap3_beagle_init
绝对不是内核调用的第一个函数。解压缩后,入口点是start_kernel
in init/main.c。这是独立于建筑的。omap3_beagle_init
是从customize_machine
arch_initcall在arch/arm/内核/setup.c中调用的
https://stackoverflow.com/questions/33294876
复制相似问题