Difference between revisions of "MultiMediaCard"

From ArmadeusWiki
Jump to: navigation, search
m (Card insertion)
(Prepare your card)
(32 intermediate revisions by 4 users not shown)
Line 4: Line 4:
  
 
You can use standard MMC/SD/miniSD/microSD cards with your Armadeus board:
 
You can use standard MMC/SD/miniSD/microSD cards with your Armadeus board:
* with a DevLight V1, you must have [[MMC/SD | the corresponding connector attached to your development board.]] and use an adaptor for miniSD and microSD
+
* with an APF9328 DevLight V1, you must have [[MMC/SD | the corresponding connector attached to your development board.]] and use an adaptor for miniSD and microSD,
* with a DevLight V2, you can use the onboard microSD connector
+
* with an APF9328 DevLight V2, you can use the onboard microSD connector,
* with an [[APF9328DevFull]], you can use the MMC/SD onboard connector and an adaptor for miniSD and microSD
+
* with an [[APF9328DevFull]], you can use the MMC/SD onboard connector and an adaptor for miniSD and microSD,
* with an [[APF27Dev]], you can use the onboard microSD connector
+
* with an [[APF27Dev]], an [[APF28Dev]], an [[APF51Dev]] or an [[APF6Dev]], you can use the onboard microSD connector.
  
 
All needed drivers are included in the standard Armadeus Linux image.
 
All needed drivers are included in the standard Armadeus Linux image.
  
 
==Card insertion==
 
==Card insertion==
You should something like that on the Linux console:
+
You should see something like that on the Linux console:
 
<pre class="apf">
 
<pre class="apf">
 
  # imx-mmc imx-mmc.0: card inserted
 
  # imx-mmc imx-mmc.0: card inserted
Line 21: Line 21:
 
</pre>
 
</pre>
  
Note :
+
==Mounting the MMC/SD from Linux==
If the special files /dev/mmcblk0, /dev/mmcblk0p1 /dev/mmcblk0p2 ... /dev/mmcblk0p7 are NOT present on your filesystem,
+
 
create them by hand :
+
* Just mount the MMC like you will do on your PC:
 
<pre class="apf">
 
<pre class="apf">
  # mknod /dev/mmcblk0 b 179 0
+
  # mount /dev/mmcblk0p1 /media/mmc            (on all APF *except* APF6)
# mknod /dev/mmcblk0p1 b 179 1
+
# mknod /dev/mmcblk0p2 b 179 2
+
...
+
# mknod /dev/mmcblk0p7 b 179 7
+
 
</pre>
 
</pre>
(It happened to me after upgrading an APF9328+DevLight from version 2.3 to 3.1)
 
 
==Mounting the MMC/SD==
 
 
* Just mount the MMC like you will do on your PC, for example (FAT32 formatted card):
 
 
<pre class="apf">
 
<pre class="apf">
  # mount -t vfat /dev/mmcblk0p1 /mnt/mmc
+
  # mount /dev/mmcblk1p1 /media/mmc             (on APF6)
 
</pre>
 
</pre>
* Then, you can access the MMC's files from the ''/mnt/mmc'' directory
+
* Then, you can access the MMC's files from the ''/media/mmc'' directory. Filesystem should be automagically detected.
 
+
* Of course if you have several partitions on your MMC/SD they will be named p1/p2/p3...
If you have problems with vfat code page [http://www.armadeus.com/wiki/index.php?title=MultiMediaCard#VFAT_Code_Page click here]
+
* If you have problems with vfat code page, [[MultiMediaCard#VFAT_Code_Page|include the missing code page into the kernel]].
  
 
==Booting from MMC/SD==
 
==Booting from MMC/SD==
Line 47: Line 38:
  
 
===Prepare your card===
 
===Prepare your card===
* On your APF board (to avoid to crash your Host HD), create a good partition table:
+
* On your APF board (to avoid to crash your Host HD), create a good partition table on MMC (X is the id of the device, for example 1 on [[APF6]]):
 
<pre class="apf">
 
<pre class="apf">
  # /sbin/fdisk /dev/mmcblk0
+
  # /sbin/fdisk /dev/mmcblkX
 +
 
 
  Delete all existing partion with 'd'
 
  Delete all existing partion with 'd'
  Create a primary partion: 'n' then 'p' then '1'
+
  Create a primary partion: 'n' then 'p' then '1' then 2x'ENTER'
 
  Change bootflag to Linux: 't' then '83'
 
  Change bootflag to Linux: 't' then '83'
 
  Save partition table: 'w'
 
  Save partition table: 'w'
 
  (To quit without saving: 'm')
 
  (To quit without saving: 'm')
 
</pre>
 
</pre>
* Then, on your PC, format your MMC with Ext2 filesystem (booting on FAT is bad :-) ):
+
* If your APF has the ''mkfs'' tools, then format your MMC:
 +
<pre class="apf">
 +
# mkfs.ext4 -O ^64bit /dev/mmcblkXp1
 +
</pre>
 +
* Otherwise, on your PC, format your MMC with Ext2 or Ext3/4 filesystems (booting on FAT is bad :-) ):
 
<pre class="host">
 
<pre class="host">
 
  $ sudo mkfs.ext2 /dev/sdX1  (replace X with your MMC reader drive letter, if your Laptop has an integrated
 
  $ sudo mkfs.ext2 /dev/sdX1  (replace X with your MMC reader drive letter, if your Laptop has an integrated
Line 68: Line 64:
 
</pre>
 
</pre>
  
===Put your rootfs on the MMC/SD===
+
===Put your rootfs and Linux kernel on the MMC/SD===
* Buildroot should be configured to generate a tar-ed rootfs '''(now done by default)'''.
+
* Buildroot should be configured by default to generate a tar-ed rootfs, '''if not''' (no *.tar in ''buildroot/output/images/'') then you can activate it with:
[armadeus] $ make menuconfig
+
<pre class="host">
 +
$ make menuconfig
 +
</pre>
 +
 
 
<pre class="config">
 
<pre class="config">
Target filesystem options --->
+
Filesystem images  --->
 +
...
 +
    [*] tar the root filesystem
 +
          Compression method (no compression) --->
 +
    ()    other random options to pass to tar
 +
...
 
</pre>
 
</pre>
[[Image:Menuconfig_tar_rootfs.png]]
+
 
 
<pre class="host">
 
<pre class="host">
[armadeus] $ make
+
$ make
 
</pre>
 
</pre>
* and then uncompress the rootfs to the SD card:
+
* Then you have to uncompress the tar-ed rootfs to the MMC/SD card (mounted as ''/media/mmc'' on your PC in the following instructions).
 +
{{Note | The APF51 (with U-Boot version older than 2013.04) and the APF9328 do not load the kernel from the SD card but use the one in Flash instead. }}
 
<pre class="host">
 
<pre class="host">
$ make shell_env
+
$ make shell_env
$ source armadeus_env.sh
+
$ source armadeus_env.sh
$ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C /media/mmc
+
$ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C /media/mmc
$ sudo umount /media/mmc
+
</pre>
 +
* You can also copy the Linux kernel to the rootfs ''/boot'' folder and dtb files for recent kernel supporting it:
 +
<pre class="host">
 +
$ sudo mkdir -p /media/mmc/boot/dtbs
 +
$ sudo cp $ARMADEUS_BINARIES/$ARMADEUS_BOARD_NAME-linux.bin /media/mmc/boot/
 +
$ sudo cp $ARMADEUS_BINARIES/*.dtb /media/mmc/boot/dtbs/
 +
</pre>
 +
* Then umount your MMC/SD from your PC:
 +
<pre class="host">
 +
$ sudo umount /media/mmc
 
</pre>
 
</pre>
  
Line 107: Line 121:
 
  FAT: codepage cp437 not found
 
  FAT: codepage cp437 not found
 
you have to add the charset to the supported kernel ones:
 
you have to add the charset to the supported kernel ones:
  $ make linux26-menuconfig
+
  $ make linux-menuconfig
 
<pre class="config">
 
<pre class="config">
 
File systems  --->  
 
File systems  --->  
Line 115: Line 129:
 
         <*>  NLS ISO 8859-1  (Latin 1; Western European Languages)
 
         <*>  NLS ISO 8859-1  (Latin 1; Western European Languages)
 
         ...
 
         ...
 +
</pre>
 +
 +
==U-Boot usage==
 +
SD cards can also be used with U-Boot.
 +
The following commands are useful:
 +
* Scan the MMC:
 +
<pre class="apf">
 +
BIOS> mmc rescan
 +
</pre>
 +
* List the MMC content:
 +
<pre class="apf">
 +
BIOS> fatls mmc 0
 +
</pre>
 +
* Load the file xxx.bin in RAM:
 +
<pre class="apf">
 +
BIOS> fatload mmc 0 ${loadaddr} xxx.bin
 
</pre>
 
</pre>
  
Line 120: Line 150:
  
 
* http://en.wikipedia.org/wiki/MultiMedia_Card
 
* http://en.wikipedia.org/wiki/MultiMedia_Card
 
{{LanguageBar|MultiMediaCard|MultiMediaCard|MultiMediaCard}}
 
  
 
[[Category:MassStorage]]
 
[[Category:MassStorage]]

Revision as of 08:31, 3 April 2017

Instructions to use the MultiMediaCard (MMC/SD) on your Armadeus board

Introduction

You can use standard MMC/SD/miniSD/microSD cards with your Armadeus board:

All needed drivers are included in the standard Armadeus Linux image.

Card insertion

You should see something like that on the Linux console:

 # imx-mmc imx-mmc.0: card inserted
 mmc0: host does not support reading read-only switch. assuming write-enable.
 mmc0: new SD card at address 01b0
 mmcblk0: mmc0:01b0 SD512 500224KiB
  mmcblk0: p1

Mounting the MMC/SD from Linux

  • Just mount the MMC like you will do on your PC:
 # mount /dev/mmcblk0p1 /media/mmc             (on all APF *except* APF6)
 # mount /dev/mmcblk1p1 /media/mmc             (on APF6)
  • Then, you can access the MMC's files from the /media/mmc directory. Filesystem should be automagically detected.
  • Of course if you have several partitions on your MMC/SD they will be named p1/p2/p3...
  • If you have problems with vfat code page, include the missing code page into the kernel.

Booting from MMC/SD

When your rootfs is too big to be put on the APF Flash, you can always use a MMC/SD like a Hard Drive and boot from it (this is possible because standard Armadeus kernel is compiled with the MMC driver built in).

Prepare your card

  • On your APF board (to avoid to crash your Host HD), create a good partition table on MMC (X is the id of the device, for example 1 on APF6):
 # /sbin/fdisk /dev/mmcblkX

 Delete all existing partion with 'd'
 Create a primary partion: 'n' then 'p' then '1' then 2x'ENTER'
 Change bootflag to Linux: 't' then '83'
 Save partition table: 'w'
 (To quit without saving: 'm')
  • If your APF has the mkfs tools, then format your MMC:
 # mkfs.ext4 -O ^64bit /dev/mmcblkXp1
  • Otherwise, on your PC, format your MMC with Ext2 or Ext3/4 filesystems (booting on FAT is bad :-) ):
 $ sudo mkfs.ext2 /dev/sdX1   (replace X with your MMC reader drive letter, if your Laptop has an integrated
                                           MMC reader then use mmcblk0p1 instead of sdX1)
  • If not automatically detected/mounted by your distribution, mount your MMC/SD on your Host filesystem (for example in /media/mmc):
 $ sudo mkdir -p /media/mmc
 $ sudo mount /dev/sdX1 /media/mmc    (replace X with your MMC reader drive letter, if your Laptop has an integrated
                                                   MMC reader then use mmcblk0p1 instead of sdX1)

Put your rootfs and Linux kernel on the MMC/SD

  • Buildroot should be configured by default to generate a tar-ed rootfs, if not (no *.tar in buildroot/output/images/) then you can activate it with:
$ make menuconfig
Filesystem images  --->
...
    [*] tar the root filesystem
          Compression method (no compression)  --->
    ()    other random options to pass to tar
...
$ make
  • Then you have to uncompress the tar-ed rootfs to the MMC/SD card (mounted as /media/mmc on your PC in the following instructions).
Note Note: The APF51 (with U-Boot version older than 2013.04) and the APF9328 do not load the kernel from the SD card but use the one in Flash instead.
$ make shell_env
$ source armadeus_env.sh
$ sudo tar xvf $ARMADEUS_ROOTFS_TAR -C /media/mmc
  • You can also copy the Linux kernel to the rootfs /boot folder and dtb files for recent kernel supporting it:
$ sudo mkdir -p /media/mmc/boot/dtbs
$ sudo cp $ARMADEUS_BINARIES/$ARMADEUS_BOARD_NAME-linux.bin /media/mmc/boot/
$ sudo cp $ARMADEUS_BINARIES/*.dtb /media/mmc/boot/dtbs/
  • Then umount your MMC/SD from your PC:
$ sudo umount /media/mmc

Boot

  • Insert the MMC/SD/microSD in the corresponding slot of your Armadeus board and then under U-Boot do:
 BIOS> run mmcboot
  • if you want to automatically boot from SD at each startup, modify the bootcmd U-Boot macro:
 BIOS> setenv bootcmd run mmcboot
 BIOS> saveenv

(default bootcmd when you receive your board is run jffsboot = boot from FLASH)

Performances

Troubleshots

VFAT Code Page

If you encounter this message (or something similar):

Unable to load NLS charset cp437
FAT: codepage cp437 not found

you have to add the charset to the supported kernel ones:

$ make linux-menuconfig
File systems  ---> 
    -*- Native language support  --->
        <*>   Codepage 437 (United States, Canada)
        ...
        <*>   NLS ISO 8859-1  (Latin 1; Western European Languages)
        ...

U-Boot usage

SD cards can also be used with U-Boot. The following commands are useful:

  • Scan the MMC:
BIOS> mmc rescan
  • List the MMC content:
BIOS> fatls mmc 0
  • Load the file xxx.bin in RAM:
BIOS> fatload mmc 0 ${loadaddr} xxx.bin

Links