qemu-uboot-mini2440 支持 256M 大容量NAND FLASH 的解决方法

《使用qemu 建立mini2440的模拟仿真环境》补充修正说明

之后续研究:
最近,又研究了一下qemu-uboot-kernel这套代码,发现了只需要修改两个地方就可以使qemu支持256M以及以上容量的NAND FLASH, 

一、

# vim qemu_src/hw/mini2440.c

找到下面这第372行代码:

    /* Check the boot mode */
    switch (mini->boot_mode) {
        case BOOT_NAND:
            sram_base = S3C_SRAM_BASE_NANDBOOT;
            int size = bdrv_getlength(drives_table[nand_idx].bdrv);
            switch (size) {
                case 2 * 65536 * (512 + 16):
                    nand_cid = 0x76;
                    break;
                case 4 * 65536 * (512 + 16):
                    nand_cid = 0xf1;
                    break;
                default:
                    printf("%s: Unknown NAND size/id %d (%dMB) defaulting to old 64MB\n",
                            __func__, size, ((size / (512 + 16)) * 512) / 1024 / 1024);
                    break;
            }
            break;

在default: 语句上方加入下面这三行:

        case 8 * 65536 * (512 + 16):
                    nand_cid = 0xda;                       // 256MB flash == 0xda
                    break;

如果要支持比如 512M 容量的 NAND FLASH , 那么可以模仿上面的代码,跟着加入下面三行:

        case 16 * 65536 * (512 + 16):
                    nand_cid = 0xdc;                       // 512MB flash == 0xdc
                    break;

至于里面为什么是 512 +16 ,可以看看这个网页:http://bbs.eeworld.com.cn/thread-305322-1-1.html

至于 0xda 是什么东西,可以看看 qemu_src/nand.c 中下面这些内容:
/* Information based on Linux drivers/mtd/nand/nand_ids.c */
static const struct {
    int size;
    int width;
    int page_shift;
    int erase_shift;
    uint32_t options;
} nand_flash_ids[0x100] = {
................................
    [0x76] = { 64, 8, 9, 5, 0 },
................................
  /*
     * These are the new chips with large page size. The pagesize and the
     * erasesize is determined from the extended id bytes
     */
# define LP_OPTIONS    (NAND_SAMSUNG_LP | NAND_NO_READRDY | NAND_NO_AUTOINCR)
# define LP_OPTIONS16    (LP_OPTIONS | NAND_BUSWIDTH_16)
......................................................................
  /* 1 Gigabit */        [0xa1] = { 128, 8, 0, 0, LP_OPTIONS },        [0xf1] = { 128, 8, 0, 0, LP_OPTIONS },       [0xb1] = { 128, 16, 0, 0, LP_OPTIONS16 },       [0xc1] = { 128, 16, 0, 0, LP_OPTIONS16 },
    /* 2 Gigabit */
    [0xaa] = { 256,    8,    0, 0, LP_OPTIONS },
    [0xda] = { 256,    8,    0, 0, LP_OPTIONS },
................................................................

二、
还要修改一个文件,那就是 

vim qemu_src/mini2440/mini2440_start.sh 

修改为以下内容:
echo Starting in $base
#name_nand="$base/mini2440_nand64.bin"
#name_nand="$base/mini2440_nand128.bin"
name_nand="$base/mini2440_nand256.bin"
if [ ! -f "$name_nand" ];then
 echo $0 : creating NAND empty image : "$name_nand"
# dd if=/dev/zero of="$name_nand" bs=528 count=131072
# dd if=/dev/zero of="$name_nand" bs=2112 count=65536 
dd if=/dev/zero of="$name_nand" bs=135168 count=2048

..........................................................
至于为什么bs 和 count 要取那些值,可以看看这个 http://blog.163.com/chenfang7977@yeah/blog/static/128274196201008101048689/

三、修改完上述两个文件,然后,再重新把 qemu 编译一遍,就可以使用命令  sudo sh mini2440/mini2440_start.sh  来重新启动 qemu-uboot-mini2440了

上传个启动 125M 的 最新版 rootfs_qtopia_qt4 的图片:
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值