Genode on i.MX6 (eMMC Flash)

Stefan Kalkowski stefan.kalkowski at ...1...
Tue Apr 11 10:25:37 CEST 2017


Hi,

On 04/06/2017 07:34 AM, Kranthi Tej wrote:
> Hello Stefan,
> 
> Thank you for the quick response.
> 
> Yes, I've been following the parallel thread and I've made the necessary
> changes in the "/repos/base/include/spec/imx6/drivers/board_base.h"
> file. I've set the following values:
> 
> *UART_1_IRQ = 57,
> UART_1_MMIO_BASE = 0x021e8000,
> *
> *RAM0_SIZE = 0x20000000,*

Your RAM size can be increased to 0x40000000, but obviously it should
also work with less.

> 
> It turns out I was flashing it the wrong way. I've fixed it by drawing
> insights from how Android is currently being flashed onto the device.
> I've followed a similar procedure. After installing the bootloader, I've
> flashed the Genode uImage (generated using RUN_OPT += --include
> image/uboot) onto the device as per your advice. Flashing was
> successfully done. Upon booting up, I got the following:
> 
> U-Boot 2009.08-dirty (Jul 08 2016 - 12:21:39)
> 
> CPU: Freescale i.MX6 family TO1.5 at 792 MHz
> Thermal sensor with ratio = 175
> Temperature:   37 C, calibration data 0x5534ce69
> mx6q pll1: 792MHz
> mx6q pll2: 528MHz
> mx6q pll3: 480MHz
> mx6q pll8: 50MHz
> ipg clock     : 66000000Hz
> ipg per clock : 66000000Hz
> uart clock    : 80000000Hz
> cspi clock    : 60000000Hz
> ahb clock     : 132000000Hz
> axi clock   : 264000000Hz
> emi_slow clock: 132000000Hz
> ddr clock     : 528000000Hz
> usdhc1 clock  : 198000000Hz
> usdhc2 clock  : 198000000Hz
> usdhc3 clock  : 198000000Hz
> usdhc4 clock  : 198000000Hz
> nfc clock     : 24000000Hz
> Board: i.MX6Q-SABRESD: unknown-board Board: 0x63015 [POR ]
> Boot Device: MMC
> 
> HAB Configuration: 0xf0, HAB State: 0x66
> 
> --------- HAB Event 1 -----------------
> event data:
> 0xdb 0x00 0x1c 0x41 0x33 0x18 0xc0 0x00
> 0xca 0x00 0x14 0x00 0x02 0xc5 0x00 0x00
> 0x00 0x00 0x0d 0x34 0x27 0x80 0x04 0x00
> 0x00 0x13 0xec 0x00
> 
> --------- HAB Event 2 -----------------
> event data:
> 0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
> 0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x00
> 0x00 0x00 0x00 0x20
> 
> --------- HAB Event 3 -----------------
> event data:
> 0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
> 0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x2c
> 0x00 0x00 0x02 0xa0
> 
> --------- HAB Event 4 -----------------
> event data:
> 0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
> 0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x20
> 0x00 0x00 0x00 0x01
> 
> --------- HAB Event 5 -----------------
> event data:
> 0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
> 0x00 0x00 0x00 0x00 0x27 0x80 0x06 0xe0
> 0x00 0x00 0x00 0x04
> I2C:   ready
> DRAM:   1 GB
> MMC:   FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
> *** Warning - bad CRC or MMC, using default environment
> 
> In:    serial
> Out:   serial
> Err:   serial
> Found PFUZE100! deviceid=10,revid=11
> Net:   got MAC address from IIM: 00:00:00:00:00:00
> FEC0 [PRIME]
> Hit any key to stop autoboot:  0 
> booti: bad boot image magic
> fastboot is in init......flash target is MMC:3
> wait usb cable into the connector!

I think you hit some High-Assurance-Boot (HAB) problem here, and the
boot procedure therefore resets to some default boot option in this case
fastboot over USB.

> 
> So, I've tried to write the image at an address and have loaded it from
> there. I've did the following in the uboot prompt:
> 
> MX6Q SABRESD U-Boot > ext2load mmc 3:1 0x30000000 uImage
> Loading file "uImage" from mmc device 3:1 (xxd1)
> 594591 bytes read
> 
> MX6Q SABRESD U-Boot > bootm 0x30000000
> ## Booting kernel from Legacy Image at 30000000 ...
>    Image Name:   
>    Image Type:   ARM Linux Kernel Image (gzip compressed)
>    Data Size:    594527 Bytes = 580.6 kB
>    Load Address: 10001000
>    Entry Point:  10001000
>    Verifying Checksum ... OK
>    Uncompressing Kernel Image ... OK
> 
> Starting kernel ...
> 
> It stops here (even after adjusting the *UART* settings before building
> the image). I've also tried *UART1* *(0x02020000)*, *UART3*
> (*0x021ec000*), *UART4* *(**0x021f0000**)* and *UART5 (**0x021F4000**)
> *with the same interrupt values. 
> 
> I've built the uImage for log (make run/log) and demo (make run/demo).
> I'm facing the same issue.
> 
> I'm unable to find the source of the problem. Can you give me any leads
> on the possible problems?

I'm afraid I have no idea why it should still fail. I know I also
successfully booted our system on that SABRE board before, so in
principle it should work.
Of course, you can put some "log()" message at some very early stage
into the bootstrap binary, e.g. at line:

  repos/base-hw/src/bootstrap/init.cc:28

If you have a JTAG debugger, you can of course breakpoint at 0x10001000
and single-step to identify the problem.

Regards Stefan

> 
> Thanks,
> Kranthi
> 
> On Thu, Apr 6, 2017 at 12:07 AM, Kranthi Tej <ee13b037 at ...484...
> <mailto:ee13b037 at ...484...>> wrote:
> 
>     Hello Stefan,
> 
>     Thank you for the quick response.
> 
>     Yes, I've been following the parallel thread and I've made the
>     necessary changes in the
>     "/repos/base/include/spec/imx6/drivers/board_base.h" file. I've set
>     the following values:
>     UART_1_IRQ = 57,
>     UART_1_MMIO_BASE = 0x021e8000,
>     RAM0_SIZE = 0x20000000.
> 
>     It turns out I was flashing it the wrong way. I've fixed it by
>     drawing insights from how Android is currently being flashed onto
>     the device. I've followed a similar procedure. After installing the
>     bootloader, I've flashed the Genode uImage (generated using RUN_OPT
>     += --include image/uboot) onto the device as per your advice.
>     Flashing was successfully done. Upon booting up, I got the following:
> 
>     U-Boot 2009.08-dirty (Jul 08 2016 - 12:21:39)
> 
>     CPU: Freescale i.MX6 family TO1.5 at 792 MHz
>     Thermal sensor with ratio = 175
>     Temperature:   37 C, calibration data 0x5534ce69
>     mx6q pll1: 792MHz
>     mx6q pll2: 528MHz
>     mx6q pll3: 480MHz
>     mx6q pll8: 50MHz
>     ipg clock     : 66000000Hz
>     ipg per clock : 66000000Hz
>     uart clock    : 80000000Hz
>     cspi clock    : 60000000Hz
>     ahb clock     : 132000000Hz
>     axi clock   : 264000000Hz
>     emi_slow clock: 132000000Hz
>     ddr clock     : 528000000Hz
>     usdhc1 clock  : 198000000Hz
>     usdhc2 clock  : 198000000Hz
>     usdhc3 clock  : 198000000Hz
>     usdhc4 clock  : 198000000Hz
>     nfc clock     : 24000000Hz
>     Board: i.MX6Q-SABRESD: unknown-board Board: 0x63015 [POR ]
>     Boot Device: MMC
> 
>     HAB Configuration: 0xf0, HAB State: 0x66
> 
>     --------- HAB Event 1 -----------------
>     event data:
>     0xdb 0x00 0x1c 0x41 0x33 0x18 0xc0 0x00
>     0xca 0x00 0x14 0x00 0x02 0xc5 0x00 0x00
>     0x00 0x00 0x0d 0x34 0x27 0x80 0x04 0x00
>     0x00 0x13 0xec 0x00
> 
>     --------- HAB Event 2 -----------------
>     event data:
>     0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
>     0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x00
>     0x00 0x00 0x00 0x20
> 
>     --------- HAB Event 3 -----------------
>     event data:
>     0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
>     0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x2c
>     0x00 0x00 0x02 0xa0
> 
>     --------- HAB Event 4 -----------------
>     event data:
>     0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
>     0x00 0x00 0x00 0x00 0x27 0x80 0x04 0x20
>     0x00 0x00 0x00 0x01
> 
>     --------- HAB Event 5 -----------------
>     event data:
>     0xdb 0x00 0x14 0x41 0x33 0x0c 0xa0 0x00
>     0x00 0x00 0x00 0x00 0x27 0x80 0x06 0xe0
>     0x00 0x00 0x00 0x04
>     I2C:   ready
>     DRAM:   1 GB
>     MMC:   FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
>     *** Warning - bad CRC or MMC, using default environment
> 
>     In:    serial
>     Out:   serial
>     Err:   serial
>     Found PFUZE100! deviceid=10,revid=11
>     Net:   got MAC address from IIM: 00:00:00:00:00:00
>     FEC0 [PRIME]
>     Hit any key to stop autoboot:  0 
>     booti: bad boot image magic
>     fastboot is in init......flash target is MMC:3
>     wait usb cable into the connector!
> 
>     So, I've tried to write the image at an address and have loaded it
>     from there. I've did the following in the uboot prompt:
> 
>     MX6Q SABRESD U-Boot > ext2load mmc 3:1 0x30000000 uImage
>     Loading file "uImage" from mmc device 3:1 (xxd1)
>     594591 bytes read
> 
>     MX6Q SABRESD U-Boot > bootm 0x30000000
>     ## Booting kernel from Legacy Image at 30000000 ...
>        Image Name:   
>        Image Type:   ARM Linux Kernel Image (gzip compressed)
>        Data Size:    594527 Bytes = 580.6 kB
>        Load Address: 10001000
>        Entry Point:  10001000
>        Verifying Checksum ... OK
>        Uncompressing Kernel Image ... OK
> 
>     Starting kernel ...
> 
>     It stops here (even after adjusting the UART settings before
>     building the image). I'm unable to find the source of the problem.
>     Can you give me any leads on the possible problems?
> 
>     Thanks,
>     Kranthi
> 
>     On Wed, Mar 29, 2017 at 6:18 PM, Kranthi Tej
>     <ee13b037 at ...484... <mailto:ee13b037 at ...484...>> wrote:
> 
>         ---------- Forwarded message ----------
>         From: "Stefan Kalkowski" <stefan.kalkowski at ...1...
>         <mailto:stefan.kalkowski at ...1...>>
>         Date: Mar 29, 2017 6:03 PM
>         Subject: Re: Genode on i.MX6 (eMMC Flash)
>         To: "Genode OS Framework Mailing List"
>         <genode-main at lists.sourceforge.net
>         <mailto:genode-main at lists.sourceforge.net>>
>         Cc:
> 
>         Hi Kranthi Tej,
> 
>         On 03/28/2017 12:30 PM, Kranthi Tej wrote:
>         > Hi Stefan,
>         >
>         > I've tried using the uboot plugin (RUN_OPT += --include
>         image/uboot).
>         > I've been able to generate a uImage successfully. When I tried
>         to flash
>         > it on to the board, it stops with following log (was observed in
>         > TeraTerm while using the MfgTool):
>         >
>         > U-Boot 2009.08 (Aug 16 2013 - 14:38:59)
>         >
>         > CPU: Freescale i.MX6 family TO1.5 at 792 MHz
>         > Thermal sensor with ratio = 175
>         > Temperature:   42 C, calibration data 0x5524cd69
>         > mx6q pll1: 792MHz
>         > mx6q pll2: 528MHz
>         > mx6q pll3: 480MHz
>         > mx6q pll8: 50MHz
>         > ipg clock     : 66000000Hz
>         > ipg per clock : 66000000Hz
>         > uart clock    : 80000000Hz
>         > cspi clock    : 60000000Hz
>         > ahb clock     : 132000000Hz
>         > axi clock   : 264000000Hz
>         > emi_slow clock: 132000000Hz
>         > ddr clock     : 528000000Hz
>         > usdhc1 clock  : 198000000Hz
>         > usdhc2 clock  : 198000000Hz
>         > usdhc3 clock  : 198000000Hz
>         > usdhc4 clock  : 198000000Hz
>         > nfc clock     : 24000000Hz
>         > Board: i.MX6Q-SABRESD: unknown-board Board: 0x63015 [POR ]
> 
>         As I can see you are using another board with less memory than the
>         Wandboard. Did you adapted the memory settings before building the
>         Genode image for that board?
>         Like it was discussed in this parallel mail thread:
> 
>          
>         http://genode-main.narkive.com/nWs1hbc8/genode-on-i-mx6q-sabre-lite
>         <http://genode-main.narkive.com/nWs1hbc8/genode-on-i-mx6q-sabre-lite>
> 
>         > Boot Device: MMC
>         > I2C:   ready
>         > DRAM:   1 GB
>         > MMC:   FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
>         > Using default environment
>         >
>         > In:    serial
>         > Out:   serial
>         > Err:   serial
>         > Net:   got MAC address from IIM: 00:00:00:00:00:00
>         > FEC0 [PRIME]
>         > Hit any key to stop autoboot:  0
>         > ## Booting kernel from Legacy Image at 10800000 ...
>         >    Image Name:
>         >    Image Type:   ARM Linux Kernel Image (gzip compressed)
>         >    Data Size:    2075251 Bytes =  2 MB
>         >    Load Address: 10001000
>         >    Entry Point:  10001000
>         >    Verifying Checksum ... OK
>         > ## Loading init Ramdisk from Legacy Image at 10c00000 ...
>         >    Image Name:   uboot initramfs rootfs
>         >    Image Type:   ARM Linux RAMDisk Image (gzip compressed)
>         >    Data Size:    4545326 Bytes =  4.3 MB
>         >    Load Address: 00000000
>         >    Entry Point:  00000000
>         >    Verifying Checksum ... OK
>         >    Uncompressing Kernel Image ... OK
>         >
>         > Starting kernel ...
>         >
>         > Also, I'm using the Android RAMDisk Image. Would that be a
>         potential
>         > cause for the problem? I've used the following XML script to
>         flash the
>         > image on to the board (UCL file for MfgTool):
> 
>         If you think the Android RAM disk might interfer with your
>         Genode image,
>         being in your position I would not load it in the first place.
> 
>         >
>         > <UCL>
>         > <CFG>
>         > <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
>         > <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
>         > </CFG>
>         >
>         > <LIST name="SabreSD-eMMC" desc="Choose eMMC as media">
>         > <CMD state="BootStrap" type="boot" body="BootStrap" file
>         > ="u-boot-mx6q-sabresd.bin" >Loading U-boot</CMD>
>         > <CMD state="BootStrap" type="load" file="files/demo/uimage"
>         > address="0x10800000"
>         >         loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
>         >>Loading Kernel.</CMD>
>         > <CMD state="BootStrap" type="load" file="initramfs.cpio.gz.uboot"
>         > address="0x10C00000"
>         >         loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE"
>         >>Loading Initramfs.</CMD>
>         > <CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
>         > <CMD state="Updater" type="push" body="$ dd if=/dev/zero
>         of=/dev/mmcblk0
>         > bs=512 seek=1536 count=16">clean up u-boot parameter</CMD>
>         > <!--CMD state="Updater" type="push" body="$ echo 1 >
>         >
>         /sys/devices/platform/sdhci-esdhc-imx.3/mmc_host/mmc0/mmc0:0001/boot_config">access
>         > boot partition 1</CMD-->
>         > <CMD state="Updater" type="push" body="$ echo 0 >
>         > /sys/block/mmcblk0boot0/force_ro">access boot partition 1</CMD>
>         > <CMD state="Updater" type="push" body="send"
>         > file="files/demo/mmc_img">Sending U-Boot</CMD>
>         > <CMD state="Updater" type="push" body="$ dd if=$FILE
>         of=/dev/mmcblk0
>         > bs=512 seek=2 skip=2">write U-Boot to sd card</CMD>
>         > <!-- <CMD state="Updater" type="push" body="$ dd if=$FILE
>         > of=/dev/mmcblk0p1 bs=1k seek=1 skip=1 conv=fsync">write U-Boot
>         to sd
>         > card</CMD> -->
>         > <CMD state="Updater" type="push" body="$ echo 8 >
>         >
>         /sys/devices/platform/sdhci-esdhc-imx.3/mmc_host/mmc0/mmc0:0001/boot_config">access
>         > user partition and enable boot partion 1 to boot</CMD>
>         > <CMD state="Updater" type="push" body="send"
>         > file="mksdcard-android.sh.tar">Sending partition shell</CMD>
>         > <CMD state="Updater" type="push" body="$ tar xf $FILE ">
>         > Partitioning...</CMD>
>         > <CMD state="Updater" type="push" body="$ sh mksdcard-android.sh
>         > /dev/mmcblk0"> Partitioning...</CMD>
>         > <CMD state="Updater" type="push" body="$ ls -l /dev/mmc*
>         ">Formatting sd
>         > partition</CMD>
>         > <CMD state="Updater" type="push" body="pipe dd
>         of=/dev/mmcblk0p5 bs=512"
>         > file="files/demo/demo.img">Sending and writting demo.img</CMD>
>         > <CMD state="Updater" type="push" body="frf">Finishing rootfs
>         write</CMD>
>         > <CMD state="Updater" type="push" body="$ echo Update
>         Complete!">Done</CMD>
>         > </LIST>
>         > </UCL>
>         >
>         > The script stops executing at "Jumping to OS image". Can you
>         give me any
>         > leads as to where I'm going wrong?
>         >
> 
>         As I already told you, I do not have any experiences with that
>         tool, but
>         you probably encounter the same problems like when using the
>         uImage above.
> 
>         > Note: I've generated the "mmc_img" file using the
>         "create_uboot" tool
>         > provided in the genode tools.
> 
>         I see. In contrast to the run-tool, which produces either a disk
>         image
>         or uImage, this utility creates a disk image with the u-boot binary
>         only. I'm not sure whether you can use the same u-boot binary in
>         between
>         Wandboard and your board, probably not!
> 
>         We do not have a combination tool that combines u-boot and
>         system image
>         to provide one final disk image to you.
> 
>         Best regards
>         Stefan
> 
>         --
>         Stefan Kalkowski
>         Genode Labs
> 
>         https://github.com/skalk · http://genode.org/
> 
>         ------------------------------------------------------------------------------
>         Check out the vibrant tech community on one of the world's most
>         engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>         _______________________________________________
>         genode-main mailing list
>         genode-main at lists.sourceforge.net
>         <mailto:genode-main at lists.sourceforge.net>
>         https://lists.sourceforge.net/lists/listinfo/genode-main
>         <https://lists.sourceforge.net/lists/listinfo/genode-main>
> 
> 
> 
> 
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most
> engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> 
> 
> 
> _______________________________________________
> genode-main mailing list
> genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
> 

-- 
Stefan Kalkowski
Genode Labs

https://github.com/skalk · http://genode.org/




More information about the users mailing list