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\n", 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初步升级成功。
Read The Fucking Source Code