Firefly Open Source Community

Title: Dual boot on Firefly-RK3288 [Print This Page]

Author: Andy    Time: 1/10/2015 14:02
Title: Dual boot on Firefly-RK3288

Brief introduction

As we all know the Firefly-RK3288 supported by Ubuntu and Android. So it¡¯s excellent to realize the dual boot on Firefly.

Now let¡¯s take a look at the dual boot on Firefly-RK3288.


Recovery mode

There is a recovery mode on Android. It runs independent image including the kernel and initramfs in recovery partitionThis partition is the best place for Linux.


Partition

Let¡¯s take a look at the partition on Android. You can get the information by CMDLINE in parameter file.

  1. FIRMWARE_VER:4.4.2
  2. MACHINE_MODEL:rk30sdk
  3. MACHINE_ID:007
  4. MANUFACTURER:RK30SDK
  5. MAGIC: 0x5041524B
  6. ATAG: 0x60000800
  7. MACHINE: 3066
  8. CHECK_MASK: 0x80
  9. PWR_HLD: 0,0,A,0,1
  10. #KERNEL_IMG: 0x62008000
  11. #FDT_NAME: rk-kernel.dtb
  12. #RECOVER_KEY: 1,1,0,20,0
  13. CMDLINE:console=ttyFIQ0 androidboot.hardware=rk30board androidboot.console=ttyFIQ0 board.ap_has_alsa=0 init=/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00180000@0x00092000(system),0x00002000@0x00212000(metadata),0x00200000@0x00214000(userdata),0x00020000@0x00414000(radical_update),-@0x00434000(user)
Copy the code

The CMDLINE will be sent to kernel. The ¡°mtdparts¡± indicates the partition, the format shows as the follow.

  1. 0x00002000@0x00002000(uboot)
  2.   Size                offset        partition name
  3. The unit is 512 bytes (i.e. traditional disk sector size).
Copy the code

The partition information above turn into a table shows as below

Size£¨Byte£©

Partition name

4M

uboot

4M

misc

16M

resource

16M

kernel

32M

boot

32M

recovery

52M

backup

128M

cache

4M

kpanic

768M

system

4M

metadata

1G

userdata

64M

radical_update

Full size-2152M

user


In order to boot Linux from Android, we need to add a ¡°linuxroot¡± partition to store root file system of Linux. We choose to replace the radical_update partition and give 3G for this partition so as to be compatible.

1G

userdata

3136M

linuxroot

Full size-5224M

user



Modify the parameter file and set the CMDLINE as below.

  1. CMDLINE:console=ttyFIQ0 androidboot.hardware=rk30board androidboot.console=ttyFIQ0 board.ap_has_alsa=0 root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00180000@0x00092000(system),0x00002000@0x00212000(metadata),0x00200000@0x00214000(userdata),0x00620000@0x00414000(linuxroot),-@0x00a34000(user)
Copy the code

How to boot Linux.

Then, we will talk about how to boot Linux. Due to the Linux is stored in recovery disk, so boot Linux equal to enter the recovery mode. Here are some ways to get to this point.

1. Unplug USB cable, press the revocery key on Firefly and turn on it.(no mater first power on, reboot or press the reset key). This way is temporary switch. If you don¡¯t press the recovery key next time will not reach to the recovery mode(boot Linux).

2. Restore the factory setting in the Android setting. Actrually, restore factory setting function has been remove from Android. If hasn¡¯t been remove, this may help you boot Linux.

3. Firelfy-RK3288 add an switch system option at the shutdown menu(click the shutdown button at the bottom of the screen) for Android.

4. Flash the rkst/Image/misc.img of SDK to misc partition.


Step 2 to 4 are switch to recovery mode through write misc partition. This is a way to boot Linux for Android.

You can check the content of misc.img using hexdump command.

  1. $ hexdump -C rkst/Image/misc.img
  2. 00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
  3. *
  4. 00004000  62 6f 6f 74 2d 72 65 63  6f 76 65 72 79 00 00 00  |boot-recovery...|
  5. 00004010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
  6. *
  7. 00004040  72 65 63 6f 76 65 72 79  0a 2d 2d 77 69 70 65 5f  |recovery.--wipe_|
  8. 00004050  61 6c 6c 00 00 00 00 00  00 00 00 00 00 00 00 00  |all.............|
  9. 00004060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
  10. *
  11. 0000c000
Copy the code

From the massage above, you can see the first 16K(0x4000)Byte are 0, and are followed by a ¡°boot-recovery¡±, ¡°recovery¡±and ¡°--wipe_all¡± command.

Boot bootloader(means  u-boot) will read the content from this partition. If boot the ¡°boot-recovery¡±,that will load the recovery partition.


First boot
Although remove the restore factory setting function from Android, the initial setting still necessary.
We add a symbol file ¡°/firstboot¡±to Linux root file system. Once detect this file is exist while boot the Linux,the system will take this boot as the first boot and will do the follow initial setting.

See ¡°etc/rc.local¡±for More realization details.

  1. /usr/local/bin/mtd-by-name.sh

  2. if [ -e /firstboot ]; then
  3.     echo "======Expanding the rootfs..."
  4.     resize2fs /dev/block/mtd/by-name/linuxroot
  5.     if [ -e /dev/block/mtd/by-name/userdata ]; then
  6.         echo "=======Formatting userdata(/data)..."
  7.         mkfs.ext4 /dev/block/mtd/by-name/userdata

  8.         echo "=======Formatting metadata(/metadata)..."
  9.         mkfs.ext4 /dev/block/mtd/by-name/metadata

  10.         echo "=======Formatting cache(/cache)..."
  11.         mkfs.ext4 /dev/block/mtd/by-name/cache

  12.         echo "=======Formatting user(/sdcard)..."
  13.         mkfs.vfat /dev/block/mtd/by-name/user

  14.         # reboot to android
  15.         dd if=/dev/zero of=/dev/block/mtd/by-name/misc bs=16k count=3
  16.         rm -f /firstboot
  17.         sync
  18.         reboot
  19.     fi
  20.     rm -f /firstboot
  21. fi
Copy the code

How to switch Linux from Android
Write a script to format the misc partition and reboot. Then you can switch back to Linux.

  1. sudo dd if=/dev/zero of=/dev/block/mtd/by-name/misc bs=16k count=3
  2. sudo reboot
Copy the code
The script is /usr/local/bin/b2android.sh.


Author: zeno    Time: 1/10/2015 16:59

Yeah!!!?

This is a great 3ad!!! Thanks a lot for these details. I think that now I can grab some info about how to manage the parameter file!! And this is what i was searching for!!

Thanks a lot Andy!






Author: cappybob    Time: 1/16/2015 01:57
Andy, again you have answered many of my questions, other than the "dual Boot".  Thanks for the tutorial on the parameter.




Welcome Firefly Open Source Community (https://bbs.t-firefly.com/) Powered by Discuz! X3.1