MTD原始裝置與NANDFLASH硬體驅動互動

2021-06-02 07:20:45 字數 2058 閱讀 6304

好久沒寫部落格了,今天再次分析nandflash驅動程式,每一次讀原始碼總有一點的收穫

1、首先從入口函式開始

probe函式將是我們遇到的第乙個與具體硬體打交道,同時也相對複雜的函式對於很多外設的driver來說,只要能成功實現probe函式,那基本上完成這個外設的driver也就成功了一多半,基於mtd的nand driver就是乙個典型的例子。稍後就可以看到,在nand driver的probe函式中,就已經涉及到了對nand晶元的讀寫。

在基於mtd的nand driver的probe函式中,主要可以分為兩部分內容,其一是與很多外設driver類似的一些工作,如申請位址,中斷,dma等資源,kzalloc及初始化一些結構體,分配dma用的記憶體等等;其二就是與mtd相關的一

if (err != 0)

goto exit_error;

sets = (plat != null) ? plat->sets : null;

nr_sets = (plat != null) ? plat->nr_sets : 1;

info->mtd_count = nr_sets;

/* allocate our information */

/****分配mtd裝置結構*****/

size = nr_sets * sizeof(*info->mtds);

info->mtds = kzalloc(size, gfp_kernel);

if (info->mtds == null)

/* initialise all possible chips */

nmtd = info->mtds;

for (setno = 0; setno < nr_sets; setno++, nmtd++)

if (sets != null)

sets++;

}err = s3c2410_nand_cpufreq_register(info);

if (err < 0)

if (allow_clk_stop(info))

pr_debug("initialised ok\n");

return 0;

exit_error:

s3c24xx_nand_remove(pdev);

if (err == 0)

err = -einval;

return err;}

static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,

struct s3c2410_nand_mtd *nmtd,

struct s3c2410_nand_set *set)

chip->io_addr_r = chip->io_addr_w;

nmtd->info       = info;

nmtd->mtd.priv       = chip;

nmtd->mtd.owner    = this_module;

nmtd->set       = set;

if (hardware_ecc)

} else

if (set->ecc_layout != null)

chip->ecc.layout = set->ecc_layout;

if (set->disable_ecc)

chip->ecc.mode    = nand_ecc_none;

switch (chip->ecc.mode)

/* if you use u-boot bbt creation code, specifying this flag will

* let the kernel fish out the bbt from the nand, and also skip the

* full nand scan that can take 1/2s or so. little things... */

if (set->flash_bbt)

chip->options |= nand_use_flash_bbt | nand_skip_bbtscan;

}

MTD原始裝置與NANDFLASH硬體驅動互動

好久沒寫部落格了,今天再次分析nandflash驅動程式,每一次讀原始碼總有一點的收穫 1 首先從入口函式開始 probe函式將是我們遇到的第乙個與具體硬體打交道,同時也相對複雜的函式對於很多外設的driver來說,只要能成功實現probe函式,那基本上完成這個外設的driver也就成功了一多半,基...

記憶體技術裝置,MTD

mtd,是linux的儲存裝置中的乙個子系統。其設計此系統的目的是,對於記憶體類的裝置,提供乙個抽象層,乙個介面,使得對於硬體驅動設計者來說,可以盡量少的去關心儲存格式,比如ftl,ffs2等,而只需要去提供最簡單的底層硬體裝置的讀 寫 擦除函式就可以了。而資料對於上層使用者來說是如何表示的,硬體驅...

驅動中訪問mtd裝置

今天解決了乙個小問題,如何在linux驅動中訪問mtd裝置。正常的訪問,都是使用者空間通過,open dev mtd read write close 來訪問的。這次由於在驅動中需要讀取 dev mtd4的乙個sector,這個sector是之前用來備份sd 卡的mbr的。1.訪問的第一步是獲得mt...