激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統(tǒng)進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統(tǒng) - Linux - linux nand flash驅動編寫

linux nand flash驅動編寫

2022-03-07 16:43feixiaoxing Linux

這篇文章主要介紹了linux nand flash驅動編寫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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、不難發(fā)現(xiàn),MTD_NAND_S3C2410才是那個真正的macro,嘗試在Makefile找文件

?
1
obj-$(CONFIG_MTD_NAND_S3C2410)   += s3c2410.o

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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、繼續(xù)分析s3c24xx_nand_probe函數(shù)

?
1
s3c2410_nand_init_chip(info, nmtd, sets);

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

類似的函數(shù)還有s3c2410_nand_update_chip函數(shù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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、抓住了函數(shù)接口,就找到了基本邏輯。

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

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

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/feixiaoxing/article/details/79855970

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产合集91合集久久日 | 亚洲第一黄色网 | 久久久久久久久国产精品 | 91九色免费视频 | 免费三级大片 | 日本一区二区不卡在线观看 | 国产污污视频 | 美女色影院 | 国产麻豆交换夫妇 | 99精品视频一区二区三区 | 日本在线视频免费观看 | 午夜伊人 | 国产一区亚洲 | 99日韩精品视频 | 久久国产亚洲精品 | 毛片在线免费观看网址 | 欧美视频在线一区二区三区 | 日日做夜夜操 | 精品一区二区三区四区在线 | 国产免费观看一区二区三区 | 日本在线不卡免费 | 久草在线高清 | 国产午夜网| 欧美视频在线一区二区三区 | 久久国产精品一区 | 欧美黄色小视频 | 免费看欧美一级特黄a毛片 九色com | 思思久而久而蕉人 | 一级啪啪片| 国产88久久久国产精品免费二区 | 国产在线精品一区二区夜色 | 美国一级免费视频 | 久久美女免费视频 | 欧美成人一级 | 国产亚洲精彩视频 | 一级毛片手机在线观看 | 羞羞的视频在线 | 成人国产精品一区二区毛片在线 | 蜜桃91麻豆 | 男人久久天堂 | av视屏|