国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - linux nand flash驅動編寫

linux nand flash驅動編寫

2022-03-07 16:43feixiaoxing Linux

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

很長一段時間,nand flash都是嵌入式的標配產品。nand flash價格便宜,存儲量大,適用于很多的場景。現在很普及的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、不難發現,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、繼續分析s3c24xx_nand_probe函數

?
1
s3c2410_nand_init_chip(info, nmtd, sets);

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

類似的函數還有s3c2410_nand_update_chip函數

?
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、抓住了函數接口,就找到了基本邏輯。

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

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

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

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九国产精品视频 | 免费看日本黄色片 | 国产精品亚洲第一区在线暖暖韩国 | 久久久在线 | 中文av在线播放 | 久久精品国产99国产 | 欧美视频免费看 | 福利片在线观看 | 国产一区美女视频 | 久久精品一区二区三区四区 | 日韩一区二区不卡 | 欧美日韩在线视频观看 | 久久精品成人 | 免费在线成人网 | 黄频免费在线观看 | 久久久久久极品 | 国产日韩精品一区 | 91羞羞网站| 日韩一级电影在线 | 国产免费黄色 | 久久噜噜噜精品国产亚洲综合 | 日韩欧美在线一区二区 | 国产裸体永久免费视频网站 | 天天操天天拍 | 羞羞视频免费观看 | 国产在线观看91一区二区三区 | 一区二区三区四区国产 | 日韩高清在线一区 | 岛国一区 | 日韩一二三区视频 | 久草 在线| 爱爱免费视频网站 | 在线a人片免费观看视频 | 色九九| 国产精品一二三区 | 国产成人久久av免费高清密臂 | 亚洲精品免费在线 | 亚洲精品久久久一区二区三区 | 国产成人精品一区二区三区视频 | 中国一级特黄毛片大片 | 日韩中文一区二区三区 |