娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

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

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

環境 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   選上,其他的可以去掉,不確定的可以參考友善之臂的

這樣編譯出來的內核是可以被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 經過測試發現,這里改完后根本不起作用,甚至將整個注釋也無妨,估計分區已經固死在后面的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也要拷貝過來,這是友善沒有開源的一個驅動之一,
所以不用研究了,拷過來就是了。

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

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


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


修改方法如下,“-”就是要去掉的內容,“+”就是要增加的內容,@@后面的是行號,
嫌麻煩的的直接將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 文件系統
下一篇:linux-2.6.38到tiny6410的移植手冊(連載4)__USB設備(U盤,攝像頭,wifi)

推薦閱讀最新更新時間:2025-05-21 18:30

linux-2.6.38tiny6410移植手冊(連載3)__ LCD&觸摸屏
這次lcd和觸摸屏智能一起移植了,至于原因明天在開一貼詳細說明, http://www.arm9home.net/read.php?tid-14273.html 主要是一線觸摸的原因,它劫持了lcd的背光控制,這個花了我三天時間呀才發現, 友善真是的。。。。 先弄lcd屏吧 vi arch/arm/plat-samsung/include/plat/map-base.h 第39行 增加 #define S3C_VA_LCD S3C_ADDR(0x01100000) /* LCD */ 從友善的源碼中將arch/arm/mach-s3c64xx/include/mach/regs-lcd.h拷貝過來 從友善的源碼中將drive
[單片機]
傳英特爾攜紫光欲顛覆NAND Flash 紫光漲逾17%
????新浪港股訊 1月19日消息,紫光控股(4.44, 0.34, 8.29%)直線拉升,截止發稿,漲17.8%,報4.82元。   近日臺灣DIGITIMES報道指出,業界透露英特爾在3D NAND布局押寶大陸市場,不僅擴充大陸12吋廠的產能,后續不排除以技術授權等方式,加速攜手紫光集團,屆時恐顛覆NAND Flash產業。   DIGITIMES報道指出,英特爾在2012年開始陸續退出新加坡廠的股份,并降低對IM Flash合資廠的持股,英特爾更開始擴張大陸市場,將大連廠改裝成3D NAND工廠,埋下英特爾與美光在3D NAND布局各奔前程的伏筆。觀察近些年英特爾在NAND Flash的策略,早已步步疏離美光,雙方正式宣告
[半導體設計/制造]
mini2440 nand flash和nor flash啟動的區別
mini2440及其他類型的開發板一般都有從nand flash和nor flash啟動兩種方式,那么這兩種啟動方式有什么區別呢,初學者一般都會一頭霧水。下面就講講這兩種啟動方式的區別。 mini2440的nand flash128M,而nor flash只有2M,系統的bootloader一般很小,只有200多KB,而作為一個完整的系統,需要bootloader(200KB),kernel(2M),rootfs(100M),這些加起來就有100多M了,這三個部分需要一直存在系統中,掉電非易失,當然就不能放在內存(SDRAM)中了,需要放在非易失存儲器nandflash中,norflash因為很?。?M)只可以容納的
[單片機]
Arm 2440——Nand flash啟動模式詳解(LED程序為例)
斷斷續續的研究arm也有2個月了,現在才感覺理解了arm在Nand flash模式下的啟動過程,現在來這里記錄下來以表達我無比喜悅的心情。閑話少說,趁著還沒有忘記學習過程中的感受,直接進入正題。 大家都知道,arm在Nand flash啟動模式下啟動時系統會將Nand flash中的前4KB代碼拷貝到SRAM(也就是Steppingstone中),由SRAM配置中斷向量表和完成Nand flash訪問的必要初始化,然后將Nand flash中的全部程序代碼拷貝到SDRAM中,最后由SRAM跳轉到SDRAM,然后程序就正常執行了,這一過程看上去很簡單,但是真正理解這一過程還是不簡單的,盡管這樣,還是想告訴大家仔細理解還是比較容易理解這
[單片機]
嵌入式系統中Nand Flash寫平衡的研究
隨著嵌入式技術在電子信息等領域的快速發展,對數據存儲設備容量和性能的要求也日益提高。Nand Flash在這一領域的應用越來越廣泛,由于Nand Flash在寫操作之前需要擦除整塊且使用壽命有限,因此,如何更有效的管理好Nand Flash提高其使用壽命成為一個研究熱點。就目前已經實現高效管理Nand Flash的研究成果來看,主要是在讀寫操作過程中引入控制機制來實現閃存各單元的均衡擦除,從而提高其使用壽命。其中ZLG/FFS是周立功公司開發的 Nand Flash通用驅動程序,雖然其很好的實現了均衡管理,但在追加文件內容時需要擦除整塊,這與提高Nand Flash的使用壽命而盡量少擦除閃存塊觀點是相違背的,為此本文設計了一個新的
[單片機]
嵌入式系統中<font color='red'>Nand</font> <font color='red'>Flash</font>寫平衡的研究
TMS320C6x DSP的FLASH引導方法研究與實現
摘要:介紹了TMS320C6x DSP的幾種FLASH引導方法,比較了引導過程中基于軟件流水的數據搬移方法和QDMA方式的數據搬移方法,并介紹了如何利用在系統編程(ISP)對上電引導程序進行FLASH編程。通過對實際的TMS32C6711 DSP電路調試實驗,證明了以上方法簡單易行。 關鍵詞:FLASH存儲器 上電引導 COFF文件格式 DSP FLASH存儲器是在EPROM和EEPROM的基礎上發展起來的一種非易失性存儲器,在掉電情況下仍能保證數據不丟失,并能夠在不離開電路板或據設備的情況下實施擦除和再編程操作。由于其具有結構簡單、維護便利、存取速度快、對環境適應能力強、抗振性能好等優點十分適合于嵌入式系統的設計和開發,
[應用]
LM3S1138入門6,系統時鐘設置
程序運行后,系統時鐘設置為:外部6MHz晶振3分頻,即系統時鐘為2MHz。在此狀態下LED閃爍較慢。 稍后,系統時鐘設置為:內部振蕩器(12MHz 30%)2分頻,即系統時鐘為6MHz左右。LED閃爍速度明顯加快。 主函數: #include LED.H #include hw_types.h #include hw_memmap.h #include hw_sysctl.h #include hw_gpio.h #include sysctl.h #include gpio.h // 將較長的標識符定義成較短的形式 #define SysCtlPeriEnable SysCtlPeriphe
[單片機]
u-boot-2014.10移植(5)支持nand
在smdk2440.h里面加上NAND的配置選項 #define CONFIG_CMD_NAND 編譯出錯 drivers/mtd/nand/s3c2410_nand.c: In function 's3c2410_hwcontrol': drivers/mtd/nand/s3c2410_nand.c:44: warning: implicit declaration of function 's3c2410_get_base_nand' drivers/mtd/nand/s3c2410_nand.c:44: warning: initialization makes pointer f
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 中阳县| 酉阳| 巴青县| 巴东县| 万载县| 康乐县| 漳州市| 阿勒泰市| 鄢陵县| 阿图什市| 余干县| 康乐县| 丹巴县| 唐海县| 双鸭山市| 通州市| 富裕县| 平阳县| 石景山区| 满城县| 泊头市| 固原市| 斗六市| 兴宁市| 平舆县| 泉州市| 东光县| 子洲县| 兰考县| 济南市| 沙湾县| 新化县| 鱼台县| 潢川县| 新平| 安宁市| 抚州市| 镇原县| 靖西县| 宝山区| 合川市|