[Linux]nor驱动程序
[Linux]nor驱动程序
艾恩凝
2021/7/3
introduction
nor flash也是mtd设备的一种,驱动和nand flash差不多,内核帮我们完成了nor操作协议层,内核提供的协议层接口是map_info结构体,新的nor驱动就只需要填充这个协议接口就可以了。
nor framework
code
1/*
2* @author aen
3* @date 2021/7/3
4*/
5#include <linux/module.h>
6#include <linux/types.h>
7#include <linux/kernel.h>
8#include <linux/init.h>
9#include <linux/slab.h>
10#include <linux/device.h>
11#include <linux/platform_device.h>
12#include <linux/mtd/mtd.h>
13#include <linux/mtd/map.h>
14#include <linux/mtd/partitions.h>
15#include <asm/io.h>
16
17static struct map_info *s3c_nor_map;
18static struct mtd_info *s3c_nor_mtd;
19static struct mtd_partition s3c_nor_parts[] = {
20 [0] = {
21 .name = "bootloader_nor",
22 .size = 0x00040000,
23 .offset = 0,
24 },
25 [1] = {
26 .name = "root_nor",
27 .offset = MTDPART_OFS_APPEND,
28 .size = MTDPART_SIZ_FULL,
29 }
30};
31static int s3c_nor_init(void){
32 /* map_info struct */
33 s3c_nor_map = kzalloc(sizeof(struct map_info), GFP_KERNEL);;
34 /* setting phys address size bankwidth virtual address*/
35 s3c_nor_map->name = "s3c_nor";
36 s3c_nor_map->phys = 0;
37 s3c_nor_map->size = 0x1000000; /* >= NOR's size*/
38 s3c_nor_map->bankwidth = 2;
39 s3c_nor_map->virt = ioremap(s3c_nor_map->phys, s3c_nor_map->size);
40
41 simple_map_init(s3c_nor_map);
42 /* using nor flash protocol function*/
43 printk("use cfi_probe\n");
44 s3c_nor_mtd = do_map_probe("cfi_probe", s3c_nor_map);
45 if (!s3c_nor_mtd)
46 {
47 printk("use jedec_probe\n");
48 s3c_nor_mtd = do_map_probe("jedec_probe", s3c_nor_map);
49 }
50
51 if (!s3c_nor_mtd)
52 {
53 iounmap(s3c_nor_map->virt);
54 kfree(s3c_nor_map);
55 return -EIO;
56 }
57 /* add_mtd_partitions*/
58 add_mtd_partitions(s3c_nor_mtd, s3c_nor_parts, 2);
59}
60
61
62static void s3c_nor_exit(void){
63 del_mtd_partitions(s3c_nor_mtd);
64 iounmap(s3c_nor_map->virt);
65 kfree(s3c_nor_map);
66}
67
68
69
70module_init(s3c_nor_init);
71module_exit(s3c_nor_exit);
72
73MODULE_AUTHOR("https://aeneag.xyz");
74MODULE_VERSION("0.1");
75MODULE_DESCRIPTION("S3C2440 Mouse Driver");
76MODULE_LICENSE("GPL");
77
end
懒到不想详细的写,大多数笔记在pad上 = =
艾恩凝
写于大连
2021/7/3
catalogue
[Linux]驱动系列目录
吾心信其可行,
则移山填海之难,
终有成功之日!
——孙文
则移山填海之难,
终有成功之日!
——孙文
评论
0 评论