1*4882a593SmuzhiyunU-Boot for the Gateworks Ventana Product Family boards 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunThis file contains information for the port of U-Boot to the Gateworks 4*4882a593SmuzhiyunVentana Product family boards. 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunThe entire Ventana product family (http://www.gateworks.com/product#ventana) 7*4882a593Smuzhiyunis supported by a single bootloader build by using a common SPL and U-Boot 8*4882a593Smuzhiyunthat dynamically determines the characterstics of the board at runtime via 9*4882a593Smuzhiyuninformation from an EEPROM on the board programmed at the factory and supports 10*4882a593Smuzhiyunall of the various boot mediums available. 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun1. Secondary Program Loader (SPL) 13*4882a593Smuzhiyun--------------------------------- 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunThe i.MX6 has a BOOT ROM PPL (Primary Program Loader) which supports loading 16*4882a593Smuzhiyunan executable image from various boot devices. 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunThe Gateworks Ventana board config uses an SPL build configuration. This 19*4882a593Smuzhiyunwill build the following artifacts from U-Boot source: 20*4882a593Smuzhiyun - SPL - Secondary Program Loader that the i.MX6 BOOT ROM (Primary Program 21*4882a593Smuzhiyun Loader) boots. This detects CPU/DRAM configuration, configures 22*4882a593Smuzhiyun The DRAM controller, loads u-boot.img from the detected boot device, 23*4882a593Smuzhiyun and jumps to it. As this is booted from the PPL, it has an IVT/DCD 24*4882a593Smuzhiyun table. 25*4882a593Smuzhiyun - u-boot.img - The main U-Boot core which is u-boot.bin with a image header. 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun2. Build 29*4882a593Smuzhiyun-------- 30*4882a593Smuzhiyun 31*4882a593SmuzhiyunTo build U-Boot for the Gateworks Ventana product family: 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunFor NAND FLASH based boards: 34*4882a593Smuzhiyun make gwventana_nand_config 35*4882a593Smuzhiyun make 36*4882a593Smuzhiyun 37*4882a593SmuzhiyunFor EMMC FLASH based boards: 38*4882a593Smuzhiyun make gwventana_emmc_config 39*4882a593Smuzhiyun make 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun3. Boot source: 43*4882a593Smuzhiyun--------------- 44*4882a593Smuzhiyun 45*4882a593SmuzhiyunThe Gateworks Ventana boards support booting from NAND or micro-SD depending 46*4882a593Smuzhiyunon the board model. The IMX6 BOOT ROM will choose a boot media based on eFUSE 47*4882a593Smuzhiyunsettings programmed at the factory. 48*4882a593Smuzhiyun 49*4882a593SmuzhiyunBoards with NAND flash will always boot from NAND, and NAND-less boards will 50*4882a593Smuzhiyunalways boot from micro-SD. However, it is possible to use the U-Boot bmode 51*4882a593Smuzhiyuncommand (or the technique it uses) to essentially bootstrap to another boot 52*4882a593Smuzhiyunmedia at runtime. 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun3.1. boot from NAND 55*4882a593Smuzhiyun------------------- 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunThe i.MX6 BOOT ROM expects some structures that provide details of NAND layout 58*4882a593Smuzhiyunand bad block information (referred to as 'bootstreams') which are replicated 59*4882a593Smuzhiyunmultiple times in NAND. The number of replications and their spacing (referred 60*4882a593Smuzhiyunto as search stride) is configurable through board strapping options and/or 61*4882a593SmuzhiyuneFUSE settings (BOOT_SEARCH_COUNT / Pages in block from BOOT_CFG2). In 62*4882a593Smuzhiyunaddition, the i.MX6 BOOT ROM Flash Configuration Block (FCB) supports two 63*4882a593Smuzhiyuncopies of a bootloader in flash in the case that a bad block has corrupted one. 64*4882a593SmuzhiyunThe Freescale 'kobs-ng' application from the Freescale LTIB BSP, which runs 65*4882a593Smuzhiyununder Linux and operates on an MTD partition, must be used to program the 66*4882a593Smuzhiyunbootstream in order to setup this flash structure correctly. 67*4882a593Smuzhiyun 68*4882a593SmuzhiyunThe Gateworks Ventana boards with NAND flash have been factory programmed 69*4882a593Smuzhiyunsuch that their eFUSE settings expect 2 copies of the boostream (this is 70*4882a593Smuzhiyunspecified by providing kobs-ng with the --search_exponent=1 argument). Once in 71*4882a593SmuzhiyunLinux with MTD support for the NAND on /dev/mtd0 you can program the SPL 72*4882a593Smuzhiyunwith: 73*4882a593Smuzhiyun 74*4882a593Smuzhiyunkobs-ng init -v -x --search_exponent=1 SPL 75*4882a593Smuzhiyun 76*4882a593SmuzhiyunThe kobs-ng application uses an imximage which contains the Image Vector Table 77*4882a593Smuzhiyun(IVT) and Device Configuration Data (DCD) structures that the i.MX6 BOOT ROM 78*4882a593Smuzhiyunrequires to boot. The kobs-ng adds the Firmware Configuration Block (FCB) and 79*4882a593SmuzhiyunDiscovered Bad Block Table (DBBT). The SPL build artifact from U-Boot is 80*4882a593Smuzhiyunan imximage. 81*4882a593Smuzhiyun 82*4882a593SmuzhiyunThe u-boot.img, which is the non SPL U-Boot binary appended to a U-Boot image 83*4882a593Smuzhiyunheader must be programmed in the NAND flash boot device at an offset hard 84*4882a593Smuzhiyuncoded in the SPL. For the Ventana boards, this has been chosen to be 14MB. 85*4882a593SmuzhiyunThe image can be programmed from either U-Boot or Linux: 86*4882a593Smuzhiyun 87*4882a593SmuzhiyunU-Boot: 88*4882a593SmuzhiyunVentana > setenv mtdparts mtdparts=nand:14m(spl),2m(uboot),1m(env),-(rootfs) 89*4882a593SmuzhiyunVentana > tftp ${loadaddr} u-boot.img && nand erase.part uboot && \ 90*4882a593Smuzhiyun nand write ${loadaddr} uboot ${filesize} 91*4882a593Smuzhiyun 92*4882a593SmuzhiyunLinux: 93*4882a593Smuzhiyunnandwrite /dev/mtd1 u-boot.img 94*4882a593Smuzhiyun 95*4882a593SmuzhiyunThe above assumes the default Ventana partitioning scheme which is configured 96*4882a593Smuzhiyunvia the mtdparts env var: 97*4882a593Smuzhiyun - spl: 14MB 98*4882a593Smuzhiyun - uboot: 2M 99*4882a593Smuzhiyun - env: 1M 100*4882a593Smuzhiyun - rootfs: the rest 101*4882a593Smuzhiyun 102*4882a593SmuzhiyunThis information is taken from: 103*4882a593Smuzhiyun http://trac.gateworks.com/wiki/ventana/bootloader#nand 104*4882a593Smuzhiyun 105*4882a593SmuzhiyunMore details about the i.MX6 BOOT ROM can be found in the IMX6 reference manual. 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun3.1. boot from MMC (eMMC/microSD) 108*4882a593Smuzhiyun--------------------------------- 109*4882a593Smuzhiyun 110*4882a593SmuzhiyunWhen the IMX6 eFUSE settings have been factory programmed to boot from 111*4882a593SmuzhiyunMMC the SPL will be loaded from offset 0x400 (1KB). Once the SPL is 112*4882a593Smuzhiyunbooted, it will load and execute U-Boot (u-boot.img) from offset 69KB 113*4882a593Smuzhiyunon the micro-SD (defined by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR). 114*4882a593Smuzhiyun 115*4882a593SmuzhiyunWhile it is technically possible to enable the SPL to be able to load 116*4882a593SmuzhiyunU-Boot from a file on a FAT/EXT filesystem on the micro-SD, we chose to 117*4882a593Smuzhiyunuse raw micro-SD access to keep the code-size and boot time of the SPL down. 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunFor these reasons an MMC device that will be used as an IMX6 primary boot 120*4882a593Smuzhiyundevice must be carefully partitioned and prepared. 121*4882a593Smuzhiyun 122*4882a593SmuzhiyunThe following shell commands are executed on a Linux host (adjust DEV to the 123*4882a593Smuzhiyunblock storage device of your MMC, ie /dev/mmcblk0): 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun DEV=/dev/sdc 126*4882a593Smuzhiyun # zero out 1MB of device 127*4882a593Smuzhiyun sudo dd if=/dev/zero of=$DEV count=1 bs=1M oflag=sync status=none && sync 128*4882a593Smuzhiyun # copy SPL to 1KB offset 129*4882a593Smuzhiyun sudo dd if=SPL of=$DEV bs=1K seek=1 oflag=sync status=none && sync 130*4882a593Smuzhiyun # copy U-Boot to 69KB offset 131*4882a593Smuzhiyun sudo dd if=u-boot.img of=$DEV bs=1K seek=69 oflag=sync status=none && sync 132*4882a593Smuzhiyun # create a partition table with a single rootfs partition starting at 1MB 133*4882a593Smuzhiyun printf "1,,L\n" | sudo sfdisk --in-order --no-reread -L -uM $DEV && sync 134*4882a593Smuzhiyun # format partition 135*4882a593Smuzhiyun sudo mkfs.ext4 -L root ${DEV}1 136*4882a593Smuzhiyun # mount the partition 137*4882a593Smuzhiyun sudo udisks --mount ${DEV}1 138*4882a593Smuzhiyun # extract filesystem 139*4882a593Smuzhiyun sudo tar xvf rootfs.tar.gz -C /media/root 140*4882a593Smuzhiyun # flush and unmount 141*4882a593Smuzhiyun sync && sudo umount /media/root 142*4882a593Smuzhiyun 143*4882a593SmuzhiyunThe above assumes the default Ventana micro-SD partitioning scheme 144*4882a593Smuzhiyun - spl : 1KB-69KB (68KB) required by IMX6 BOOT ROM 145*4882a593Smuzhiyun - uboot : 69KB-709KB (640KB) defined by 146*4882a593Smuzhiyun CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 147*4882a593Smuzhiyun - env : 709KB-965KB (256KB) defined by 148*4882a593Smuzhiyun CONFIG_ENV_MMC_SIZE 149*4882a593Smuzhiyun CONFIG_ENV_MMC_OFFSET_REDUND 150*4882a593Smuzhiyun - rootfs : 1MB- 151*4882a593Smuzhiyun 152*4882a593SmuzhiyunThis information is taken from: 153*4882a593Smuzhiyun http://trac.gateworks.com/wiki/ventana/bootloader#microsd 154*4882a593Smuzhiyun 155*4882a593SmuzhiyunMore details about the i.MX6 BOOT ROM can be found in the IMX6 reference manual. 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun4. Falcon Mode 158*4882a593Smuzhiyun------------------------------ 159*4882a593Smuzhiyun 160*4882a593SmuzhiyunThe Gateworks Ventana board config enables Falcon mode (CONFIG_SPL_OS_BOOT) 161*4882a593Smuzhiyunwhich allows the SPL to boot directly to an OS instead of to U-Boot 162*4882a593Smuzhiyun(u-boot.img) thus acheiving a faster overall boot time. The time savings 163*4882a593Smuzhiyundepends on your boot medium (ie NAND Flash vs micro-SD) and size/storage 164*4882a593Smuzhiyunof the OS. The time savings can be anywhere from 2 seconds (256MB NAND Flash 165*4882a593Smuzhiyunwith ~1MB kernel) to 6 seconds or more (2GB NAND Flash with ~6 kernel) 166*4882a593Smuzhiyun 167*4882a593SmuzhiyunThe Gateworks Ventana board supports Falcon mode for the following boot 168*4882a593Smuzhiyunmedium: 169*4882a593Smuzhiyun - NAND flash 170*4882a593Smuzhiyun - micro-SD 171*4882a593Smuzhiyun 172*4882a593SmuzhiyunFor all boot mediums, raw mode is used. While support of more complex storage 173*4882a593Smuzhiyunsuch as files on top of FAT/EXT filesystem is possible but not practical 174*4882a593Smuzhiyunas the size of the SPL is fairly limitted (to 64KB based on the smallest 175*4882a593Smuzhiyunsize of available IMX6 iRAM) as well as the fact that this would increase 176*4882a593SmuzhiyunOS load time which defeats the purpose of Falcon mode in the first place. 177*4882a593Smuzhiyun 178*4882a593SmuzhiyunThe SPL decides to boot either U-Boot (u-boot.img) or the OS (args + kernel) 179*4882a593Smuzhiyunbased on the return value of the spl_start_uboot() function. While often 180*4882a593Smuzhiyunthis can simply be the state of a GPIO based pushbutton or DIP switch, for 181*4882a593SmuzhiyunGateworks Ventana, we use an EEPROM register on i2c-0 at 0x50:0x00: 182*4882a593Smuzhiyunset to '0' will choose to boot to U-Boot and otherwise it will boot to OS. 183*4882a593Smuzhiyun 184*4882a593SmuzhiyunTo use Falcon mode it is required that you first 'prepare' the 'args' data 185*4882a593Smuzhiyunthat is stored on your boot medium along with the kernel (which can be any 186*4882a593SmuzhiyunOS or bare-metal application). In the case of the Linux kernel the 'args' 187*4882a593Smuzhiyunis the flatenned device-tree which normally gets altered prior to booting linux 188*4882a593Smuzhiyunby U-Boot's 'bootm' command. To achieve this for SPL we use the 189*4882a593Smuzhiyun'spl export fdt' command in U-Boot after loading the kernel and dtb which 190*4882a593Smuzhiyunwill go through the same process of modifying the device-tree for the board 191*4882a593Smuzhiyunbeing executed on but not jump to the kernel. This allows you to save the 192*4882a593Smuzhiyunargs data to the location the SPL expects it and then enable Falcon mode. 193*4882a593Smuzhiyun 194*4882a593SmuzhiyunIt is important to realize that there are certain values in the dtb that 195*4882a593Smuzhiyunare board model specific (IMX6Q vs IMX6DL for example) and board specific 196*4882a593Smuzhiyun(board serial number, MAC addrs) so you do not want to use the 'args' 197*4882a593Smuzhiyundata prepared from one board on another board. 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun4.1. Falcon Mode on NAND flash 200*4882a593Smuzhiyun------------------------------ 201*4882a593SmuzhiyunTo prepare a Gateworks Ventana board that boots from NAND flash for Falcon 202*4882a593Smuzhiyunmode you must program your flash such that the 'args' and 'kernel' are 203*4882a593Smuzhiyunlocated where defined at compile time by the following: 204*4882a593Smuzhiyun CONFIG_CMD_SPL_NAND_OFS 17MB - offset of 'args' 205*4882a593Smuzhiyun CONFIG_SYS_NAND_SPL_KERNEL_OFFS 18MB - offset of 'kernel' 206*4882a593Smuzhiyun 207*4882a593SmuzhiyunThe location offsets defined above are defaults chosen by Gateworks and are 208*4882a593Smuzhiyunflexible if you want to re-define them. 209*4882a593Smuzhiyun 210*4882a593SmuzhiyunThe following steps executed in U-Boot will configure Falcon mode for NAND 211*4882a593Smuzhiyunusing rootfs (ubi), kernel (uImage), and dtb from the network: 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun # change mtd partitions to the above mapping 214*4882a593Smuzhiyun Ventana > setenv mtdparts 'mtdparts=nand:14m(spl),2m(uboot),1m(env),1m(args),10m(kernel),-(rootfs)' 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun # flash rootfs (at 28MB) 217*4882a593Smuzhiyun Ventana > tftp ${loadaddr} rootfs_${flash_layout}.ubi && \ 218*4882a593Smuzhiyun nand erase.part rootfs && nand write ${loadaddr} rootfs ${filesize} 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun # load the device-tree 221*4882a593Smuzhiyun Ventana > tftp ${fdt_addr} ventana/${fdt_file2} 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun # load the kernel 224*4882a593Smuzhiyun Ventana > tftp ${loadaddr} ventana/uImage 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun # flash kernel (at 18MB) 227*4882a593Smuzhiyun Ventana > nand erase.part kernel && nand write ${loadaddr} kernel ${filesize} 228*4882a593Smuzhiyun 229*4882a593Smuzhiyun # set kernel args for the console and rootfs (used by spl export) 230*4882a593Smuzhiyun Ventana > setenv bootargs 'console=ttymxc1,115200 root=ubi0:rootfs ubi.mtd=5 rootfstype=ubifs quiet' 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun # create args based on env, board, EEPROM, and dtb 233*4882a593Smuzhiyun Ventana > spl export fdt ${loadaddr} - ${fdt_addr} 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun # flash args (at 17MB) 236*4882a593Smuzhiyun Ventana > nand erase.part args && nand write 18000000 args 100000 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun # set i2c register 0x50:0x00=0 to boot to Linux 239*4882a593Smuzhiyun Ventana > i2c dev 0 && i2c mw 0x50 0x00.0 0 1 240*4882a593Smuzhiyun 241*4882a593SmuzhiyunBe sure to adjust 'bootargs' above to your OS needs (this will be different 242*4882a593Smuzhiyunfor various distros such as OpenWrt, Yocto, Android, etc). You can use the 243*4882a593Smuzhiyunvalue obtained from 'cat /proc/cmdline' when booted to Linux. 244*4882a593Smuzhiyun 245*4882a593SmuzhiyunThis information is taken from: 246*4882a593Smuzhiyun http://trac.gateworks.com/wiki/ventana/bootloader/falcon-mode#nand 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun4.2. Falcon Mode on micro-SD card 250*4882a593Smuzhiyun--------------------------------- 251*4882a593Smuzhiyun 252*4882a593SmuzhiyunTo prepare a Gateworks Ventana board with a primary boot device of micro-SD 253*4882a593Smuzhiyunyou first need to make sure you build U-Boot with CONFIG_ENV_IS_IN_MMC 254*4882a593Smuzhiyuninstead of CONFIG_ENV_IS_IN_NAND. 255*4882a593Smuzhiyun 256*4882a593SmuzhiyunFor micro-SD based Falcon mode you must program your micro-SD such that 257*4882a593Smuzhiyunthe 'args' and 'kernel' are located where defined at compile time 258*4882a593Smuzhiyunby the following: 259*4882a593Smuzhiyun CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR 0x800 (1MB) - offset of 'args' 260*4882a593Smuzhiyun CONFIG_SYS_MMCSD_RAW_MODE_KERNEL_SECTOR 0x1000 (2MB) - offset of 'kernel' 261*4882a593Smuzhiyun 262*4882a593SmuzhiyunThe location offsets defined above are defaults chosen by Gateworks and are 263*4882a593Smuzhiyunflexible if you want to re-define them. 264*4882a593Smuzhiyun 265*4882a593SmuzhiyunFirst you must prepare a micro-SD such that the SPL can be loaded by the 266*4882a593SmuzhiyunIMX6 BOOT ROM (fixed offset of 1KB), and U-Boot can be loaded by the SPL 267*4882a593Smuzhiyun(fixed offset of 69KB defined by CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR). 268*4882a593Smuzhiyun 269*4882a593SmuzhiyunThe following shell commands are executed on a Linux host (adjust DEV to the 270*4882a593Smuzhiyunblock storage device of your micro-SD): 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun DEV=/dev/sdc 273*4882a593Smuzhiyun # zero out 1MB of device 274*4882a593Smuzhiyun sudo dd if=/dev/zero of=$DEV count=1 bs=1M oflag=sync status=none && sync 275*4882a593Smuzhiyun # copy SPL to 1KB offset 276*4882a593Smuzhiyun sudo dd if=SPL of=$DEV bs=1K seek=1 oflag=sync status=none && sync 277*4882a593Smuzhiyun # copy U-Boot to 69KB offset 278*4882a593Smuzhiyun sudo dd if=u-boot.img of=$DEV bs=1K seek=69 oflag=sync status=none && sync 279*4882a593Smuzhiyun # create a partition table with a single rootfs partition starting at 10MB 280*4882a593Smuzhiyun printf "10,,L\n" | sudo sfdisk --in-order --no-reread -L -uM $DEV && sync 281*4882a593Smuzhiyun # format partition 282*4882a593Smuzhiyun sudo mkfs.ext4 -L root ${DEV}1 283*4882a593Smuzhiyun # mount the partition 284*4882a593Smuzhiyun sudo udisks --mount ${DEV}1 285*4882a593Smuzhiyun # extract filesystem 286*4882a593Smuzhiyun sudo tar xvf rootfs.tar.gz -C /media/root 287*4882a593Smuzhiyun # flush and unmount 288*4882a593Smuzhiyun sync && sudo umount /media/root 289*4882a593Smuzhiyun 290*4882a593SmuzhiyunNow that your micro-SD partitioning has been adjusted to leave room for the 291*4882a593Smuzhiyunraw 'args' and 'kernel' data boot the board with the prepared micro-SD, break 292*4882a593Smuzhiyunout in U-Boot and use the following to enable Falcon mode: 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun # load device-tree from rootfs 295*4882a593Smuzhiyun Ventana > ext2load mmc 0:1 ${fdt_addr} boot/${fdt_file2} 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun # load kernel from rootfs 298*4882a593Smuzhiyun Ventana > ext2load mmc 0:1 ${loadaddr} boot/uImage 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun # write kernel at 2MB offset 301*4882a593Smuzhiyun Ventana > mmc write ${loadaddr} 0x1000 0x4000 302*4882a593Smuzhiyun 303*4882a593Smuzhiyun # setup kernel bootargs 304*4882a593Smuzhiyun Ventana > setenv bootargs 'console=ttymxc1,115200 root=/dev/mmcblk0p1 rootfstype=ext4 rootwait rw' 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun # prepare args 307*4882a593Smuzhiyun Ventana > spl export fdt ${loadaddr} - ${fdt_addr} 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun # write args 1MB data (0x800 sectors) to 1MB offset (0x800 sectors) 310*4882a593Smuzhiyun Ventana > mmc write 18000000 0x800 0x800 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun # set i2c register 0x50:0x00=0 to boot to Linux 313*4882a593Smuzhiyun Ventana > i2c dev 0 && i2c mw 0x50 0x00.0 0 1 314*4882a593Smuzhiyun 315*4882a593SmuzhiyunBe sure to adjust 'bootargs' above to your OS needs (this will be different 316*4882a593Smuzhiyunfor various distros such as OpenWrt, Yocto, Android, etc). You can use the 317*4882a593Smuzhiyunvalue obtained from 'cat /proc/cmdline' when booted to Linux. 318*4882a593Smuzhiyun 319*4882a593SmuzhiyunThis information is taken from: 320*4882a593Smuzhiyun http://trac.gateworks.com/wiki/ventana/bootloader/falcon-mode#microsd 321