www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]我們先查看內(nèi)核的啟動信息,以搞清楚從哪個文件著手來分析:S3C24XX NAND Driver, (c) 2004 Simtec Electronicss3c2440-nand s3c2440-nand: Tacls=3, 30ns Twrph0=7 70ns, Twrph1=3 30nsNAND device: Manufacturer I

我們先查看內(nèi)核的啟動信息,以搞清楚從哪個文件著手來分析:


S3C24XX NAND Driver, (c) 2004 Simtec Electronics

s3c2440-nand s3c2440-nand: Tacls=3, 30ns Twrph0=7 70ns, Twrph1=3 30ns

NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)

Scanning device for bad blocks

Bad eraseblock 408 at 0x03300000

Bad eraseblock 441 at 0x03720000

Bad eraseblock 804 at 0x06480000

Bad eraseblock 1155 at 0x09060000

Bad eraseblock 1236 at 0x09a80000

Creating 4 MTD partitions on "NAND 256MiB 3,3V 8-bit":

0x00000000-0x00040000 : "bootloader"

0x00040000-0x00060000 : "params"

0x00060000-0x00260000 : "kernel"

0x00260000-0x10000000 : "root"


我們來搜索:S3C24XX NAND Driver

結(jié)果我們在driversmtdnands3c2410.c文件里發(fā)現(xiàn)了打印這句話的函數(shù):

static struct platform_driver s3c2440_nand_driver = {

.probe = s3c2440_nand_probe,

.remove = s3c2410_nand_remove,

.suspend = s3c24xx_nand_suspend,

.resume = s3c24xx_nand_resume,

.driver = {

.name = "s3c2440-nand",

.owner = THIS_MODULE,

},

};

static int __init s3c2410_nand_init(void)

{

printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronicsn");


platform_driver_register(&s3c2412_nand_driver);

platform_driver_register(&s3c2440_nand_driver);

return platform_driver_register(&s3c2410_nand_driver);

}

我們看到了,nandflash采用的是平臺總線設(shè)備機制,當發(fā)現(xiàn)名字是s3c2440-nand的設(shè)備的時候,就會調(diào)用probe函數(shù),那么我們就從probe函數(shù)入手了:

s3c24xx_nand_probe

s3c2410_nand_inithw(info, pdev);//初始化硬件

s3c2410_nand_init_chip(info, nmtd, sets);//初始化芯片,這里設(shè)置了chip的一些信息

nand_scan(&nmtd->mtd, (sets) ? sets->nr_chips : 1);//掃描芯片

nand_scan_ident(struct mtd_info *mtd, int maxchips)

nand_set_defaults(chip, busw);//設(shè)置默認函數(shù)

nand_get_flash_type(mtd, chip, busw, &nand_maf_id);//獲取nandflash類型

chip->select_chip(mtd, 0);//選中芯片

chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);//發(fā)出讀ID的命令,NAND_CMD_READID為90h

*maf_id = chip->read_byte(mtd);//讀廠家ID

dev_id = chip->read_byte(mtd);//讀設(shè)備ID

for (i = 0; nand_flash_ids[i].name != NULL; i++)//根據(jù)設(shè)備id在nand_flash_ids[i]數(shù)組中找到其類型

{

if (dev_id == nand_flash_ids[i].id)

{

type = &nand_flash_ids[i];

break;

}

}

nand_scan_tail(mtd);//這里設(shè)置了讀寫和擦除函數(shù)

mtd->erase = nand_erase;

mtd->read = nand_read;

mtd->write = nand_write;

s3c2410_nand_add_partition(info, nmtd, sets);//添加分區(qū)

add_mtd_partitions(&mtd->mtd, set->partitions, set->nr_partitions);

add_mtd_device(&mtd->mtd);

list_for_each(this, &mtd_notifiers)//詳見注釋1

{

struct mtd_notifier *not = list_entry(this, struct mtd_notifier, list);

not->add(mtd);

}

注釋1:

list_for_each(this, &mtd_notifiers)

{

struct mtd_notifier *not = list_entry(this, struct mtd_notifier, list);

not->add(mtd);

}

首先我們要搞清楚這個宏:list_entry(this, struct mtd_notifier, list);它會返回一個指向mtd_notifier結(jié)構(gòu)體的指針

這樣我們就明白了,我們需要知道在哪里定義了mtd_notifier這個東西,這樣才能知道它的成員add函數(shù)。我們發(fā)現(xiàn):

void register_mtd_user (struct mtd_notifier *new)

{

..........................................................

list_add(&new->list, &mtd_notifiers);

...........................................................

}

那么是誰調(diào)用了register_mtd_use函數(shù)呢?我們發(fā)現(xiàn):

driversmtdMtd_blkdevs.c和driversmtdMtdchar.c文件里面都調(diào)用了這個函數(shù),這兩個文件一個對應(yīng)字符設(shè)備一個對應(yīng)塊設(shè)備,這也說明了nandflash既可以作為字符設(shè)備,也可以作為塊設(shè)備。我們先進入字符設(shè)備看看吧:

很快我們發(fā)現(xiàn)了add函數(shù)的定義:

static void mtd_notify_add(struct mtd_info* mtd)

{

if (!mtd)

return;

class_device_create(mtd_class, NULL, MKDEV(MTD_CHAR_MAJOR, mtd->index*2),NULL, "mtd%d", mtd->index);//創(chuàng)建設(shè)備節(jié)點

class_device_create(mtd_class, NULL,MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),NULL, "mtd%dro", mtd->index);//創(chuàng)建只讀設(shè)備節(jié)點

}

我們有必要分析一下這個文件:

register_chrdev(MTD_CHAR_MAJOR, "mtd", &mtd_fops);//注冊字符設(shè)備

class_create(THIS_MODULE, "mtd");//創(chuàng)建類,但是并沒有在類下創(chuàng)建設(shè)備節(jié)點哦,這個節(jié)點要在適當?shù)臅r候才來創(chuàng)建

mtd_notify_add(struct mtd_info* mtd);


我們再來看一下塊設(shè)備驅(qū)動的吧:

很快我們就發(fā)下了add函數(shù)的定義:

static void blktrans_notify_add(struct mtd_info *mtd)

{

struct list_head *this;

if (mtd->type == MTD_ABSENT)

return;

list_for_each(this, &blktrans_majors) {

struct mtd_blktrans_ops *tr = list_entry(this, struct mtd_blktrans_ops, list);

tr->add_mtd(tr, mtd);

}

}

不過我們好像還得繼續(xù)向上搜尋,我們要看一看是誰設(shè)置了blktrans_majors:

int register_mtd_blktrans(struct mtd_blktrans_ops *tr)

{

..........................................................

list_add(&tr->list, &blktrans_majors);

..........................................................

}

那么我們還要看看register_mtd_blktrans這個函數(shù)在哪里調(diào)用:

我們在driversmtdMtdblock.c文件里面發(fā)現(xiàn)了調(diào)用:

很快我們找到了add函數(shù)的定義:
mtdblock_add_mtd(struct mtd_blktrans_ops *tr, struct mtd_info *mtd)

add_mtd_blktrans_dev(dev);

alloc_disk(1 << tr->part_bits);//申請磁盤,一下就可以看出和我們上節(jié)課編寫的驅(qū)動程序掛鉤了哦!

gd->queue = tr->blkcore_priv->rq;//設(shè)置隊列

add_disk;//注冊磁盤

針對上面的分析,我們在這里整理一下,首先來說一說將nandflash當作塊設(shè)備來用的時候,其工作流程:

我們其實是分成了幾個層次的,一個是塊設(shè)備,我們在之前已經(jīng)知道了,應(yīng)用程序?qū)K設(shè)備的讀寫請求被放放入隊列里面,也就是說塊設(shè)備對請求作了優(yōu)化。而我們從s3c2410_nand_add_partition函數(shù)分析出來,mtdblock_add_mtd里面注冊了這個隊列,那么請求就可以放在這個隊列里面,并且這個函數(shù)里面還分配的磁盤并且注冊了磁盤。下面還差

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

關(guān)于使用燒錄器燒錄Nand Flash,一直都是很多用戶頭疼的難點,他們強調(diào)已經(jīng)使用了正確的壞塊管理方案,也制定了規(guī)范的操作流程,但是燒錄的良品率還是無法提高,只能每天眼睜睜看著一盤盤&ldqu

關(guān)鍵字: nandflash 燒錄器

5月26日消息,據(jù)國外媒體報道,集邦咨詢半導(dǎo)體研究中心(DRAMeXchange)在周一發(fā)布的一份報告中稱,今年第一季度,三星在全球NAND Flash市場上的份額為33.3%,與前一季度相比,環(huán)比略

關(guān)鍵字: nandflash 三星 芯片

華為作為美光最大的客戶之一,美國將華為列入實體名單一事對美光產(chǎn)生了非常嚴重的影響,美光業(yè)績已經(jīng)逐漸露出下滑趨勢,上周五美光股價大跌近7%,南亞科、華邦電、威剛等存儲器企業(yè)也紛紛走低。 近期DRAM及N

關(guān)鍵字: DRAM nandflash 美光 芯片

6月24日消息 日前全球第二大閃存供應(yīng)商東芝位于日本三重縣的閃存工廠因地震遭遇斷電事故,雖然停電過程非常短,13分鐘之后就恢復(fù)供電了,但是工廠卻一直停產(chǎn),直到21日上午才恢復(fù),至少停工了5天時間。 根

關(guān)鍵字: nandflash 東芝 臺積電 芯片 閃存

Nandflash芯片以其高性價比,大存儲容量在電子產(chǎn)品中廣泛應(yīng)用。但是,在此量大質(zhì)優(yōu)的應(yīng)用領(lǐng)域,很多客戶卻痛苦于批量質(zhì)量問題:專用工具無法滿足量產(chǎn),量產(chǎn)工具卻可能出現(xiàn)極大的不良品率,那么究竟要如何解決呢?

關(guān)鍵字: nandflash 芯片 燒錄技巧

一、 首先先來看看核心板的原理圖我們發(fā)現(xiàn)數(shù)據(jù)線才有8條,而并沒有地址信號,所以該8條線一定是可以傳數(shù)據(jù),也可以傳地址。而地址線肯定又不夠,那么,地址肯定又是多次發(fā)出的。從datasheet可以看到它要發(fā)出5個周期的

關(guān)鍵字: nandflash ok6410 硬件

它包含7個文件:head.Sinit.cmain.cMakefilenand.cnand.lds我們之前的程序都是在nandflash的前4k放代碼,上電后自動拷貝到SRAM中,之后將SRAM中的代碼拷貝到SDRAM中。...

關(guān)鍵字: nandflash 裸機程序

注:此文為部分摘錄,并且在原文基礎(chǔ)上有改動link這幾天一直在摸索s3c2410的啟動過程,幾天的困惑終于在昨天晚上基本解決.下面詳細分析一下它的最前面的啟動過程.1.在板子上電的一開始,首先自動判斷是否是autoboo...

關(guān)鍵字: nandflash s3c2410 啟動過程
關(guān)閉