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初步升级成功。

原文地址:https://www.cnblogs.com/chenfulin5/p/5915341.html