µÚÒ»·¶ÎÄÍø - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

ÒÆÖ²LinuxÄں˵½norflash

À´Ô´£ºÓû§·ÖÏí ʱ¼ä£º2025/6/6 12:04:16 ±¾ÎÄÓÉloading ·ÖÏí ÏÂÔØÕâÆªÎĵµÊÖ»ú°æ
˵Ã÷£ºÎÄÕÂÄÚÈݽö¹©Ô¤ÀÀ£¬²¿·ÖÄÚÈÝ¿ÉÄܲ»È«£¬ÐèÒªÍêÕûÎĵµ»òÕßÐèÒª¸´ÖÆÄÚÈÝ£¬ÇëÏÂÔØwordºóʹÓá£ÏÂÔØwordÓÐÎÊÌâÇëÌí¼Ó΢ÐźÅ:xxxxxxx»òQQ£ºxxxxxx ´¦Àí£¨¾¡¿ÉÄܸøÄúÌṩÍêÕûÎĵµ£©£¬¸ÐлÄúµÄÖ§³ÖÓëÁ½⡣

¿ª·¢°åÉÏÖ»ÓÐNor Flash£¬ËùÒÔΪÁËʵÏÖ²ã´ÎÎļþϵͳ£¬ÐèҪΪLinux2.6.20Ôö¼ÓNor Flash MTDÇý¶¯Ö§³Ö¡£Æäʵ¹¤×÷Á¿²¢²»´ó£¬ÒòΪÒѾ­ÓÐÏֳɵijÌÐò¿É¹©²Î¿¼¡£

MTDµÄÇý¶¯³ÌÐò¶¼¼¯ÖÐÔÚdrivers/mtdÀïÃæ¡£ÎÒÃÇÐèÒª×öµÄ£¬½ö½öÊÇÔÚdrivers/mtd/mapsÏÂÔö¼Ó×Ô¼ºµÄ·ÖÇø±í¡£ÒòΪÓвο¼µÄ´úÂ룬ËùÒԱȽÏÈÝÒס£

£¨1£©¹¹½¨ÅäÖÃÑ¡Ïî

Ê×ÏÈ£¬¸ù¾Ýedb7312.c¹¹½¨×Ô¼ºµÄmtd·ÖÇø±íÇý¶¯£¨¸ù¾Ýcfi_flagadm.c

Õâ¸öÎļþÒ²¿ÉÒ԰£¬

¿´Çé¿ö°É£¡£©¡£

$cd drivers/mtd/maps/ $cp edb7312.c at91rm9200.c

È»ºó£¬ÐÞ¸Ädrivers/mtd/maps/Kconfig£¬Ôö¼Ó×Ô¼ºµÄÅäÖÃÑ¡Ïî¡£

//¿½±´¹ýEDB7312ÉÔ×÷Ð޸ļ´¿É config MTD_AT91RM9200

tristate \Flash device mapped on AT91RM9200\ depends on ARM && MTD_CFI help

This enables access to the CFI Flash on the ATMEL AT91RM9200DK board.

If you have such a board, say 'Y' here.

×îºó£¬ÐÞ¸ÄMakefile£¬Ôö¼Ó±àÒëÏîÄ¿¡£ obj-$(CONFIG_MTD_EDB7312) += edb7312.o obj-$(CONFIG_MTD_AT91RM9200) += at91rm9200.o

ÕâÑù£¬×Ô¼º½¨Á¢µÄMTD·ÖÇø±íÇý¶¯¾Í¿ÉÒÔ±àÒë½øÄÚºËÁË¡£

£¨2£©Ð޸ķÖÇø±íÐÅÏ¢

ÒòΪµÚÒ»²½µÄ¹¤×÷ÖУ¬at91rm9200.cʵ¼ÊÉÏ»¹ÊÇedb7312.cµÄÄÚÈÝ£¬ËùÒÔÐèÒª¸ù¾Ý×Ô¼ºµÄ¿ª·¢°ånor flashµÄÅäÖÃ×öÒ»ÏÂÐ޸ġ£

#include #include #include #include #include #include #include

#ifdef CONFIG_MTD_PARTITIONS #include #endif

#define WINDOW_ADDR 0x10000000 /* physical properties of flash */ #define WINDOW_SIZE 0x00800000 /* intel 28F640J3A 8MB */ #define BUSWIDTH 2 /* data bus width 16bits */

/* can be \\\NULL }; */ #define PROBETYPES { \, NULL }

#define MSG_PREFIX \ /* prefix for our printk()'s */ #define MTDID \ /* for mtdparts= partitioning */

static struct mtd_info *mymtd;

struct map_info at91rm9200nor_map = {

.name = \flash on AT91RM9200DK\, .size = WINDOW_SIZE, .bankwidth = BUSWIDTH,

.phys = WINDOW_ADDR, };

#ifdef CONFIG_MTD_PARTITIONS /*

* MTD partitioning stuff */

static struct mtd_partition at91rm9200nor_partitions[5] = {

{

// U-boot 128KB .name = \, .size = 0x20000, .offset = 0 }, {

// uImage 2MB .name = \, .size = 0x200000, .offset = 0x20000 }, {

// RootFS 3MB .name = \, .size = 0x300000, .offset = 0x220000 }, {

// UserFS

.name = \, .size = 0x2C0000, .offset = 0x520000 },

{

// Parameters

.name = \, .size = 0x20000, .offset = 0x7E0000 }, };

static const char *probes[] = { NULL }; #endif

static int mtd_parts_nb = 0;

static struct mtd_partition *mtd_parts = 0;

int __init init_at91rm9200nor(void) {

static const char *rom_probe_types[] = PROBETYPES; const char **type;

const char *part_type = 0;

printk(KERN_NOTICE MSG_PREFIX \at 0xx\\n\, WINDOW_SIZE, WINDOW_ADDR);

at91rm9200nor_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE);

if (!at91rm9200nor_map.virt) {

printk(MSG_PREFIX \to ioremap\\n\); return -EIO; }

simple_map_init(&at91rm9200nor_map);

mymtd = 0;

type = rom_probe_types;

ËÑË÷¸ü¶à¹ØÓÚ£º ÒÆÖ²LinuxÄں˵½norflash µÄÎĵµ
ÒÆÖ²LinuxÄں˵½norflash.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ£¬·½±ã¸´ÖÆ¡¢±à¼­¡¢ÊղغʹòÓ¡
±¾ÎÄÁ´½Ó£ºhttps://www.diyifanwen.net/c6i7n393xmz9nplx1m54t1j03v4iv5u00auy_1.html£¨×ªÔØÇë×¢Ã÷ÎÄÕÂÀ´Ô´£©
ÈÈÃÅÍÆ¼ö
Copyright © 2012-2023 µÚÒ»·¶ÎÄÍø °æÈ¨ËùÓÐ ÃâÔðÉùÃ÷ | ÁªÏµÎÒÃÇ
ÉùÃ÷ :±¾ÍøÕ¾×ðÖØ²¢±£»¤ÖªÊ¶²úȨ£¬¸ù¾Ý¡¶ÐÅÏ¢ÍøÂç´«²¥È¨±£»¤ÌõÀý¡·£¬Èç¹ûÎÒÃÇ×ªÔØµÄ×÷Æ·ÇÖ·¸ÁËÄúµÄȨÀû,ÇëÔÚÒ»¸öÔÂÄÚ֪ͨÎÒÃÇ£¬ÎÒÃǻἰʱɾ³ý¡£
¿Í·þQQ£ºxxxxxx ÓÊÏ䣺xxxxxx@qq.com
ÓåICP±¸2023013149ºÅ
Top