[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: flash-kernel and dtb



On 15/06/2014 08:48, Rainer Dorsch wrote:
> On Sunday 15 June 2014 08:43:23 you wrote:
>> On 15/06/2014 08:36, Rainer Dorsch wrote:
>>> Hi Ian,
>>>
>>> thanks for your useful response again.
>>>
>>> On Saturday 14 June 2014 14:48:08 Vagrant Cascadian wrote:
>>>> On Sat, Jun 14, 2014 at 10:36:43PM +0200, Rainer Dorsch wrote:
>>>>> root@bokocube:~# cat /root/boot.cmd
>>>>> 5# boot script for CuBox-i
>>>>>
>>>>> setenv device mmc
>>>>> setenv partition ${mmcdev}:${mmcpart}
>>>>> setenv bootargs 'quiet'
>>>>>
>>>>> image_locations='/boot/ /'
>>>>> kvers='3.15-rc8-armmp'
>>>>>
>>>>> for pathprefix in ${image_locations}
>>>>> do
>>>>>
>>>>>   load ${device} ${partition} ${loadaddr} ${pathprefix}vmlinuz-${kvers}
>>>>>   \
>>>>>   && load ${device} ${partition} ${fdt_addr} ${pathprefix}dtb-${kvers} \
>>>>>   && load ${device} ${partition} ${ramdiskaddr}
>>>>>
>>>>> ${pathprefix}initrd.img-${kvers} \
>>>>>
>>>>>   && echo "Booting Debian ${kvers} from ${device} ${partition}..." \
>>>>>   && bootz ${loadaddr} ${ramdiskaddr}:${filesize} ${fdt_addr}
>>>>>
>>>>> done
>>>>> root@bokocube:~#
>>>>
>>>> You might want to remove "quiet" and add the console= and root=
>>>> bootprompt
>>>>
>>>> options in /etc/default/flash-kernel (or run dpkg-reconfigure flash-kernel):
>>>>   LINUX_KERNEL_CMDLINE="root=/dev/mmcblk0p1 console=ttymxc0,115200"
>>>
>>> Thank you for that hint, I did not know how to configure that, but was
>>> wondering about the quiet.
>>>
>>>> Then run flash-kernel and use the bootscript it generates... or manually
>>>> edit the bootargs in your boot script.
>>>>
>>>>> CuBox-i U-Boot >  setenv mmcdev 0
>>>>> CuBox-i U-Boot > setenv mmcpart 2
>>>>> CuBox-i U-Boot > setenv ramdiskaddr 0x11800000
>>>>> CuBox-i U-Boot > setenv fdt_addr 0x18000000
>>>>> CuBox-i U-Boot > setenv scr_addr 0x19900000
>>>>> CuBox-i U-Boot > ext4load mmc 0:2 0x19900000 /boot/boot.scr
>>>>> 637 bytes read in 94 ms (5.9 KiB/s)
>>>>> CuBox-i U-Boot > source 0x19900000
>>>>
>>>> The default in the u-boot in Debian is to use ${loadaddr} for the script
>>>> address. Is your initrd large enough that you might be overwriting part
>>>> of
>>>> it with ${scr_addr}?
>>>
>>> I thought about that and calculated the sizes of the zImage, ramdisk, and
>>> dtb, but they should fit in easily. For the size I used the output of
>>> load
>>>
>>> 2857680 bytes read in 247 ms (11 MiB/s)
>>> 28603 bytes read in 126 ms (221.7 KiB/s)
>>> 10934444 bytes read in 621 ms (16.8 MiB/s)
>>>
>>> e.g. the last one (ramdisk) is 0xA6D8AC
>>>
>>>> This is what my working setup looks like (should be all default u-boot
>>>> env
>>>> values):
>>>>
>>>> CuBox-i U-Boot > printenv loadaddr fdt_addr ramdiskaddr
>>>> loadaddr=0x10800000
>>>> fdt_addr=0x18000000
>>>> ramdiskaddr=0x11800000
>>>> CuBox-i U-Boot > boot
>>>> mmc0 is current device
>>>> ** File not found /boot.scr **
>>>> ** File not found uEnv.txt **
>>>> ** File not found /zImage **
>>>> ** File not found /uImage **
>>>> 674 bytes read in 110 ms (5.9 KiB/s)
>>>> Running bootscript from mmc ...
>>>> ## Executing script at 10800000
>>>> 2857312 bytes read in 308 ms (8.8 MiB/s)
>>>> 29104 bytes read in 107 ms (265.6 KiB/s)
>>>> 10930060 bytes read in 801 ms (13 MiB/s)
>>>> Booting Debian 3.15-rc8-armmp from mmc 0:1...
>>>> Kernel image @ 0x10800000 [ 0x000000 - 0x2b9960 ]
>>>> ## Flattened Device Tree blob at 18000000
>>>>
>>>>    Booting using the fdt blob at 0x18000000
>>>>    Using Device Tree in place at 18000000, end 1800a1af
>>>>
>>>> Starting kernel ...
>>>>
>>>> [    0.000000] Booting Linux on physical CPU 0x0
>>>> ...
>>>>
>>>> I don't see it loading the initrd, though it's definitely using it...
>>>
>>> I use your original boot.scr with an adapted bootargs:
>>>
>>> root@bokocube:~# cat /root/boot.cmd
>>> v# boot script for CuBox-i
>>>
>>> setenv device mmc
>>> setenv partition ${mmcdev}:${mmcpart}
>>> setenv bootargs 'root=/dev/mmcblk0p2 rootfstype=ext4 ro rootwait
>>> console=ttymxc0,115200'
>>>
>>> image_locations='/boot/ /'
>>> kvers='3.15-rc8-armmp'
>>>
>>> for pathprefix in ${image_locations}
>>> do
>>>
>>>   load ${device} ${partition} ${loadaddr} ${pathprefix}vmlinuz-${kvers} \
>>>   && load ${device} ${partition} ${fdt_addr} ${pathprefix}dtb-${kvers} \
>>>   && load ${device} ${partition} ${ramdiskaddr}
>>>
>>> ${pathprefix}initrd.img-${kvers} \
>>>
>>>   && echo "Booting Debian ${kvers} from ${device} ${partition}..." \
>>>   && bootz ${loadaddr} ${ramdiskaddr}:${filesize} ${fdt_addr}
>>>
>>> done
>>> root@bokocube:~#
>>>
>>> Variables set as you did, but the kernel is still not booting
>>>
>>> CuBox-i U-Boot > printenv loadaddr fdt_addr ramdiskaddr
>>> loadaddr=0x10800000
>>> fdt_addr=0x18000000
>>> ramdiskaddr=0x11800000
>>> CuBox-i U-Boot > save
>>> Saving Environment to MMC...
>>> Writing to MMC(0)... done
>>> CuBox-i U-Boot > load mmc 0:2 0x19000000 /boot/boot.scr
>>> 702 bytes read in 95 ms (6.8 KiB/s)
>>> CuBox-i U-Boot > source 0x19000000
>>> ## Executing script at 19000000
>>> 2857680 bytes read in 247 ms (11 MiB/s)
>>> 28603 bytes read in 127 ms (219.7 KiB/s)
>>> 11419166 bytes read in 642 ms (17 MiB/s)
>>> Booting Debian 3.15-rc8-armmp from mmc 0:2...
>>> Kernel image @ 0x10800000 [ 0x000000 - 0x2b9ad0 ]
>>> ## Flattened Device Tree blob at 18000000
>>>
>>>    Booting using the fdt blob at 0x18000000
>>>    Loading Ramdisk to 8ec7a000, end 8f75de1e ... OK
>>>    Using Device Tree in place at 18000000, end 18009fba
>>>
>>> Starting kernel ...
>>>
>>> Just for reference my entire environment
>>>
>>> CuBox-i U-Boot > printenv
>>> baudrate=115200
>>> board=mx6-cubox-i
>>> bootargs=video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 cma=64 console=tty1
>>> ahci_imx.hotplug=1 root=/dev/mmcblk0p2 rootfstype=ext4 ro rootwait
>>> console=ttymxc00
>>> bootcmd=run loadkernel ; run loadramdisk ; bootm ${loadaddr}
>>> ${ramdiskaddr}
>>> bootdelay=3
>>> bootload=load $bootdev $bootunit:$bootpart 0x$loadaddr $bootroot$loadfile;
>>> if test $fdt_load = yes; then load $fdt_dev $fdt_unit:$fdt_part
>>> 0x$fdt_addr $fdt_i
>>> bootset=setenv bootenv 'run set$rootdev; setenv bootargs $root $video
>>> $console $bootextra'; if load $bootdev $bootunit:$bootpart 0x$loadaddr
>>> $envfile; then b bootstart=echo $bootfile $bootargs; echo $bootrun
>>> $loadfile; $bootrun boottest=run testloader ; run testrun
>>> console=console=ttymxc0,115200
>>> cpu=6Q
>>> ethact=FEC
>>> ethaddr=d0:63:b4:00:32:5c
>>> fdt_addr=0x18000000
>>> fdt_high=ffffffff
>>> filesize=ae3e5e
>>> kernel=/uImage
>>> loadaddr=0x10800000
>>> loadkernel=ext4load mmc 0:2 0x10800000 /uImage
>>> loadramdisk=ext4load mmc 0:2 0x11800000 /ramdisk
>>> mmc=run reset; mmc rescan
>>> mmcdev=0
>>> mmcpart=2
>>> new_kern=env del bootfile bootkern load_fdt
>>> old_kern=setenv bootfile uImage; setenv bootkern bootm; setenv load_fdt no
>>> preboot=usb start
>>> preset=bootdev=mmc; bootunit=0; bootpart=1; bootroot=/boot/;
>>> envfile=${bootroot}uEnv.txt; bootfile=zImage; rootfs=ext4;
>>> rootextra="rootfstype=$rootfs ro roo0
>>> ramdisk=/ramdisk
>>> ramdiskaddr=0x11800000
>>> reset=env del bootdev bootunit bootpart bootroot envfile bootfile bootkern
>>> rootdev rootunit rootpart rootfs rootextra; env del fdt_load fdt_dev
>>> fdt_unit fdtn
>>> serialcon=setenv console console=ttymxc0,$baudrate; setenv stdout serial;
>>> setenv stderr serial; setenv stdin serial,usbkbd
>>> setlabel=root="root=$rootlabel $rootextra"
>>> setmmc=root="root=/dev/mmcblk${rootunit}p$rootpart $rootextra"
>>> setusb=root="root=/dev/sda$rootpart $rootextra"
>>> splashpos=m,m
>>> stderr=serial,vga
>>> stdin=serial,usbkbd
>>> stdout=serial,vga
>>> testloader=ext4load mmc 0:2 0x19000000 /boothelper.scr
>>> testrun=source 0x19000000
>>> usb=run reset; setenv bootdev usb; usb reset
>>> videocon=setenv console; setenv stdout vga; setenv stderr vga; setenv
>>> stdin
>>> serial,usbkbd
>>>
>>> Environment size: 2718/8188 bytes
>>> CuBox-i U-Boot >
>>>
>>>
>>> "run bootcmd" does boot the system successfully, but it does not use a
>>> zImage. it is using bootm.

You have in your env :
bootcmd=run loadkernel ; run loadramdisk ; bootm ${loadaddr} ${ramdiskaddr}

>>> Does anybody have a good idea on what to look next?

You must try to change bootcmd in bootscript, it will override the bootcmd without the need to overwrite it permanently.
Use :
setenv bootcmd '.........'
and replace ... with the command you need

Then calling *run bootcmd* or simply *boot* at the end of your bootscript will make the call

>> Rainer,
>>
>> Have you compile your boot.script with mkimage to make a correct boot.scr ?
>>
>>> Tweaking the bootscript do not need to parse it with mkimage also ?
>>> A bootscript is not a standard text file but a mkimage -T script
>>
>> With;
>>
>> $ mkimage -A arm -O linux -T script -d /boot/boot.script /boot/boot.scr
> 
> I used flash-kernel and validated with Vagrant's method
> 
> dd if=/boot/boot.scr bs=64 skip=1 of=/root/boot.cmd
> 
> that it worked.
> 
> Rainer
> 


Reply to: