zoukankan      html  css  js  c++  java
  • am335x 1G nand 启动Linux qt

    针对DRAM的升级,修改u-boot 的参数即可。

    include/configs/ok335x.h

    修改PHYS_DRAM_1_SIZE 为0x40000000  这是1G的大小。

    原来512M 为上面那个参数0x20000000。

    针对nandflash 的升级,作了以下修改:

    在u-boot 内 include/configs/ok335x.h

    #define CONFIG_SYS_NAND_ECCSIZE   2048

    将这个参数设置为2048 , 原来的512M的nandflash  为512 ,  原因是因为原来的29F4G08ABADA 芯片虽然说一页也是2k 但是,他分了4个子页,所以一次读写可以读写512b。

    现在使用的是samsung 的K9K8G08U0E  这个1G的芯片也是一页2k , 但是和原来的芯片不同的是,这个芯片的子页也是2k ,所以他的一次读写是 2k。

    所以这个参数为2048。

    在kernel 中的修改:

    arch/arm/mach-omap2/board-am335xevm.c

      在evm_nand_init 函数中,设置 ECC 的校验方式为:

      

    pdata->ecc_opt = OMAP_ECC_BCH4_CODE_HW;

      这里面的代码跟踪是

     pdata = omap_nand_init(am335x_nand_partitions,
             ARRAY_SIZE(am335x_nand_partitions), 0, 0,
             //NULL);
            &am335x_nand_timings);----
                                                          -
                                                          -
                                                          -
    static int __init omap_nand_init(void)                                          
    {                                                                               
        pr_info("%s driver initializing
    ", DRIVER_NAME);                           
                                                                                    
        return platform_driver_register(&omap_nand_driver);                         
    }                                                                  |            
                                                                        |
                                                                        |
    static struct platform_driver omap_nand_driver = {                              
        .probe      = omap_nand_probe,                                              
        .remove     = omap_nand_remove,                                             
    #ifdef CONFIG_PM                                                                
        .suspend    = omap_nand_suspend,                                            
        .resume     = omap_nand_resume,                                             
    #endif                                                                          
        .driver     = {                                                             
            .name   = DRIVER_NAME,                                                  
            .owner  = THIS_MODULE,                                                  
        },                                                                          
    };                                                                              
    
    //omap_nand_probe 
    static int __devinit omap_nand_probe(struct platform_device *pdev)              
    {                                                                               
        struct omap_nand_info       *info;                                          
        struct omap_nand_platform_data  *pdata;                                     
        int             err;                                                        
        int             i, offset;                                            
        ......
        ......
                                                                                    
        /* selsect the ecc type */                                                  
        if (pdata->ecc_opt == OMAP_ECC_HAMMING_CODE_DEFAULT)                        
            info->nand.ecc.mode = NAND_ECC_SOFT;                                    
        else {                                                                      
            if (pdata->ecc_opt == OMAP_ECC_BCH4_CODE_HW) {                        -------------在这里,设置ECC 校验的模式,还是上面那个子页大小问题。  
                info->nand.ecc.bytes    = 4*7;                                      
                info->nand.ecc.size     = 4*512;                                    
            } else if (pdata->ecc_opt == OMAP_ECC_BCH8_CODE_HW) {                   
                info->nand.ecc.bytes     = OMAP_BCH8_ECC_SECT_BYTES;                
                info->nand.ecc.size      = 512;                                     
                info->nand.ecc.read_page = omap_read_page_bch;                      
            } else {                                                                
                info->nand.ecc.bytes    = 3;                                        
                info->nand.ecc.size     = 512;                                      
            }                                                                       
        ......
        ......
                                                                                    
        return 0;                                                                   
                                                                                    
    out_release_mem_region:                                                         
        release_mem_region(info->phys_base, NAND_IO_SIZE);                          
    out_free_info:                                                                  
        kfree(info);                                                                
                                                                                    
        return err;                                                                 
    }                                                 

    文件系统的设置:

    文件系统本省不用作修改,修改的是制作ubi文件系统的那个参数:

     1 //mkubiimg.sh
     2 
     3 #这里面这个 -F 必须放在最后,具体原因我也没有查清。
     4 ./mkfs.ubifs  -q -r rootfs_v2 -m 2048 -e 126976 -c 2047 -o  ubifs.img -F        
     5 echo mkfs.ubifs over!                                                           
     6 ./ubinize -o ubi.img -m 2048 -p 128KiB ubinize.cfg                              
     7 echo ubinize over!                                                              
     8                                                                                 
     9 sync                                                                            
    10                                                                                 
    11 cp ubi.img $DST_PATH -rf                                                        
    12 echo make file system ok !       
    13 
    14 
    15 //ubinize.cfg
    16 [ubifs]                                                                         
    17 mode=ubi                                                                        
    18 image=ubifs.img                                                                 
    19 vol_id=0                                                                        
    20 vol_size=231MiB                                                                 
    21 vol_type=dynamic                                                                
    22 vol_name=rootfs                                                                 
    23 vol_flags=autoresize                                                   

    到此,1G的nandflash 以及1G DRAM初步升级成功。

  • 相关阅读:
    使用C# impersonation进行windows帐号的校验
    今天,如何将你现有的网站移动互联网化【译】
    吐槽一下拖延的生活状态
    Web前端开发工程师编程能力飞升之路【转】
    公司框架集成log4net时遇到的问题
    我所认知的电子商务解决方案
    Web开发攻城狮,欲善其事先利其器
    调用Web Service服务出现响应消息的内容类型text/html与绑定text/xml的内容类型不匹配
    服务器 '***' 上的 MSDTC 不可用
    Firefox中无法使用window.close()关闭窗口
  • 原文地址:https://www.cnblogs.com/chenfulin5/p/5915341.html
Copyright © 2011-2022 走看看