This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MMC partition table problems



I need 3 partitions on my 4GB SD card. Using busybox fdisk to partition it (type=83 Linux), and mkfs.ext3 to format each partition.

I can force reread of the partition table all day and get different results each time.

Is there a kernel bug that doesn't read the partition table accurately and consistently?

A few items worth noting:

DM8168; linux-2.6.37-psp04.04.00.01; busybox 1.18.2

/proc/devices section "Block devices:" contains "179 mmc"

 

In trying to work around this problem, I currently have 4 partitions, with the 4th partition at the start of the device.  But I still have the problem.

 

/ # fdisk -l /dev/mmcblk0

 

Disk /dev/mmcblk0: 3980 MB, 3980394496 bytes

4 heads, 16 sectors/track, 121472 cylinders

Units = cylinders of 64 * 512 = 32768 bytes

 

        Device Boot      Start         End      Blocks  Id System

/dev/mmcblk0p1              63       31313     1000032  83 Linux

/dev/mmcblk0p2           31314       46939      500032  83 Linux

/dev/mmcblk0p3           46940      121472     2385056  83 Linux

/dev/mmcblk0p4               1          62        1976  83 Linux

 

Partition table entries are not in disk order

/ # for i in `seq 5`; do blockdev --rereadpt /dev/mmcblk0; ls -l /dev/mmc*; echo; done

brw-rw----    1 root     root      179,   0 Jul 30 16:31 /dev/mmcblk0

brw-rw----    1 root     root      179,   1 Jul 30 17:55 /dev/mmcblk0p1

brw-rw----    1 root     root      179,   2 Jul 30 17:55 /dev/mmcblk0p2

brw-rw----    1 root     root      179,   3 Jul 30 17:55 /dev/mmcblk0p3

brw-rw----    1 root     root      179,   4 Jul 30 17:55 /dev/mmcblk0p4

 

brw-rw----    1 root     root      179,   0 Jul 30 16:31 /dev/mmcblk0

brw-rw----    1 root     root      179,   1 Jul 30 17:55 /dev/mmcblk0p1

brw-------    1 root     root      179,   2 Jul 30 17:55 /dev/mmcblk0p2

brw-rw----    1 root     root      179,   3 Jul 30 17:55 /dev/mmcblk0p3

brw-------    1 root     root      179,   4 Jul 30 17:55 /dev/mmcblk0p4

 

brw-rw----    1 root     root      179,   0 Jul 30 16:31 /dev/mmcblk0

brw-rw----    1 root     root      179,   1 Jul 30 17:55 /dev/mmcblk0p1

brw-rw----    1 root     root      179,   2 Jul 30 17:55 /dev/mmcblk0p2

brw-rw----    1 root     root      179,   4 Jul 30 17:55 /dev/mmcblk0p4

 

brw-rw----    1 root     root      179,   0 Jul 30 16:31 /dev/mmcblk0

brw-rw----    1 root     root      179,   1 Jul 30 17:55 /dev/mmcblk0p1

brw-rw----    1 root     root      179,   2 Jul 30 17:55 /dev/mmcblk0p2

brw-rw----    1 root     root      179,   3 Jul 30 17:55 /dev/mmcblk0p3

brw-rw----    1 root     root      179,   4 Jul 30 17:55 /dev/mmcblk0p4

 

brw-rw----    1 root     root      179,   0 Jul 30 16:31 /dev/mmcblk0

brw-rw----    1 root     root      179,   1 Jul 30 17:55 /dev/mmcblk0p1

brw-rw----    1 root     root      179,   2 Jul 30 17:55 /dev/mmcblk0p2

brw-rw----    1 root     root      179,   3 Jul 30 17:55 /dev/mmcblk0p3

 

  • dmesg reports that all partitions are being found; so the problem is in creating the necessary nodes...

    / # for i in `seq 10`; do blockdev --rereadpt /dev/mmcblk0 && ls /dev/mmc*; echo; done
    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p3  /dev/mmcblk0p4

     

    /dev/mmcblk0    /dev/mmcblk0p1  /dev/mmcblk0p3  /dev/mmcblk0p4

     

    /dev/mmcblk0    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    /dev/mmcblk0    /dev/mmcblk0p2  /dev/mmcblk0p4
    /dev/mmcblk0p1  /dev/mmcblk0p3

     

    / # dmesg | tail
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
     mmcblk0: p1 p2 p3 p4
    / #
  • If I manually create the nodes, I can mount them ok.  But why aren't they created by the kernel??

  • I have a work-around, but not a fix.

    Use fdisk -l to see what partitions are on the card.  If a corresponding node doesn't exist, then create it manually using mknod.