国产精品久久久久影院,成人午夜福利视频,国产精品久久久久高潮,国产精品 欧美 亚洲 制服,国产精品白浆无码流出

linux-2.6.38到tiny6410的移植手冊(1):nand flash

發(fā)布者:HarmonyJoy最新更新時間:2024-10-15 來源: cnblogs關鍵字:linux-2  6  tiny6410  nand  flash 手機看文章 掃描二維碼
隨時隨地手機看文章

環(huán)境 VirtualBox+ubuntu 10.04
編譯器,友善自帶arm-linux-gcc-4.5.1-v6-vfp-20101103.tgz
硬件,tiny6410,核心板號1107

1、下載linux-2.6.38的源碼,ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2
2、解壓 tar xvfj /mnt/ubuntu/linux-2.6.38.tar.bz2 -C .
3、vi Makefile       191行改為    ARCH            ?= arm
4、cp arch/arm/configs/s3c6400_defconfig .config
5、make menuconfig
5、General setup->(/usr/4.5.1/bin/arm-linux-) Cross-compiler tool prefix    我將編譯器解壓到了/usr/4.5.1目錄
       System Type->[*] MINI6410   選上,其他的可以去掉,不確定的可以參考友善之臂的

這樣編譯出來的內(nèi)核是可以被uboot引導的,然后是增加nand flash支持
vi arch/arm/mach-s3c64xx/mach-mini6410.c
第117行
struct mtd_partition mini6410_nand_part[] = {            
    {
        .name        = 'Bootloader',
        .offset        = 0,
        .size        = (4 * 128 *SZ_1K),
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = 'Kernel',
        .offset        = (4 * 128 *SZ_1K),
        .size        = (5*SZ_1M) ,
        .mask_flags    = MTD_CAP_NANDFLASH,
    },
    {
        .name        = 'File System',
        .offset        = MTDPART_OFS_APPEND,
        .size        = MTDPART_SIZ_FULL,
    }
};       //update at 2011-8-26 經(jīng)過測試發(fā)現(xiàn),這里改完后根本不起作用,甚至將整個注釋也無妨,估計分區(qū)已經(jīng)固死在后面的s3c_nand_mlc.fo中

drivers/mtd/nand/s3c_nand.c和arch/arm/plat-samsung/include/plat/regs-nand.h兩個文件可以從友善的源碼中
拷貝過來,這是他們自己寫的,當然drivers/mtd/nand/s3c_nand_mlc.fo也要拷貝過來,這是友善沒有開源的一個驅(qū)動之一,
所以不用研究了,拷過來就是了。

################################################################

################################################################


修改drivers/mtd/nand/nand_base.c文件


修改方法如下,“-”就是要去掉的內(nèi)容,“+”就是要增加的內(nèi)容,@@后面的是行號,
嫌麻煩的的直接將drivers/mtd/nand/nand_base.c拷過來覆蓋掉

嘿嘿,下面是我diff出來的東西。


@@ -342,7 +342,7 @@
  */
static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
{
-    int page, chipnr, res = 0;
+    int page, res = 0;
     struct nand_chip *chip = mtd->priv;
     u16 bad;

@@ -351,6 +351,8 @@

     page = (int)(ofs >> chip->page_shift) & chip->pagemask;

+#if 0
+    /* Moved to nand_block_checkbad() for chip specify support */
     if (getchip) {
         chipnr = (int)(ofs >> chip->chip_shift);

@@ -359,6 +361,7 @@
         /* Select the NAND device */
         chip->select_chip(mtd, chipnr);
     }
+#endif

     if (chip->options & NAND_BUSWIDTH_16) {
         chip->cmdfunc(mtd, NAND_CMD_READOOB, chip->badblockpos & 0xFE,
@@ -378,8 +381,10 @@
     else
         res = hweight8(bad) < chip->badblockbits;

+#if 0
     if (getchip)
         nand_release_device(mtd);
+#endif

     return res;
}
@@ -477,9 +482,26 @@
                    int allowbbt)
{
     struct nand_chip *chip = mtd->priv;
+    int chipnr, res = 0;
+
+    /* Chip specify block_bad() support */
+    if (!chip->bbt) {
+        if (getchip) {
+            chipnr = (int)(ofs >> chip->chip_shift);

-    if (!chip->bbt)
-        return chip->block_bad(mtd, ofs, getchip);
+            nand_get_device(chip, mtd, FL_READING);
+
+            /* Select the NAND device */
+            chip->select_chip(mtd, chipnr);
+        }
+
+        res = chip->block_bad(mtd, ofs, getchip);
+
+        if (getchip)
+            nand_release_device(mtd);
+
+        return res;
+    }

     /* Return info from the table */
     return nand_isbad_bbt(mtd, ofs, allowbbt);
@@ -3002,23 +3024,15 @@
                 id_data[0] == NAND_MFR_SAMSUNG &&
                 (chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
                 id_data[5] != 0x00) {
+            int __oobsz[] = { 0, 128, 218, 400 };
             /* Calc pagesize */
             mtd->writesize = 2048 << (extid & 0x03);
             extid >>= 2;
             /* Calc oobsize */
-            switch (extid & 0x03) {
-            case 1:
-                mtd->oobsize = 128;
-                break;
-            case 2:
-                mtd->oobsize = 218;
-                break;
-            case 3:
-                mtd->oobsize = 400;
-                break;
-            default:
+            if (extid & 0x10) {
                 mtd->oobsize = 436;
-                break;
+            } else {
+                mtd->oobsize = __oobsz[(extid & 0x03)];
             }
             extid >>= 2;
             /* Calc blocksize */
@@ -3099,16 +3113,21 @@

     /* Calculate the address shift from the page size */
     chip->page_shift = ffs(mtd->writesize) - 1;
+
     /* Convert chipsize to number of pages per chip -1. */
-    chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
+    if (!chip->pagemask) {
+        chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
+    }

     chip->bbt_erase_shift = chip->phys_erase_shift =
         ffs(mtd->erasesize) - 1;
-    if (chip->chipsize & 0xffffffff)
-        chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
-    else {
-        chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
-        chip->chip_shift += 32 - 1;
+    if (!chip->chip_shift) {
+        if (chip->chipsize & 0xffffffff)
+            chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
+        else {
+            chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
+            chip->chip_shift += 32 - 1;
+        }
     }

     /* Set the bad block position */
@@ -3126,8 +3145,11 @@
      */
     if ((chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
             (*maf_id == NAND_MFR_SAMSUNG ||
-             *maf_id == NAND_MFR_HYNIX))
-        chip->options |= NAND_BBT_SCANLASTPAGE;
+             *maf_id == NAND_MFR_HYNIX)) {
+        if (mtd->writesize < 4096) {
+            chip->options |= NAND_BBT_SCANLASTPAGE;
+        }
+    }
     else if ((!(chip->cellinfo & NAND_CI_CELLTYPE_MSK) &&
                 (*maf_id == NAND_MFR_SAMSUNG ||
                  *maf_id == NAND_MFR_HYNIX ||
    
              
然后修改drivers/mtd/nand/Kconfig和drivers/mtd/nand/Makefile文件
在drivers/mtd/nand/Kconfig  238行增加
config MTD_NAND_S3C
    tristate 'NAND Flash support for S3C SoC'
    depends on (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX) && MTD_NAND
    help
      This enables the NAND flash controller on the S3C.

      No board specfic support is done by this driver, each board
      must advertise a platform_device for the driver to attach.

config MTD_NAND_S3C_DEBUG
    bool 'S3C NAND driver debug'
    depends on MTD_NAND_S3C
    help
      Enable debugging of the S3C NAND driver

configMTD_NAND_S3C_HWECC
    bool 'S3C NAND Hardware ECC'
    depends on MTD_NAND_S3C
        help
      Enable the use of the S3C's internal ECC generator when
      using NAND. Early versions of the chip have had problems with
      incorrect ECC generation, and if using these, the default of
      software ECC is preferable.

      If you lay down a device with the hardware ECC, then you will
      currently not be able to switch to software, as there is no
      implementation for ECC method used by the S3C


drivers/mtd/nand/Makefile中20行增加
obj-$(CONFIG_MTD_NAND_S3C)            += s3c_nand.o

[1] [2]
關鍵字:linux-2  6  tiny6410  nand  flash 引用地址:linux-2.6.38到tiny6410的移植手冊(1):nand flash

上一篇:移植yaffs2 文件系統(tǒng)
下一篇:linux-2.6.38到tiny6410的移植手冊(連載4)__USB設備(U盤,攝像頭,wifi)

推薦閱讀最新更新時間:2025-07-16 15:19

[smart210] Nand Flash K9F4G08U0B 的配置與讀寫控制(一)
平臺:smart210 CPU:s5pv210 目標:控制核心板上的Nand Flash,對其進行讀寫操作,本文為基本配置篇 知識儲備:從tiny210v2核心板上我們發(fā)現(xiàn),nand flash的型號是K9F4G08U0B,根據(jù)nand flash的命名規(guī)則,我們不難發(fā)現(xiàn)這是一塊4Gbits大小的單位地址存儲x8bits的SLC nand flash存儲器,存儲空間換算過來就是512M x 8 bits 。在相似型號K9F4G08U0A的datasheet中發(fā)現(xiàn)這種型號的flash具有4096個Blocks,每個Block有64個Pages,每個Pages有2048Bytes的數(shù)據(jù),綜合起來就是 4096*64*2048 *8bi
[單片機]
[smart210] <font color='red'>Nand</font> <font color='red'>Flash</font> K9F4G08U0B 的配置與讀寫控制(一)
S3C2440運行裸機小程序需燒錄到NAND Flash
對于韋東山的S3C2440開發(fā)板,當運行LED等簡單的小程序時,必須燒錄到NAND Flash,原因如下: (1)NOR Flash雖然可以向內(nèi)存一樣進行讀操作,但不可以像內(nèi)存一樣進行寫操作,所以假如要從NOR Flash啟動,一般先在代碼的開始部分使用匯編指令初始化外接的內(nèi)存器件(外部RAM),然后將代碼復制到外存中,最后跳轉到外存中繼續(xù)執(zhí)行。(這段初始化代碼比較復雜,需要后面再學習)。 (2)S3C2440中有稱為“Steppingstone”的4KB內(nèi)存RAM,當選擇從NAND Flash啟動CPU時,CPU會通過內(nèi)部的硬件將NAND Flash開始的4KB字節(jié)數(shù)據(jù)復制到這4KB的內(nèi)部RAM中(此時內(nèi)部RAM的起始地址為
[單片機]
數(shù)據(jù)中心需求猛增,NAND Flash Q4營收季提升8.5%
據(jù)集邦咨詢半導體研究中心(DRAMeXchange)調(diào)查顯示,由于2019年第四季資料中心需求成長,NAND Flash供應庫存下降;2020年第一季在量縮價增的情形下,營收表現(xiàn)持平上季... 根據(jù)DRAMeXchange調(diào)查顯示,受惠于數(shù)據(jù)中心需求成長,2019年第四季NAND Flash整體位元出貨量季增近10%。供給面受6月鎧俠四日市廠區(qū)跳電影響,供不應求使得合約價止跌回漲。整體而言,第四季整體產(chǎn)業(yè)營收較第三季增長8.5%,達125億美元。 由于需求面在第四季表現(xiàn)優(yōu)于預期,供應商庫存水位已恢復正常,因此減少對渠道市場Wafer的供應量,并著重于較高毛利的產(chǎn)品出貨。 展望2020年第一季,考量疫情可能影響手機
[嵌入式]
數(shù)據(jù)中心需求猛增,<font color='red'>NAND</font> <font color='red'>Flash</font> Q4營收季提升8.5%
關于u-boot移植時的NAND FLASH問題
在移植U-BOOT的時候,大部分時間都是卡在nand flash里,因為我的nand flash容量比較大,512M的,網(wǎng)上的一般都是256M的吧,然后我就蛋疼蛋疼的搞了好久好久。。。 遇到的問題是這樣:u-boot無法對nand flash正常讀寫,總是識別出各種壞塊,幾乎把整塊nand都當作壞塊了,最明顯的就是保存環(huán)境變量時,使用saveenv命令,提示擦除時遇到壞塊。 各種找原因,剛開始以為是底層驅(qū)動函數(shù)沒有寫好,然后就研究底層驅(qū)動開始,一點一點的理解。。。 在這里普及一下NAND的基本知識吧,剛開始我也稀里糊涂的。 NAND flash以頁為單位讀寫數(shù)據(jù),而以塊為單位擦除數(shù)據(jù)。按照這樣
[單片機]
大容量NAND FLASH在ARM嵌入式系統(tǒng)中的設計與實現(xiàn)
1 引 言   隨著嵌人式系統(tǒng)在數(shù)碼相機、數(shù)字攝像機、移動電話、mp3音樂播放器等移動設備中越來越廣泛的應用,F(xiàn)LASH存儲器已經(jīng)逐步取代其他半導體存儲元件,成為嵌入式系統(tǒng)中主要數(shù)據(jù)和程序載體。FLASH存儲器又稱閃存,是一種可在線多次擦除的非易失性存儲器,即掉電后數(shù)據(jù)不會丟失。FLASH存儲器還具有體積小、功耗低、抗振性強等優(yōu)點,是嵌入式系統(tǒng)的首選存儲設備。 NAND和NOR FLASH是現(xiàn)在市場上兩種主要的非易失閃存芯片,這兩種類型的FLASH區(qū)別在于:   NOR類型FLASH可以按照字節(jié)訪問,所以存放在FLASH里的程序可以直接執(zhí)行,而NAND類型FLASH是串行訪問的,需要先把程序讀取到內(nèi)存然后再從內(nèi)存中運行。與NOR型
[單片機]
大容量<font color='red'>NAND</font> <font color='red'>FLASH</font>在ARM嵌入式系統(tǒng)中的設計與實現(xiàn)
SK 海力士率先展示 UFS 4.1 通用閃存,基于 V9 TLC NAND 顆粒
8 月 9 日消息,根據(jù) SK 海力士當?shù)貢r間昨日發(fā)布的新聞稿,該企業(yè)在 FMS 2024 峰會上展示了系列存儲新品,其中就包括尚未正式發(fā)布規(guī)范的 USF 4.1 通用閃存。 根據(jù) JEDEC 固態(tài)技術協(xié)會官網(wǎng),目前已公布的最新 UFS 規(guī)范是 2022 年 8 月的 UFS 4.0。UFS 4.0 指定了每個設備至高 46.4Gbps 的理論接口速度,預計 USF 4.1 將在傳輸速率方面進一步提升。 ▲ JEDEC UFS 規(guī)范頁面 SK 海力士此次展示了兩款 UFS 4.1 通用閃存,容量分別為 512GB 和 1TB,均基于 321 層堆疊的 V9 1Tb TLC NAND 閃存。 而在 V9 NAND 閃存上,S
[半導體設計/制造]
消息稱三星DRAM及NAND計劃Q3漲價15-20%
由于人工智能(AI)需求激增,存儲半導體方面競爭進一步加劇,預計三星電子下半年業(yè)績將有所改善。 據(jù)韓國《每日經(jīng)濟新聞》,三星電子近期已向包括戴爾科技、慧與 HPE 在內(nèi)的主要客戶通報了漲價計劃,準備在第三季度將其主要存儲半導體、服務器 DRAM 和企業(yè)級 NAND 閃存報價提高 15-20%,而三星 Q2 已將其企業(yè)級 NAND 閃存漲價 20% 以上。 三星電子負責半導體業(yè)務的設備解決方案部門(DS)今天在京畿道華城工廠召開了全球戰(zhàn)略會議,就這一計劃進行了通報。 根據(jù)市場研究公司 D-RAM Exchange 的數(shù)據(jù),今年第一季度全球企業(yè)級 NAND 閃存銷售額達到 37.58 億美元(IT之家備注:當前約 273.43 億元人
[半導體設計/制造]
NAND跌價致需求上升,存儲器控制芯片廠受益
快閃存儲器控制芯片廠群聯(lián)今(10)日公布2019年第1季合并財報結果,受惠快閃存儲器(NAND Flash)控制芯片IC與存儲器模塊總出貨量成長及產(chǎn)品組合健康,獲利、毛利率均較上季成長。 群聯(lián)首季合并營收為93.43億元新臺幣(單位下同),受業(yè)外認列投資金士頓電子KSI(Kingston Solutions Inc.)損失影響,稅后凈利8.8億元,季增10.54%,與去年同期則約略持平。不過,因持續(xù)優(yōu)化產(chǎn)品組合,毛利20.94億元,年成長超過15%,毛利率22.41%,每股盈余4.47元。 群聯(lián)指出,與去年同期相比,NAND Flash控制芯片IC總出貨量成長近2成,存儲器模塊增長近6成,而SSD及eMMC成品成
[手機便攜]
小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved