Problem in short:
*eMMC partition's device files are not visible in /dev/ directory after 
partitiong using "sfdisk"*
HI ,

I have put log of script here, any suggestions,

+ partition_emmc /dev/mmcblk0
+ DRIVE=/dev/mmcblk0
+ HEADS=255
+ SECTOR_SIZE=512
+ SECTORS_PER_TRACK=63





*+ dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=108108+0 records in108+0 
records out+ sync+ dd if=/dev/mmcblk0 of=/dev/null bs=1M count=108108+0 
records in*
108+0 records out
+ sync
+ blockdev --flushbufs /dev/mmcblk0
+ + grepgrep+  bytes Disk

fdisk -l /dev/mmcblk0
+ awk {print $5}
+ SIZE=3841982464
+ echo DISK SIZE - 3841982464 bytes
DISK SIZE - 3841982464 bytes
+ echo 3841982464 255 / 63 / 512 / p
+ dc
+ CYLINDERS=467.094
+ echo CYLINDERS - 467.094
CYLINDERS - 467.094
+ sfdisk -R /dev/mmcblk0
BLKRRPART: Device or resource busy
sfdisk: This disk is currently in use.

+ 
+ [ 1 -ne 0 ]
+ + + grepawk /dev/mmcblk0 {print $3}

mount
+ mntpoint=/media/mmcblk0p8
/media/mmcblk0p6
/media/mmcblk0p7
/media/mmcblk0p5
+ echo unmounting /media/mmcblk0p8
unmounting /media/mmcblk0p8
+ umount /media/mmcblk0p8
+ echo unmounting /media/mmcblk0p6
unmounting /media/mmcblk0p6
+ umount /media/mmcblk0p6
+ echo unmounting /media/mmcblk0p7
unmounting /media/mmcblk0p7
+ umount /media/mmcblk0p7
+ echo unmounting /media/mmcblk0p5
unmounting /media/mmcblk0p5
+ umount /media/mmcblk0p5
+ sfdisk --force --in-order --Linux -H 255 -S 63 -C 467.094 /dev/mmcblk0 -uM
Checking that no-one is using this disk right now ...
OK

Disk /dev/mmcblk0: 467 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 184348 does not have an msdos signature
sfdisk:  /dev/mmcblk0: unrecognized partition table type

Old situation:
sfdisk: No partitions found

New situation:
Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start   End    MiB    #blocks   Id  System
/dev/mmcblk0p1   *     0+    31     32-     32767+   c  W95 FAT32 (LBA)
/dev/mmcblk0p2        32    231    200     204800   83  Linux
/dev/mmcblk0p3       232    431    200     204800   83  Linux
/dev/mmcblk0p4       432   3663   3232    3309568    5  Extended
/dev/mmcblk0p5       432+   531    100-    102399+  83  Linux
/dev/mmcblk0p6       532+   591     60-     61439+  83  Linux
/dev/mmcblk0p7       592+   791    200-    204799+  83  Linux
/dev/mmcblk0p8       792+  2060   1269-   1299455+  83  Linux
/dev/mmcblk0p9      2061+  3663   1603-   1641471+  83  Linux
Successfully wrote the new partition table

Re-reading the partition table ...

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
+ sync
+ blockdev --flushbufs /dev/mmcblk0
+ partprobe
Auto-mount of [/media/mmcblk0p5] successful
Auto-mount of [/media/mmcblk0p6] successful
Auto-mount of [/media/mmcblk0p7] successful
Auto-mount of [/media/mmcblk0p8] successful

*Error: Error informing the kernel about modifications to partition 
/dev/mmcblk0p5 -- Device or r.Error: Failed to add partition 5 (Device or 
resource busy)*
+ rm -rf /tmp/.a*
*+ mdev -s*
mount: mounting /dev/mmcblk0p1 on /media/mmcblk0p1 failed: Invalid argument
rm: can't remove '/tmp/.automount-mmcblk0p1': No such file or directory
mount: mounting /dev/mmcblk0p2 on /media/mmcblk0p2 failed: Invalid argument
rm: can't remove '/tmp/.automount-mmcblk0p2': No such file or directory
mount: mounting /dev/mmcblk0p3 on /media/mmcblk0p3 failed: Invalid argument
rm: can't remove '/tmp/.automount-mmcblk0p3': No such file or directory
mount: mounting /dev/mmcblk0p4 on /media/mmcblk0p4 failed: Invalid argument
rm: can't remove '/tmp/.automount-mmcblk0p4': No such file or directory
rm: can't remove '/tmp/.automount-mmcblk0p7': No such file or directory
rm: can't remove '/tmp/.automount-mmcblk0p8': No such file or directory
+ sync
+ blockdev --flushbufs /dev/mmcblk0
*+ mount*
rootfs on / type rootfs (rw)
192.168.1.3:/nfsboot on / type nfs 
(rw,relatime,vers=2,rsize=4096,wsize=4096,namlen=255,hard,nol)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
none on /dev/pts type devpts (rw,relatime,mode=600)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /var/run type tmpfs (rw,relatime,mode=777)
tmpfs on /var/spool/cron type tmpfs (rw,relatime,mode=755)
tmpfs on /var/sftp type tmpfs (rw,relatime,mode=755)




*+ sfdisk -R /dev/mmcblk0+ + [ 0 -ne 0 ]+ echo Nothing is mounted on 
/dev/mmcblk0Nothing is mounted on /dev/mmcblk0*
+ RETRY=50
+ NO_OF_PARTITIONS=2
+ 2 != 10
./BAK_S99-flashfirmware: line 1: 2: not found
+ check_and_format_partition /dev/mmcblk0p2 rootfs
+ PARTITION=/dev/mmcblk0p2
+ LABEL=rootfs
+ MNTPNT=0
+ mount
+ grep /dev/mmcblk0p2
+ awk {print $3}
+ MNTPNT=
+ [ -n  ]
+ [ -b /dev/mmcblk0p2 ]
+ mkfs.ext4 -L rootfs /dev/mmcblk0p2
mke2fs 1.42.8 (20-Jun-2013)




*Auto-mount of [/media/mmcblk0p5] successfulmkfs.ext4: No such file or 
directory while trying to determine hardware sector size+ 
check_and_format_partition /dev/mmcblk0p3 rootfs2+ 
PARTITION=/dev/mmcblk0p3+ LABEL=rootfs2*
+ MNTPNT=0
+ mount
+ grep+ awk /dev/mmcblk0p3
 {print $3}
Auto-mount of [/media/mmcblk0p8] successful
+ MNTPNT=
+ [ -n  ]
+ [ -b /dev/mmcblk0p3 ]
+ echo Cant find /dev/mmcblk0p3 partition
Cant find /dev/mmcblk0p3 partition
+ check_and_format_partition /dev/mmcblk0p5 recovery_rootfs
+ PARTITION=/dev/mmcblk0p5
+ LABEL=recovery_rootfs
+ MNTPNT=0
+ mount
+ grep /dev/mmcblk0p5+ awk {print $3}

+ MNTPNT=/media/mmcblk0p5
+ [ -n /media/mmcblk0p5 ]
+ echo /dev/mmcblk0p5 is mounted on /media/mmcblk0p5
/dev/mmcblk0p5 is mounted on /media/mmcblk0p5
+ [ -b /dev/mmcblk0p5 ]
+ echo Cant find /dev/mmcblk0p5 partition
Cant find /dev/mmcblk0p5 partition
+ check_and_format_partition /dev/mmcblk0p6 database
+ PARTITION=/dev/mmcblk0p6
+ LABEL=database
+ MNTPNT=0
+ mount
+ grep /dev/mmcblk0p6
+ awk {print $3}
Auto-mount of [/media/mmcblk0p7] successful
+ MNTPNT=
+ [ -n  ]
+ [ -b /dev/mmcblk0p6 ]
+ mkfs.ext4 -L database /dev/mmcblk0p6
Auto-mount of [/media/mmcblk0p6] successful
mke2fs 1.42.8 (20-Jun-2013)
/dev/mmcblk0p6 is mounted; will not make a filesystem here!
+ check_and_format_partition /dev/mmcblk0p7 firmware
+ PARTITION=/dev/mmcblk0p7
+ LABEL=firmware
+ MNTPNT=0
+ grep /dev/mmcblk0p7
+ mount
+ awk {print $3}
+ MNTPNT=/media/mmcblk0p7
+ [ -n /media/mmcblk0p7 ]
+ echo /dev/mmcblk0p7 is mounted on /media/mmcblk0p7
/dev/mmcblk0p7 is mounted on /media/mmcblk0p7
+ [ -b /dev/mmcblk0p7 ]
+ mkfs.ext4 -L firmware /dev/mmcblk0p7
mke2fs 1.42.8 (20-Jun-2013)
/dev/mmcblk0p7 is mounted; will not make a filesystem here!
+ check_and_format_partition /dev/mmcblk0p8 logging
+ PARTITION=/dev/mmcblk0p8
+ LABEL=logging
+ MNTPNT=0
+ grep /dev/mmcblk0p8
+ awk {print $3}
+ mount
+ MNTPNT=/media/mmcblk0p8
+ [ -n /media/mmcblk0p8 ]
+ echo /dev/mmcblk0p8 is mounted on /media/mmcblk0p8
/dev/mmcblk0p8 is mounted on /media/mmcblk0p8
+ [ -b /dev/mmcblk0p8 ]
+ echo Cant find /dev/mmcblk0p8 partition
Cant find /dev/mmcblk0p8 partition
+ sed -r s/://g
+ cat /sys/class/net/eth0/address
+ MACADDRESS=7c669d19cce2
+ BASE_MOUNT_POINT=/mnt/7c669d19cce2
+ ROOTFS_MOUNT=/mnt/7c669d19cce2/rootfs
+ ROOTFS2_MOUNT=/mnt/7c669d19cce2/rootfs2
+ ROOTFS_RECOVERY_MOUNT=/mnt/7c669d19cce2/recovery_rootfs
+ DB_MOUNT=/mnt/7c669d19cce2/database
+ FIRMWARE_MOUNT=/mnt/7c669d19cce2/firmware
+ LOGGING_MOUNT=/mnt/7c669d19cce2/logging
+ echoAndLog mount all the partitions
+ echo mount all the partitions
mount all the partitions
+ logger -p 5 -t ./BAK_S99-flashfirmware mount all the partitions
+ [ ! -d /mnt/7c669d19cce2/rootfs ]
+ [ ! -d /mnt/7c669d19cce2/rootfs2 ]
+ [ ! -d /mnt/7c669d19cce2/recovery_rootfs ]
+ [ ! -d /mnt/7c669d19cce2/database ]
+ RETRY=50
+ [ 50 -ne 0 ]
+ [ ! -b /dev/mmcblk0p2 ]
+ echo ....Waiting till /dev/mmcblk0p2 appears retry=50
....Waiting till /dev/mmcblk0p2 appears retry=50

Anything fishy ?? If same partitioning command i run from command prompt it 
works but not from script do you suggestion anything ?

Script looks as show below..

DRIVE="/dev/mmcblk0"
RFS1_PARTITION=${DRIVE}p2
RFS2_PARTITION=${DRIVE}p3
RECOVERYRFS_PARTITION=${DRIVE}p5
DATABASE_PARTITION=${DRIVE}p6
FIRMWARE_PARTITION=${DRIVE}p7
LOGGING_PARTITION=${DRIVE}p8

partition_emmc()                                                                
          

{                                                                               
          

        
DRIVE=$1                                                                        
  

        
HEADS=255                                                                       
  

        
SECTOR_SIZE=512                                                                 
  

        SECTORS_PER_TRACK=63             
                            
        #Clear the first 512KB of the disk to clear MBR
        dd if=/dev/zero of=${DRIVE} bs=1M count=108    
        sync                                           
        dd if=${DRIVE} of=/dev/null bs=1M count=108    
        
sync                                                                            
    

        blockdev --flushbufs 
${DRIVE}                                                
                                                       
        #Get the size of the disk                      
        SIZE=$(fdisk -l $DRIVE | grep "Disk" | grep bytes | awk '{print 
$5}')             
        echo "DISK SIZE - $SIZE 
bytes"                                                    
                                                                                
          

        #calculate the no of cylinders in the 
disk                                        
        CYLINDERS=$(echo "$SIZE $HEADS / $SECTORS_PER_TRACK / $SECTOR_SIZE 
/ p" | dc )    
        echo "CYLINDERS - 
$CYLINDERS"                                                 
                                                                                
      

        #Check if any of the partition is mounted, umount it if 
mounted.              
        $(sfdisk -R 
${DRIVE})                                                         
        if [ $? -ne 0 
];then                                                          
                mntpoint=$(mount | grep ${DRIVE} | awk '{print 
$3}')                  
                for i in $mntpoint ; 
do                                               
                        echo "unmounting 
$i"                                          
                        umount 
$i                                                     
                done                                                    
        else                                                            
                echo "Nothing is mounted on ${DRIVE}"                   
        fi                                                          
                                                                    
        #Partition drive                                            
#       sfdisk --force --in-order --Linux -H 255 -S 63 -C $CYLINDERS 
${DRIVE} -uM <<-__EOF__
        sfdisk --force --in-order --Linux -H 255 -S 63 -C 467 ${DRIVE} -uM 
<<-__EOF__       
        
,32,C,*                                                                         
    

        
,200,L                                                                          
    

        
,200,L                                                                          
    

        
,,E                                                                             
    

        
,100,L                                                                          
    

        
,60,L                                                                           
    

        
,200,L                                                                          
    

        
,1269,L                                                                         
    

        
,,,-                                                                         

        __EOF__    

}

# arg1 = partition
# arg2 = label
check_and_format_partition()
{
    PARTITION=$1
    LABEL=$2
        MNTPNT=0
        MNTPNT=$(mount | grep $PARTITION | awk '{print $3}')
        if [ -n "$MNTPNT" ]; then
            echo "$PARTITION is mounted on $MNTPNT"
        fi
    if [ -b $PARTITION ]; then
        mkfs.ext4 -L $LABEL $PARTITION
        #TODO : Find correct tunning parameter and set it.
        #tune2fs 
    else
        echo "Cant find $PARTITION partition"
    fi
}

#Partition the eMMC
    partition_emmc $DRIVE

    sync
    blockdev --flushbufs $DRIVE

    partprobe
    rm -rf /tmp/.a*

    #Trigger the creation of the device files
    mdev -s
    sync
    blockdev --flushbufs $DRIVE

    mount

    $(sfdisk -R ${DRIVE})
    if [ $? -ne 0 ]; then
       mntpoint=$(mount | grep ${DRIVE} | awk '{print $3}')
            for i in $mntpoint ; do
                  echo "unmounting $i"
                umount $i
            done
    else
        echo "Nothing is mounted on ${DRIVE}"
    fi

    #Wait till mmcblk0pX partitions are available.
    RETRY=50
    NO_OF_PARTITIONS=2
    while (( $NO_OF_PARTITIONS != 10 )); do

        while (( [ $RETRY -ne 0 ] &&  [ ! -b "${DRIVE}p$i" ] )); do
           echo "....Waiting till $RFS1_PARTITION appears"
           RETRY=`expr $RETRY - 1`
           sleep 1
        done

    if [ $RETRY -eq 0 ];then
        echo "Error..Device files are not present"
        exit 1;
    fi
        NO_OF_PARTITIONS=`expr NO_OF_PARTITIONS + 1`
    done

    #Format the partitions
    check_and_format_partition $RFS1_PARTITION $RFS_STRING
    check_and_format_partition $RFS2_PARTITION $RFS2_STRING
    check_and_format_partition $RECOVERYRFS_PARTITION $RFS_RECOVERY_STRING
    check_and_format_partition $DATABASE_PARTITION $DATABASE_STRING
    check_and_format_partition $FIRMWARE_PARTITION $FIRMWARE_STRING
    check_and_format_partition $LOGGING_PARTITION $LOGGING_STRING

      MACADDRESS=`cat /sys/class/net/eth0/address | sed -r 's/://g'`
      BASE_MOUNT_POINT=/mnt/$MACADDRESS
      ROOTFS_MOUNT=$BASE_MOUNT_POINT/rootfs
      ROOTFS2_MOUNT=$BASE_MOUNT_POINT/rootfs2
      ROOTFS_RECOVERY_MOUNT=$BASE_MOUNT_POINT/recovery_rootfs
      DB_MOUNT=$BASE_MOUNT_POINT/database
      FIRMWARE_MOUNT=$BASE_MOUNT_POINT/firmware
      LOGGING_MOUNT=$BASE_MOUNT_POINT/logging

      echoAndLog "mount all the partitions"
      #Create mount point if it doesn't exist.
      if [ ! -d "$ROOTFS_MOUNT" ]; then
         mkdir -p $ROOTFS_MOUNT
      fi
      if [ ! -d "$ROOTFS2_MOUNT" ]; then
         mkdir -p $ROOTFS2_MOUNT
      fi
      if [ ! -d "$ROOTFS_RECOVERY_MOUNT" ]; then
         mkdir -p $ROOTFS_RECOVERY_MOUNT
      fi
      if [ ! -d "$DB_MOUNT" ]; then
         mkdir -p $DB_MOUNT
      fi


}






On Thursday, 23 April 2015 10:33:33 UTC+5:30, Ankur Tank wrote:
>
> Oh that was the problem..I was referring JDEC spec and all :)
>
> Thank you very much for reply Mr. Nelson,
> 7 Partition problem solved :)
>
> Let me know if you have any suggestions for other problems.
> One more questions,
>
> # blkid
> /dev/mmcblk0p2: LABEL="rootfs" UUID="3bb8e52f-1434-4e04-9d76-a50d75380c39" 
> TYPE="ext4"
> /dev/mmcblk0p5: LABEL="recovery_rootfs" 
> UUID="5f8060da-b692-4278-9120-af0258579e12" TYPE="ext4"
> /dev/mmcblk0p8: LABEL=*"logging" *UUID="72064afc-e114-4339-89cd-76725fedbc86" 
> TYPE="ext4"
> /dev/mmcblk0p3: LABEL="rootfs2" 
> UUID="0287571c-6965-4906-91d0-347ec26f7aea" TYPE="ext4"
> /dev/mmcblk0p7: LABEL="firmware" 
> UUID="b812c1a2-12dc-4543-b4f5-1bfc5f4c4e0a" TYPE="ext4"
> */dev/mmcblk0boot0: LABEL="logging" 
> UUID="72064afc-e114-4339-89cd-76725fedbc86" TYPE="ext4"*
> /dev/mmcblk0p6: LABEL="database" 
> UUID="45b8786e-bcb2-457d-8796-e78f9188aa55" TYPE="ext4"
>
> Why is */dev/mmcblk0boot0* appears here, it doesn't show up in fdisk -l 
> output?
> from where is this mysterious partition coming from? 
>
>
> On Thursday, 23 April 2015 08:16:33 UTC+5:30, RobertCNelson wrote:
>>
>> On Wed, Apr 22, 2015 at 9:25 PM, Ankur Tank <art...@gmail.com> wrote: 
>> > I am writing firmware(MLO,u-boot.img, uImage(ver 3.12), dtb, 
>> rootfs.tar.gz) 
>> > programming script for 
>> >  am335x based custom board which is based on Beaglebone black. 
>> > Rootfile system is to be put onto the eMMC. 
>> > Firmware programming script runs as the one of the init script from 
>> > the nfsroot folder when board boots for the first time at programming 
>> > station. 
>> > 
>> > Basically script 
>> > 1. Partitions the eMMC and 
>> > 2. writes MLO, u-boot.img, uImage, dtb in the raw area of the first 
>> > partition and 
>> > 3. Then formats the other partitions as ext4 and 
>> > 4. mounts ext4 partitions and extacts the rootfs.tar.gz. 
>> > 
>> > Now there are two issues with the script and one with backup kernel 
>> memory 
>> > area. 
>> > 
>> > Script issues 
>> > 
>> > 1. I am not able create more than 7 partition(including logical 
>> partitions) 
>> >    though sfdisk creates the partitions, device files related to 
>> partition 
>> > is not available in /dev directory 
>> > 
>> > Here is sfdisk command i used 
>> > 
>> >     #Partition emmc 
>> >     sfdisk -D -H 255 -S 63 -C 467 /dev/mmcblk0 -uM << EOF 
>> >     ,32,C,* 
>> >     ,200,L 
>> >     ,200,L 
>> >     ,,E 
>> >     ,100,L 
>> >     ,60,L 
>> >     ,200,L 
>> >     ;1269,L 
>> >     ; 
>> >     EOF 
>> > 
>> > When i list the partitions fdisk/sfdisk reports 8 partitions but i 
>> don't see 
>> > partition files related to 8th partition. 
>> > 
>> > Here is fdisk output for the same, 
>> > 
>> >     # fdisk -l /dev/mmcblk0 
>> > 
>> >     Disk /dev/mmcblk0: 3841 MB, 3841982464 bytes 
>> >     255 heads, 63 sectors/track, 467 cylinders 
>> >     Units = cylinders of 16065 * 512 = 8225280 bytes 
>> > 
>> >             Device Boot      Start         End      Blocks  Id System 
>> >     /dev/mmcblk0p1   *           1           5       40131   c Win95 
>> FAT32 
>> > (LBA) 
>> >     /dev/mmcblk0p2               6          31      208845  83 Linux 
>> >     /dev/mmcblk0p3              32          57      208845  83 Linux 
>> >     /dev/mmcblk0p4              58         467     3293325   5 Extended 
>> >     /dev/mmcblk0p5              58          70      104391  83 Linux 
>> >     /dev/mmcblk0p6              71          78       64228+ 83 Linux 
>> >     /dev/mmcblk0p7              79         104      208813+ 83 Linux 
>> >     /dev/mmcblk0p8             105         266     1301233+ 83 Linux 
>> >     /dev/mmcblk0p9             267         467     1614501  83 Linux 
>> > 
>> > 2. Some times after partitioning eMMC device files(/dev/mmcblk0p2, 
>> > /dev/mmcblk0p3 etc) doesn't appear and mkfs utility fails to format the 
>> > partition and firmware flashing fails. 
>> > 
>> > I used partprobe after partitioning eMMC but with not help. :( 
>> > 
>> > eMMC memory issue 
>> > 
>> > First partition of the eMMC is of type "Win95 FAT32 (LBA)" 
>> > We are not formatting this partition and using it as raw. 
>> > There are 3 copies of MLO, 2 copies of u-boot.img, uImage and dtb in 
>> the 
>> > that partition. 
>> > 
>> > After trying multiple time flashing using dd, uImage first copy memory 
>> area 
>> > is corrupted and board complains the image in that partition is 
>> corrupted. 
>> > Now if eMMC is having controller handling wear leveling and error 
>> correction 
>> > mechanism then how memory area where kernel is stored is corrupted? 
>> > 
>> > Any suggestions/ideas/pointers to any of the mentioned problem? 
>>
>> You've run into: 
>>
>> CONFIG_MMC_BLOCK_MINORS=8 
>>
>> Regards, 
>>
>> -- 
>> Robert Nelson 
>> https://rcn-ee.com/ 
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to