Steps below are a guideline for booting the Android OS on the Micro2440 SDK with 256M.
Step 1 – Downloading an Android Kernel
Step 2 – Setting Up the ARM Toolchain
If you haven’t set up the ARM Toolchain, follow the guideline in this link.
Step 3 – Partition the SD Card
Refer to How to Partition an SD Card for the steps.
Step 4 – Mount the SD Card
My SD card is mounted using the following names:
/dev/sdb2 –> /media/boot
/dev/sdb3 –> /media/rootfs
The name of boot and rootfs were given during the partition step. It’s up to you to give any names.
Step 5 – Compiling Kernel Image
|/android/kernel> cp config_mini2440 .config|
Run the menuconfig, but don’t change anything. Just exit from the menuconfig.
|/android/kernel> make ARCH=arm menuconfig|
Start to compile the Kernel image.
|/android/kernel> make ARCH=arm uImage|
Step 6 – Copy the Kernel uImage and Filesystem to the SD Card
The resulted uImage can be found in arch/arm/boot directory.
|/android/kernel/arch/arm/boot> cp uImage /media/boot/.|
Then, copy the contents of fs directory to /media/rootfs. We need to do this first before installing the kernel modules to the filesystem.
|/android/fs> cp * /media/rootfs/.|
Step 7 – Create Kernel Modules
|/android/kernel> make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules|
If you jump directly to modules_install without compiling modules first, you will get an error saying modules.order cannot be found.
|/android/kernel> make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install|
Step 8 – Setting Up the Minicom
If we don’t have the Minicom available in our Linux system, then we need to install it first.
|> sudo apt-get install minicom|
Once it’s installed, we can invoke it from the shell prompt.
|> minicom -s|
Select “Serial Port Setup”. Enter the following information:
Serial Device: /dev/ttyS0
Bps/Par/Bits: 115200 8N1
Hardware Flow Control: No
Software Flow Control: No
Then select “Exit” and press Enter. Don’t select “Exit from Minicom”, otherwise you are out of minicom.
Step 9 – Downloading UBoot to NAND
Tell vivi that you need 242360 bytes space in the RAM to load something from the USB, starting at 0×31000000. Few examples on the internet ask you to load images to the RAM location 0×32000000. It works fine for small image. For larger image, you must go to a lower address space, such as 0×31000000.
|Supervivi> load ram 0×31000000 242360 u|
On another shell window, use following command to download u-boot into the RAM of Micro2440.
|Supervivi> sudo ./s3c2410_boot_usb UBoot-256MB.bin|
The process of downloading the u-boot to the RAM is shown in Figure .
Now we are ready to write u-boot from the RAM to NAND flash. It involves a few steps.
First, we need the execute the u-boot in the RAM, instead of Supervivi in the NOR.
|Supervivi> go 0×31000000|
When seeing “Hit any key to stop autoboot,” press any key on the keyboard. The prompt shall change from
Next, we need to get the information about the NAND flash.
|MINI2440 # nand info|
Erase everything on the NAND flash.
|MINI2440 # nand scrub|
Now create a new partition table.
|MINI2440 # nand createbbt|
The previous command will create 4 partitions: u-boot, env, kernel and root. You can check the partition list by executing the following command.
|MINI2440 # mtdparts|
Once we have the NAND flash is ready to be written, now we can start transferring the u-boot from the RAM to the u-boot partition in the NAND.
|MINI2440 # nand write 0×31000000 u-boot|
This step can be viewed as
Now we’re going to boot from the NAND. Move the switch to NAND position and reboot Micro2440. Now you shall see all u-boot informations on the minicom window. Hit any key when you see the promption “Hit any key to stop autoboot.“
Step 10 – Set the Boot Environment
This step will copy the kernel from the SD card partition 2 (mmcblk0p2) to the RAM address 0×31000000 and run the booting process from the RAM.
|MINI2440 # setenv bootcmd mmcinit \; ext2load mmc 0:2 0×31000000 uImage \; bootm 0×31000000|
We also need to inform the u-boot where the rootfs location is and other configurations.
|MINI2440 # setenv bootargs root=/dev/mmcblk0p3 rootfstype=ext3 mini2440=1tb rootdelay=3 init=/linuxrc|
The description of the bootargs parameters can be seen in this Table.
|bootargs||mini2440 =||Type of display|
|0 = 3.5 “display N35|
|1 = 7 “Display|
|2 = VGA Board|
|3 = 3.5-inch screen T35|
|4 = 5.6 “display Innolux|
|t = Touchscreen|
|b = Back Light|
|bootargs||rootfstype =||File system with rootfs|
|bootargs||root =||Description / Drive the rootfs (eg / dev/sda1)|
|bootargs||rw||Mount parameters rw = Read / Write, RO = Read Only|
|bootargs||rootwait||Waiting for the file system before the boot process continues|
|bootargs||init =||Starts the specified program completed after the start of the kernel is.|
Now save the environment.
|MINI2440 # saveenv|
Then, reboot the system.
|MINI2440 # reset|
You should see the Android OS as shown in the Figure below.