麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

linux nand flash驅動編寫

2024-09-05 23:04:42
字體:
來源:轉載
供稿:網友

很長一段時間,nand flash都是嵌入式的標配產品。nand flash價格便宜,存儲量大,適用于很多的場景。現在很普及的ssd,上面的存儲模塊其實也是由一塊一塊nand flash構成的。對于linux嵌入式來說,開始uboot的加載是硬件完成的,中期的kernel加載是由uboot中的nand flash驅動完成的,而后期的rootfs加載,這就要靠kernel自己來完成了。當然,這次還是以三星s3c芯片為例進行說明。

1、nand flash驅動在什么地方,可以從drviers/mtd/Makefile來看

obj-y    += chips/ lpddr/ maps/ devices/ nand/ onenand/ tests/ 

2、nand在mtd下面,是作為一個單獨目錄保存的,這時應該查看nand下的Kconfig

config MTD_NAND_S3C2410   tristate "NAND Flash support for Samsung S3C SoCs"   depends on ARCH_S3C24XX || ARCH_S3C64XX   help    This enables the NAND flash controller on the S3C24xx and S3C64xx    SoCs     No board specific support is done by this driver, each board    must advertise a platform_device for the driver to attach.  config MTD_NAND_S3C2410_DEBUG   bool "Samsung S3C NAND driver debug"   depends on MTD_NAND_S3C2410   help    Enable debugging of the S3C NAND driver  config MTD_NAND_S3C2410_CLKSTOP   bool "Samsung S3C NAND IDLE clock stop"   depends on MTD_NAND_S3C2410   default n   help    Stop the clock to the NAND controller when there is no chip    selected to save power. This will mean there is a small delay    when the is NAND chip selected or released, but will save    approximately 5mA of power when there is nothing happening. 

3、不難發現,MTD_NAND_S3C2410才是那個真正的macro,嘗試在Makefile找文件

obj-$(CONFIG_MTD_NAND_S3C2410)   += s3c2410.o 

4、查看s3c2410.c文件,看看基本結構構成

static struct platform_driver s3c24xx_nand_driver = {   .probe   = s3c24xx_nand_probe,   .remove   = s3c24xx_nand_remove,   .suspend  = s3c24xx_nand_suspend,   .resume   = s3c24xx_nand_resume,   .id_table  = s3c24xx_driver_ids,   .driver   = {     .name  = "s3c24xx-nand",     .of_match_table = s3c24xx_nand_dt_ids,   }, };  module_platform_driver(s3c24xx_nand_driver); 

5、繼續分析s3c24xx_nand_probe函數

s3c2410_nand_init_chip(info, nmtd, sets); 

6、之所以從中摘出了s3c2410_nand_init_chip這個函數,是因為里面進行了函數注冊

類似的函數還有s3c2410_nand_update_chip函數

chip->write_buf  = s3c2410_nand_write_buf; chip->read_buf   = s3c2410_nand_read_buf; chip->select_chip = s3c2410_nand_select_chip; chip->chip_delay  = 50; nand_set_controller_data(chip, nmtd); chip->options    = set->options; chip->controller  = &info->controller;  switch (info->cpu_type) { case TYPE_S3C2410:   chip->IO_ADDR_W = regs + S3C2410_NFDATA;   info->sel_reg  = regs + S3C2410_NFCONF;   info->sel_bit  = S3C2410_NFCONF_nFCE;   chip->cmd_ctrl = s3c2410_nand_hwcontrol;   chip->dev_ready = s3c2410_nand_devready;   break;  case TYPE_S3C2440:   chip->IO_ADDR_W = regs + S3C2440_NFDATA;   info->sel_reg  = regs + S3C2440_NFCONT;   info->sel_bit  = S3C2440_NFCONT_nFCE;   chip->cmd_ctrl = s3c2440_nand_hwcontrol;   chip->dev_ready = s3c2440_nand_devready;   chip->read_buf = s3c2440_nand_read_buf;   chip->write_buf = s3c2440_nand_write_buf;   break;  case TYPE_S3C2412:   chip->IO_ADDR_W = regs + S3C2440_NFDATA;   info->sel_reg  = regs + S3C2440_NFCONT;   info->sel_bit  = S3C2412_NFCONT_nFCE0;   chip->cmd_ctrl = s3c2440_nand_hwcontrol;   chip->dev_ready = s3c2412_nand_devready;    if (readl(regs + S3C2410_NFCONF) & S3C2412_NFCONF_NANDBOOT)     dev_info(info->device, "System booted from NAND/n");    break; } 

7、抓住了函數接口,就找到了基本邏輯。

對于框架來說,它不關心你的代碼如何實現。只要你按照它的接口寫,就能讓上層正常獲得數據。platform、usb、pci這都是一種接口形式,具體實現還要按照各個具體功能模塊來實現才行。

8、為什么我們都用s3c芯片進行舉例

因為它用的場景最多,學習資料最全,對于新手來說,這會少很多麻煩。

9、這個驅動依賴的kernel版本是什么

這里最有的代碼都是按照最新4.16的版本進行分析的,大家可以直接查看這里的地址。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 逼片视频| 欧美日韩高清一区 | 深夜福利久久久 | 在线视频a| 一区二区高清视频在线观看 | 又黄又爽免费无遮挡在线观看 | 久久精品99国产国产精 | 美国一级黄色毛片 | xxxⅹ96日本护士hd | www.guochanav.com | 黄在线免费看 | 国产永久免费观看 | 乱淫67194 | 成人国产精品久久 | 亚洲午夜一区二区三区 | 精品久久999 | 欧美片一区二区 | 国产一区二区在线免费观看 | 日韩欧美色综合 | 欧美一级免费高清 | 久久精品一区二区三区国产主播 | 日日草夜夜| a视频在线播放 | www.99re14.com| 99精品视频久久精品视频 | 爱唯侦察 国产合集 亚洲 | xxxxxx性| 亚洲午夜久久久精品一区二区三区 | 欧美a视频在线观看 | 日本中文不卡视频 | 中文字幕精品亚洲 | 在线播放免费播放av片 | 99影视电影电视剧在线播放 | 欧美激情精品久久久久 | 午夜视频免费播放 | 久久精品视频首页 | 亚洲成人第一区 | 精品一区二区三区在线播放 | 亚洲xxx在线观看 | 久草在线资源观看 | 久久久一区二区三区四区 |