From mboxrd@z Thu Jan 1 00:00:00 1970 From: Przemyslaw Marczak Date: Fri, 02 Oct 2015 09:35:27 +0200 Subject: [U-Boot] "Embedding" default script with uboot image In-Reply-To: <560B980F.1020502@gmail.com> References: <560147AA.9080409@gmail.com> <560B980F.1020502@gmail.com> Message-ID: <560E33BF.1030904@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 09/30/2015 10:06 AM, Zatkovsk? Du?an wrote: > Really nobody? > > -- > Dusan > > D?a 22. 9. 2015 o 14:20 Zatkovsk? Du?an nap?sal(a): >> Hi all, >> >> Excuse my question if it was solved somewhere in forum, but I didn't >> found an answer yet (maybe I can't find the right keywords). >> >> I am building the uboot with yocto for imx6 board. I have started with >> some freescale defaults, >> edited environment for my needs, saved environment etc ... Now I want >> to create a custom >> "default" boot script, that will do some "heurestics", such as "look >> if usb stick is present, then boot from it, else boot from emmc, etc...". >> Currently I am storing that script on first partition on emmc and >> loading it with ext2load. >> >> But it has drawbacks: >> - user should delete that file -> brick >> - user should broke entire filesystem -> brick >> >> I want this script to be "embedded" somehow with uboot image (which is >> placed outside partition table on device), but I didn't found any doc >> how to do that. >> Currently I use CONFIG_EXTRA_ENV_SETTINGS for some basic stuffbut it >> is unmaintainable for bigger scripts. >> >> Any suggestions? >> >> Thank you. >> -- >> Dusan >> > > _______________________________________________ > U-Boot mailing list > U-Boot at lists.denx.de > http://lists.denx.de/mailman/listinfo/u-boot The ELCE is coming, so probably people are busy. Please check those few suggestions, which can help you: - you can "cat" the binaries of U-Boot and your script into one binary - you can get the address of your script in the code with few lines: unsigned long *ptr = (unsigned long *)&_end; - start address of your DTB ptr += fdt_totalsize(ptr) >> 2; - start address of your script - you can add some header with "magic code" before your script binary - check the size limit of your u-boot binary, because your script can be broken if the output binary exceeds the size, which can be loaded to RAM by SPL. - also check if your bigger binary will not overwrite something on the flash layout - to execute the script at every boot, you can modify same late function, like autoboot_command in common/autoboot.c ? - so at this point, you can check your script's magic code - if added - run script with: char cmd[64]; sprintf(cmd, "source %p", ptr); run_command(cmd, 0); If you add some logic for checking if the script is valid (e.g. header with size and crc ?), then I think you can be sure, that it will work. Best regards, -- Przemyslaw Marczak Samsung R&D Institute Poland Samsung Electronics p.marczak at samsung.com