Boot from SD/MMC
From Manuals
(→Boot from SD/MMC) |
(→Booting from the SD Card) |
||
| Line 109: | Line 109: | ||
eth0:none | eth0:none | ||
Electrum>> printenv bootargs (if you like, just to confirm that you did it right) | Electrum>> printenv bootargs (if you like, just to confirm that you did it right) | ||
| + | Electrum>> saveenv | ||
Electrum>> boot | Electrum>> boot | ||
Revision as of 20:11, 23 June 2010
Contents |
Boot from SD/MMC
The Following Procedure explains how to boot a Kernel Image and Root File system from a SD/MMC card. Thus a NAND flash is no more a mandatory component to have on our Electrum100 boards. Boot from SD/MMC card gives a wide range of options for the user including portability, larger memory etc,. In our test bed, we didn't see a considerable change in the speed of the board, thus speed is not a big concern when booting from SD/MMC given the advantages it provides.
Note: As EXT2 File system is used, there is no Journalism. So its recommended to use standard commands every time you Reboot or Shutdown.
shutdown -h now to Shutdown shutdown -r now to Restart
To boot Kernel and Rootfs from SD/MMC card (Without NAND)
1) Download u-boot-2010.03. (Its recommended that load can be built before going further)
2) Copy board/micromint folder and /include/configs/electrum100.h from u-boot-2009.08.
3) Add the following Configurations to enable MMC support.
#define CONFIG_CMD_EXT2 1 #define CONFIG_CMD_FAT 1 #define CONFIG_MMC 1 #define CONFIG_GENERIC_MMC 1 #define CONFIG_CMD_MMC 1 #define CONFIG_GENERIC_ATMEL_MCI 1 #define MMCI_BASE 0xFFFA8000
4) Then create an init routine in your platform code:
/* this is a weak define that we are overriding */
#ifdef CONFIG_GENERIC_ATMEL_MCI
int board_mmc_init(bd_t *bd)
{
at91_mci0_hw_init((1 << 0) || (1 << 1));
/* This calls the atmel_mmc_init in gen_atmel_mci.c */
return atmel_mmc_init(bd);
}
#endif
5) Change line 86 of uboot*/cpu/arm926ejs/at91/at91sam9260_devices.c to
#if defined(CONFIG_ATMEL_MCI) || defined(CONFIG_GENERIC_ATMEL_MCI)
6) Apply the following patch: http://www.mail-archive.com/u-boot@lists.denx.de/msg31713.html
7) Build the u-boot-2010.03
$make bootloader
8) Update the Boot strapper and Boot-loader into Electrum100 using SAM-BA application
9) Execute the command:
Electrum>> mmc list Electrum>> mmc rescan 0
10) Now copy the Kernel Image and rootfs into SD card (Refer the section: Creating a Bootable filesystem on SD card).
11) Check the card using "mmc rescan 0" command
12) change the boot args to load root file system from SD card.
bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rw ip=192.168.1.231:192.168.1.249::255.255.255.0::eth0:none
13) To load the Kernel from EXT2 change the boot commands
Electrum>> setenv bootcmd mmcinfo\; ext2load mmc 0:1 0x22000000 uImage-2.6.31.9\; bootm Electrum>> saveenv Electrum>> reset
Creating a Bootable Filesystem on SD card
1) The first step is to make a bootable file system on the SD card. Insert the card into the slot of a running plug. Enter the following commands:
>fdisk /dev/mmcblk0 press "o" / create a new partition table press "n" / create a new partition press "p" / it's a primary partition press "1" / partition #1 press enter / default first cylinder press enter / default last cylinder press "a" / set the boot flag press "1" / ... for partition #1 press "w" / save changes >mkfs -t ext2 /dev/mmcblk0p1 >mkdir /mnt/sdcard >mount /dev/mmcblk0p1 /mnt/sdcard >df
2) Now copy your existing nand file system onto the sd card. This may take 5-10 minutes.
root#: cp -r /rootfs/* /mnt/sdcard
3) The SD card should now mirror your internal nand flash, which you can confirm with df -h, etc.
Filesystem 1K-blocks Used Available Use% Mounted on rootfs 519168 185612 333556 36% / tmpfs 257816 0 257816 0% /lib/init/rw varrun 257816 260 257556 1% /var/run varlock 257816 0 257816 0% /var/lock udev 257816 12 257804 1% /dev tmpfs 257816 0 257816 0% /dev/shm tmpfs 257816 21824 235992 9% /var/cache/apt /dev/mmcblk0p1 7707056 516216 6799340 8% /mnt/sdcard
your SD card now has a bootable system. The next step is to boot it.
Booting from the SD Card
You need to interact with u-boot now. You must do this from a program talking to the usb-serial port, not from an ssh shell (duh).
>shutdown -r now
When u-boot appears, stop it by typing ENTER a few times, to stop it from booting automatically.
Electrum>> printenv bootargs bootargs console=ttyS0,115200 root=/dev/nfs rw ip=192.168.1.231:192.168.1.249::255.255.255.0:: eth0: nfsroot=192.168.1.249:/media/disk/rootfs
This is the line that you'll need to change. Change it to
Electrum>> setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p1 rw ip=192.168.1.231:192.168.1.249::255.255.255.0:: eth0:none Electrum>> printenv bootargs (if you like, just to confirm that you did it right) Electrum>> saveenv Electrum>> boot
