2 6核心NorFlash驅動

2021-04-14 01:30:08 字數 2794 閱讀 4462

2.6核心中norflash的驅動基本和2.4中的一樣

隨便在maps中找乙個都可以拿來改改用的,不過方便一點還是提供乙份原始碼好了

這個驅動是 for intel e28f128j3a-150 on s2c2410 的,不同的晶元就需修改一些引數了

修改maps/makefile

新增 obj-(config_mtd_s3c2410) += s3c2410.o

由於2.6下mtd裝置的驅動沒有呼叫devfs_register註冊裝置,所以需要自己建裝置節點

# gunzip ramdisk.image.gz

# mkdir disk

# mount -o loop ramdisk.image ./disk

# cd disk/dev

# mkdir mtdblock

# cd mtdblock

# mknod -m 666 0 b 31 0

# mknod -m 666 1 b 31 1

# mknod -m 666 2 b 31 2

# mknod -m 666 3 b 31 3

# cd ../../..

# umount disk

# gzip ramdisk.image

非常有必要到ppcboot的命令列中erase一下flash

# protect off all

# erase 0x540000 0xffffff     // 我的jffs2分割槽位址範圍

這樣也就不需要燒寫jffs2.img這個檔案了

這樣啟動開發板,就可以 mount -t jffs2 /dev/mtdblock/3 /jffs2 了

jffs2目錄為空,可以向裡面copy自己的檔案了

需要啟動時自動mount的話,可以在etc/init.d/rcs中新增

或者修改etc/fstab 新增

/dev/mtdblock/3   /jffs2    jffs2   default  1  1

當然核心配置需要新增

file systems --->

<*> kernel automounter support

注意並不需要修改主裝置號,在2.4時把major該成了30

/* maps driver for intel e28f128j3a-150 on s2c2410 */

#include

#include

#include

#include

#include

#include

#include

#include

/* we split the flash chip up into four parts.

* 1: bootloader firts (0x00000000 - 0x0003ffff) size 0x040000

* 2: kernel    (0x00040000 - 0x0013ffff) size 0x100000

* 3: compressed root ramdisk (0x00140000 - 0x0053ffff) size 0x400000

* 4: jffs (0x00540000 - 0x00ffffff) size 0xac0000*/

#define flash_phys_addr 0x00000000

#define flash_size 0x01000000

#define flash_partition0_addr 0x00000000

#define flash_partition0_size 0x00040000

#define flash_partition1_addr 0x00040000

#define flash_partition1_size 0x00100000

#define flash_partition2_addr 0x00140000

#define flash_partition2_size 0x00400000

#define flash_partition3_addr 0x00540000

#define flash_partition3_size 0x00ac0000

struct map_info s3c2410_map = ;

struct mtd_partition s3c2410_parts = ,,,

}; #define partition_count (sizeof(s3c2410_parts)/sizeof(struct mtd_partition))

static struct mtd_info *mymtd;

int __init init_s3c2410(void)

******_map_init(&s3c2410_map);

mymtd = do_map_probe("cfi_probe", &s3c2410_map);

if (mymtd)

iounmap((void *)s3c2410_map.virt);

return -enxio;}

static void __exit cleanup_s3c2410(void)

if (s3c2410_map.virt) }

module_init(init_s3c2410);

module_exit(cleanup_s3c2410);

module_license("gpl");

module_author("dansen");

module_description("mtd map driver for s3c2410");

norflash驅動編寫

首先我們來看 參考drivers mtd maps physmap.c include include include include include include include include include include include include static struct map ...

norflash驅動編寫

首先我們來看 參考drivers mtd maps physmap.c include include include include include include include include include include include include static struct map ...

norflash驅動編寫

首先我們來看 參考drivers mtd maps physmap.c include include include include include include include include include include include include static struct map ...