1 / 112
文档名称:

09Linux驱动程序开发.ppt

格式:ppt   大小:3,015KB   页数:112页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

09Linux驱动程序开发.ppt

上传人:我是药神 2022/6/7 文件大小:2.94 MB

下载得到文件列表

09Linux驱动程序开发.ppt

文档介绍

文档介绍:09Linux驱动程序开发
由NordriDesign提供

79 通过设置CPSR寄存器来确保处理器进入SVC模式,并禁止中断
81 读取协处理器CP15的寄存器C0获得CPU ID
8 devicemaps_init -> mdesc->map_io()
console_init ->
register_console()
二、MTD简介及修改Nand MTD分区
1 MTD简介
MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。
MTD的主要目的是为了使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口。
MTD的所有源代码在/drivers/mtd子目录下。
CFI接口的MTD设备分为四层,从上到下依次是:
设备节点、MTD设备层、MTD原始设备层和硬件驱动层。
Flash硬件驱动层
硬件驱动层负责在init时驱动Flash硬件,Linux MTD设备的NOR Flash芯片驱动遵循CFI接口标准,其驱动程序位于drivers/mtd/chips子目录下。NAND型Flash的驱动程序则位于/drivers/mtd/nand子目录下
MTD原始设备
原始设备层有两部分组成,一部分是MTD原始设备的通用代码,另一部分是各个特定的Flash的数据,例如分区。
用于描述MTD原始设备的数据结构是mtd_info,这其中定义了大量的关于MTD的数据和操作函数。
mtd_table()则是所有MTD原始设备的列表
mtd_part()是用于表示MTD原始设备分区的结构,其中包含了mtd_info,因为每一个分区都是被看成一个MTD原始设备加在mtd_table中的
MTD设备层
基于MTD原始设备,linux系统可以定义出MTD的块设备(主设备号31)和字符设备(设备号90)。
,通过注册一系列file operation函数(lseek、open、close、read、write)。
MTD块设备则是定义了一个描述MTD块设备的结构 mtdblk_dev,并声明了一个名为mtdblks的指针数组,这数组中的每一个mtdblk_dev和mtd_table中的每一个 mtd_info一一对应。

在Bootloader中将JFFS(或JFFS2)()烧到flash的某一个分区中,在/arch/arm/mach-your/ your_fixup函数中将该分区作为根文件系统挂载。
文件系统:内核启动后,通过mount 命令可以将flash中的其余分区作为文件系统挂载到mountpoint上。
2 修改Nand MTD分区
SEP4020 Nand Flash 有64MB空间
目前分区情况:
mtdblock0 0x00000000-----------0x0100000 1M
mtdblock1 0x00100000-----------0x0600000 5M
mtdblock2 0x00600000-----------0x1E00000 24M
mtdblock3 0x01E00000----------0x04000000 34M
SEP4020 NAND的驱动程序,其目录位于:
../drivers/mtd/nand/
宏定义:
#define NUM_PARTITIONS 4               
//NAND的分区数目(这里分为4个分区)
#define UBOOT_SIZE         SZ_1M*1       //UBOOT分区空间大小 #define KERNEL_SIZE         SZ_1M*5     //内核分区空间大小 #define ROOT_SIZE        SZ_1M*24        //根文件系统分区大小 #define USER_SIZE         SZ_1M*34        //用户空间分区大小
static struct mtd_partition partition_info[] = {         { .name = "U-boot",           .offset = 0,           .size = UBOOT_SIZE          },         { .name = "linux 2