博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qemu-uboot-mini2440 支持 256M 大容量NAND FLASH 的解决方法
阅读量:4134 次
发布时间:2019-05-25

本文共 2518 字,大约阅读时间需要 8 分钟。

《使用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 ,可以看看这个网页:

至于 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 要取那些值,可以看看这个 

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

转载地址:http://krsvi.baihongyu.com/

你可能感兴趣的文章
A - Average distance HDU - 2376(树形)
查看>>
B - Adding Digits CodeForces - 260A
查看>>
Party at Hali-Bula POJ - 3342(树形dp)
查看>>
E - Balls and Boxes CodeForces - 260C(思维)
查看>>
A - Anniversary party HDU - 1520(没有上司的舞会)
查看>>
B - Greg's Workout CodeForces - 255A(思维)
查看>>
E - Code Parsing CodeForces - 255B(思维)
查看>>
D - Undoubtedly Lucky Numbers CodeForces - 244B(数论 )
查看>>
Minimal coverage(贪心 区间覆盖)
查看>>
Query on a tree HDU - 3804(线段树求区间最大+树链剖分)
查看>>
dB,dBi, dBd, dBc,dBm,dBw的区别
查看>>
拓扑排序
查看>>
有向无权图最短路径问题——BFS求解
查看>>
关于程序的运算时间复杂度的一点思考
查看>>
Winsock的同步异步模式
查看>>
并查集
查看>>
二维数组的传递方式
查看>>
Kosaraju 算法求解一个有向图的强连通分支个数
查看>>
阻塞与非阻塞的区别
查看>>
C++ ofstream和ifstream详细用法
查看>>