[meta-xilinx] Problem with generating uImage via meta-xilinx

Nathan Rossi nathan at nathanrossi.com
Wed Jul 15 02:59:33 PDT 2015


On Tue, Jul 14, 2015 at 2:58 AM, avallash <avallash at o2.pl> wrote:
> Hi,
> So I found few things regarding your suggestions (BTW thanks for them)
>
> when expanded to values the qspiboot is:
> qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0 &&
> sf read 0x2080000 0x100000 0x500000 && sf read 0x2000000 0x600000 0x20000 &&
> echo Copying ramdisk... && sf read 0x4000000 0x620000 0x5E0000 && bootm
> 0x2080000 0x4000000 0x2000000
>
> From this I get that in flash I should have kernel on address 0x100000,
> which I don't supply while merging with bootgen. Is this correct asumption?
>
> after executing:
> zynq-uboot> sf probe 0 0 0
> SF: Detected S25FL128S_64K with page size 512 Bytes, erase size 128 KiB,
> total 32 MiB
> zynq-uboot> sf read 0x2080000 0x620000 0x500000
> SF: 5242880 bytes @ 0x620000 Read: OK
> zynq-uboot> iminfo 0x2080000
>
> ## Checking Image at 02080000 ...
>    Legacy image found
>    Image Name:   core-image-minimal-mod-initramfs
>    Image Type:   ARM Linux RAMDisk Image (gzip compressed)
>    Data Size:    2220303 Bytes = 2.1 MiB
>    Load Address: 00000000
>    Entry Point:  00000000
>    Verifying Checksum ... OK
> zynq-uboot>
>
> i get from this that what I get while building is just the ramdisk, and not
> the uImage with kernel and ramdisk, correct?

Yocto will build the uImage, rootfs/ramdisk and device tree
separately. I imagine what you are after is what PetaLinux does by
default which has them packed together in a single image.

Yocto can easily pack the ramdisk into the kernel as a initramfs
(which is what PetaLinux does for its ramdisk), however it is a little
more work to pack the device tree in as well.
(Note the image target "core-image-minimal-initramfs" does not
automatically embed the rootfs into your kernel, you will still need
the setup shown below)

For getting the kernel to be generated with a initramfs you need to
configure Yocto to build with the following options in you local.conf:

INITRAMFS_IMAGE = "core-image-minimal-initramfs"
INITRAMFS_IMAGE_BUNDLE = "1"

(for reference this is covered in the sample local.conf -
http://git.openembedded.org/openembedded-core/tree/meta/conf/local.conf.sample.extended#n324)

Simply rebuild your image, bitbake core-image-minimal-initramfs. And
the output uImage will have the kernel and rootfs packed together. You
can then remove the setup in u-boot for the rootfs/ramdisk part and
load just the kernel image and device-tree.

As for embedded the device-tree into the same image. For Zynq/ARM the
easiest option would be the append dtb to kernel image method (using
CONFIG_ARM_APPENDED_DTB). I haven't really used this, however you
should be able to search the internet for some instructions.

Regards,
Nathan

>
> If my asumptions are correct, what should I do to get yocto to build and
> image of kernel with ramdisk?
>
>
>
> ---------------------------------------
> Pozdrawiam,
> Bogusz Brodziński
>
> On Fri, Jul 10, 2015 at 1:07 PM, Nathan Rossi <nathan at nathanrossi.com>
> wrote:
>>
>> On Fri, Jul 10, 2015 at 8:26 PM, avallash <avallash at o2.pl> wrote:
>> > Hi,
>> > I am trying to run linux on zc706 xilinx dev board and I get this error
>> > while u-boot tries to boot uImage:
>> >
>> > Board:  Xilinx Zynq
>> > I2C:   ready
>> > DRAM:  ECC disabled 1 GiB
>> > MMC:   zynq_sdhci: 0
>> > SF: Detected S25FL128S_64K with page size 512 Bytes, erase size 128 KiB,
>> > total 32 MiB
>> > *** Warning - bad CRC, using default environment
>> >
>> > In:    serial
>> > Out:   serial
>> > Err:   serial
>> > Board:  Xilinx Zynq
>> > Net:   Gem.e000b000
>> > Hit any key to stop autoboot:  0
>> > Copying Linux from QSPI flash to RAM...
>> > SF: Detected S25FL128S_64K with page size 512 Bytes, erase size 128 KiB,
>> > total 32 MiB
>> > SF: 5242880 bytes @ 0x100000 Read: OK
>> > SF: 131072 bytes @ 0x600000 Read: OK
>> > Copying ramdisk...
>> > SF: 6160384 bytes @ 0x620000 Read: OK
>> > Wrong Image Format for bootm command
>> > ERROR: can't get kernel image!
>> > zynq-uboot> <INTERRUPT>
>> > zynq-uboot>
>> >
>>
>> It looks like the uImage is correct and the partitioning and addresses are
>> fine.
>>
>> Can you confirm whether or not the expected content was actually
>> stored into the QSPI flash correctly? you should be able to do with
>> with a mix of iminfo and md in u-boot.
>>
>> e.g. load the kernel section of flash into memory and do iminfo (to
>> see if it is correctly read and that u-boot sees it as a image), if
>> not use md to dump the memory and see whether it looks correct or not.
>>
>> Regards,
>> Nathan
>>
>> >
>> > I am using fsbl from petalinux, u-boot from meta-xilinx (u-boot-xlnx)
>> > and
>> > building core-image-minimal and core-image-minimal-initramfs
>> > yocto version poky-dizzy-12.0.2
>> >
>> > I think uImage header is correct:
>> >
>> > 00000000   27 05 19 56  AA D0 FC AC  55 9B EB 70  00 30 46 E8
>> > '..V....U..p.0F.
>> > 00000010   00 00 80 00  00 00 80 00  92 CC BB 0D  05 02 02 00
>> > ................
>> > 00000020   4C 69 6E 75  78 2D 33 2E  31 34 2E 32  2D 78 69 6C
>> > Linux-3.14.2-xil
>> > 00000030   69 6E 78 00  00 00 00 00  00 00 00 00  00 00 00 00
>> > inx.............
>> >
>> >
>> > What am I missing? Can someone point me to materials that can help me
>> > fix
>> > this issue? Was this problem addressed in the past?
>> >
>> > printenv:
>> >
>> > zynq-uboot> printenv
>> > baudrate=115200
>> > bitstream_image=system.bit.bin
>> > boot_image=BOOT.bin
>> > boot_size=0xF00000
>> > bootcmd=run $modeboot
>> > bootdelay=3
>> > bootenv=uEnv.txt
>> > devicetree_image=devicetree.dtb
>> > devicetree_load_address=0x2000000
>> > devicetree_size=0x20000
>> > dfu_mmc=run dfu_mmc_info && dfu 0 mmc 0
>> > dfu_mmc_info=set dfu_alt_info ${kernel_image} fat 0
>> > 1\\;${devicetree_image}
>> > fat 0 1\\;${ramdisk_image} fat 0 1
>> > dfu_ram=run dfu_ram_info && dfu 0 ram 0
>> > dfu_ram_info=set dfu_alt_info ${kernel_image} ram 0x3000000
>> > 0x500000\\;${devicetree_image} ram 0x2A00000 0x20000\\;${ramdisk_image}
>> > ram
>> > 0x2000000 0x600000
>> > ethact=Gem.e000b000
>> > ethaddr=00:0a:35:00:01:22
>> > fdt_high=0x20000000
>> > importbootenv=echo Importing environment from SD ...; env import -t
>> > ${loadbootenv_addr} $filesize
>> > initrd_high=0x20000000
>> > ipaddr=10.10.70.102
>> > jtagboot=echo TFTPing Linux to RAM... && tftpboot ${kernel_load_address}
>> > ${kernel_image} && tftpboot ${devicetree_load_address}
>> > ${devicetree_image}
>> > && tftpboot ${ramdisk_load_address} ${ramdisk_image} && bootm
>> > ${kernel_load_addres
>> > s} ${ramdisk_load_address} ${devicetree_load_address}
>> > kernel_image=uImage
>> > kernel_load_address=0x2080000
>> > kernel_size=0x500000
>> > loadbit_addr=0x100000
>> > loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}
>> > loadbootenv_addr=0x2000000
>> > mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. && mmcinfo
>> > &&
>> > load mmc 0 ${loadbit_addr} ${bitstream_image} && fpga load 0
>> > ${loadbit_addr}
>> > ${filesize}
>> > modeboot=qspiboot
>> > nandboot=echo Copying Linux from NAND flash to RAM... && nand read
>> > ${kernel_load_address} 0x100000 ${kernel_size} && nand read
>> > ${devicetree_load_address} 0x600000 ${devicetree_size} && echo Copying
>> > ramdisk... && nand read ${ramdis
>> > k_load_address} 0x620000 ${ramdisk_size} && bootm ${kernel_load_address}
>> > ${ramdisk_load_address} ${devicetree_load_address}
>> > norboot=echo Copying Linux from NOR flash to RAM... && cp.b 0xE2100000
>> > ${kernel_load_address} ${kernel_size} && cp.b 0xE2600000
>> > ${devicetree_load_address} ${devicetree_size} && echo Copying ramdisk...
>> > &&
>> > cp.b 0xE2620000 ${ramdisk_
>> > load_address} ${ramdisk_size} && bootm ${kernel_load_address}
>> > ${ramdisk_load_address} ${devicetree_load_address}
>> > preboot=if test $modeboot = sdboot && env run sd_uEnvtxt_existence_test;
>> > then if env run loadbootenv; then env run importbootenv; fi; fi;
>> > qspiboot=echo Copying Linux from QSPI flash to RAM... && sf probe 0 0 0
>> > &&
>> > sf read ${kernel_load_address} 0x100000 ${kernel_size} && sf read
>> > ${devicetree_load_address} 0x600000 ${devicetree_size} && echo Copying
>> > ramdisk... && sf r
>> > ead ${ramdisk_load_address} 0x620000 ${ramdisk_size} && bootm
>> > ${kernel_load_address} ${ramdisk_load_address}
>> > ${devicetree_load_address}
>> > ramdisk_image=uramdisk.image.gz
>> > ramdisk_load_address=0x4000000
>> > ramdisk_size=0x5E0000
>> > rsa_jtagboot=echo TFTPing Image to RAM... && tftpboot 0x100000
>> > ${boot_image}
>> > && zynqrsa 0x100000 && bootm ${kernel_load_address}
>> > ${ramdisk_load_address}
>> > ${devicetree_load_address}
>> > rsa_nandboot=echo Copying Image from NAND flash to RAM... && nand read
>> > 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm
>> > ${kernel_load_address} ${ramdisk_load_address}
>> > ${devicetree_load_address}
>> > rsa_norboot=echo Copying Image from NOR flash to RAM... && cp.b
>> > 0xE2100000
>> > 0x100000 ${boot_size} && zynqrsa 0x100000 && bootm
>> > ${kernel_load_address}
>> > ${ramdisk_load_address} ${devicetree_load_address}
>> > rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && sf probe 0
>> > 0 0
>> > && sf read 0x100000 0x0 ${boot_size} && zynqrsa 0x100000 && bootm
>> > ${kernel_load_address} ${ramdisk_load_address}
>> > ${devicetree_load_address}
>> > rsa_sdboot=echo Copying Image from SD to RAM... && load mmc 0 0x100000
>> > ${boot_image} && zynqrsa 0x100000 && bootm ${kernel_load_address}
>> > ${ramdisk_load_address} ${devicetree_load_address}
>> > sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt
>> > sdboot=if mmcinfo; then run uenvboot; echo Copying Linux from SD to
>> > RAM...
>> > && load mmc 0 ${kernel_load_address} ${kernel_image} && load mmc 0
>> > ${devicetree_load_address} ${devicetree_image} && load mmc 0
>> > ${ramdisk_load_address} ${r
>> > amdisk_image} && bootm ${kernel_load_address} ${ramdisk_load_address}
>> > ${devicetree_load_address}; fi
>> > serverip=10.10.70.101
>> > stderr=serial
>> > stdin=serial
>> > stdout=serial
>> > thor_mmc=run dfu_mmc_info && thordown 0 mmc 0
>> > thor_ram=run dfu_ram_info && thordown 0 ram 0
>> > uenvboot=if run loadbootenv; then echo Loaded environment from
>> > ${bootenv};
>> > run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd
>> > ...;
>> > run uenvcmd; fi
>> > usbboot=if usb start; then run uenvboot; echo Copying Linux from USB to
>> > RAM... && load usb 0 ${kernel_load_address} ${kernel_image} && load usb
>> > 0
>> > ${devicetree_load_address} ${devicetree_image} && load usb 0
>> > ${ramdisk_load_address}
>> >  ${ramdisk_image} && bootm ${kernel_load_address}
>> > ${ramdisk_load_address}
>> > ${devicetree_load_address}; fi
>> >
>> > Environment size: 4831/131068 bytes
>> >
>> >
>> >
>> >
>> > --
>> > _______________________________________________
>> > meta-xilinx mailing list
>> > meta-xilinx at yoctoproject.org
>> > https://lists.yoctoproject.org/listinfo/meta-xilinx
>> >
>
>



More information about the meta-xilinx mailing list