mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
bootscript: sunxi: Add a dtb file path analyzer
Device tree files and overlay files are interconnected
and always located in the same place, separated by
the overlay subdirectory.
${fdtdir}/${fdtfile}
${fdtdir}/overlay/${overlay_prefix}-${overlay_file}.dtbo
By default, we are trying to download a dtb file from
the /boot/dtb folder, which is a link to the real folder.
Depending on the time and type of build, this link may
point directly to the target folder or to a subdirectory,
i.e. possible path options:
/boot/dtb/overlay
/boot/dtb/allwinner/overlay
In the file armbianEnv.txt we can also see:
fdtfile=sun8i-*.dtb
or
fdtfile=allwinner/sun8i-*.dtb
Thus, when the user has frozen the kernel and updated
the BSP package, or vice versa, updated only the kernel,
the following options are possible in the paths after
their concatenation in the script:
/boot/dtb/sun8i-*.dtb
/boot/dtb/allwinner/sun8i-*.dtb
/boot/dtb/allwinner/allwinner/sun8i-*.dtb
Define and remember default path variables.
Provide the user with the ability to specify the path
to the target folder as:
fdtdir=/path/to/dir
Check the existence of the dtb file in all reasonable
paths and set the path to it.
If not found, download the default file from the default path.
Signed-off-by: The-going <48602507+The-going@users.noreply.github.com>
This commit is contained in:
@@ -13,6 +13,15 @@ setenv console "both"
|
||||
setenv docker_optimizations "on"
|
||||
setenv bootlogo "false"
|
||||
|
||||
# Remember the default u-boot fdtfile
|
||||
setenv deffdt_file ${fdtfile}
|
||||
|
||||
# Remember the default u-boot fdtdir
|
||||
setenv deffdt_dir "${prefix}dtb"
|
||||
if test "$fdtdir" = ""; then setenv fdtdir "${deffdt_dir}";fi
|
||||
|
||||
setenv vendor "allwinner"
|
||||
|
||||
# Print boot source
|
||||
itest.b *0x10028 == 0x00 && echo "U-boot loaded from SD"
|
||||
itest.b *0x10028 == 0x02 && echo "U-boot loaded from eMMC or secondary SD"
|
||||
@@ -25,6 +34,37 @@ if test -e ${devtype} ${devnum} ${prefix}armbianEnv.txt; then
|
||||
env import -t ${load_addr} ${filesize}
|
||||
fi
|
||||
|
||||
# In this shell, we can only check the existence of the file.
|
||||
# Make a check of reasonable ways to find the dtb file.
|
||||
# Set the true value of the paths.
|
||||
if test -e ${devtype} ${devnum} "${fdtdir}/${fdtfile}"; then
|
||||
:
|
||||
else
|
||||
echo "File ${fdtdir}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${vendor}/${fdtfile}"; then
|
||||
setenv fdtdir "${deffdt_dir}/${vendor}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${vendor}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${fdtfile}"; then
|
||||
setenv fdtdir "${deffdt_dir}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${vendor}/${deffdt_file}"; then
|
||||
setenv fdtdir "${deffdt_dir}/${vendor}"
|
||||
setenv fdtfile "${deffdt_file}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${vendor}/${deffdt_file} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${deffdt_file}"; then
|
||||
setenv fdtdir "${deffdt_dir}"
|
||||
setenv fdtfile "${deffdt_file}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${deffdt_file} does not exists"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=ttyS0,115200 console=tty1"; fi
|
||||
if test "${console}" = "serial"; then setenv consoleargs "console=ttyS0,115200"; fi
|
||||
if test "${bootlogo}" = "true"; then
|
||||
@@ -41,11 +81,11 @@ setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs
|
||||
|
||||
if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory"; fi
|
||||
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtb/${fdtfile}
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${fdtdir}/${fdtfile}
|
||||
fdt addr ${fdt_addr_r}
|
||||
fdt resize 65536
|
||||
for overlay_file in ${overlays}; do
|
||||
if load ${devtype} ${devnum} ${load_addr} ${prefix}dtb/allwinner/overlay/${overlay_prefix}-${overlay_file}.dtbo; then
|
||||
if load ${devtype} ${devnum} ${load_addr} ${fdtdir}/overlay/${overlay_prefix}-${overlay_file}.dtbo; then
|
||||
echo "Applying kernel provided DT overlay ${overlay_prefix}-${overlay_file}.dtbo"
|
||||
fdt apply ${load_addr} || setenv overlay_error "true"
|
||||
fi
|
||||
@@ -58,9 +98,9 @@ for overlay_file in ${user_overlays}; do
|
||||
done
|
||||
if test "${overlay_error}" = "true"; then
|
||||
echo "Error applying DT overlays, restoring original DT"
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtb/${fdtfile}
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${fdtdir}/${fdtfile}
|
||||
else
|
||||
if load ${devtype} ${devnum} ${load_addr} ${prefix}dtb/allwinner/overlay/${overlay_prefix}-fixup.scr; then
|
||||
if load ${devtype} ${devnum} ${load_addr} ${fdtdir}/overlay/${overlay_prefix}-fixup.scr; then
|
||||
echo "Applying kernel provided DT fixup script (${overlay_prefix}-fixup.scr)"
|
||||
source ${load_addr}
|
||||
fi
|
||||
|
||||
@@ -17,6 +17,15 @@ setenv devnum "0"
|
||||
setenv rootdev "/dev/mmcblk${devnum}p1"
|
||||
setenv earlycon "off"
|
||||
|
||||
# Remember the default u-boot fdtfile
|
||||
setenv deffdt_file ${fdtfile}
|
||||
|
||||
# Remember the default u-boot fdtdir
|
||||
setenv deffdt_dir "${prefix}dtb"
|
||||
if test "$fdtdir" = ""; then setenv fdtdir "${deffdt_dir}";fi
|
||||
|
||||
setenv vendor "allwinner"
|
||||
|
||||
# Print boot source
|
||||
itest.b *0x28 == 0x00 && echo "U-boot loaded from SD"
|
||||
itest.b *0x28 == 0x01 && echo "U-boot loaded from NAND"
|
||||
@@ -31,13 +40,42 @@ if test "${devtype}" = "mmc"; then
|
||||
setenv rootdev "/dev/mmcblk${mmc_bootdev}p1"
|
||||
fi
|
||||
|
||||
echo "Boot script loaded from ${devtype}"
|
||||
|
||||
if test -e ${devtype} ${devnum} ${prefix}armbianEnv.txt; then
|
||||
load ${devtype} ${devnum} ${load_addr} ${prefix}armbianEnv.txt
|
||||
env import -t ${load_addr} ${filesize}
|
||||
fi
|
||||
|
||||
# In this shell, we can only check the existence of the file.
|
||||
# Make a check of reasonable ways to find the dtb file.
|
||||
# Set the true value of the paths.
|
||||
if test -e ${devtype} ${devnum} "${fdtdir}/${fdtfile}"; then
|
||||
:
|
||||
else
|
||||
echo "File ${fdtdir}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${vendor}/${fdtfile}"; then
|
||||
setenv fdtdir "${deffdt_dir}/${vendor}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${vendor}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${fdtfile}"; then
|
||||
setenv fdtdir "${deffdt_dir}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${fdtfile} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${vendor}/${deffdt_file}"; then
|
||||
setenv fdtdir "${deffdt_dir}/${vendor}"
|
||||
setenv fdtfile "${deffdt_file}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${vendor}/${deffdt_file} does not exists"
|
||||
if test -e ${devtype} ${devnum} "${deffdt_dir}/${deffdt_file}"; then
|
||||
setenv fdtdir "${deffdt_dir}"
|
||||
setenv fdtfile "${deffdt_file}"
|
||||
else
|
||||
echo "File ${deffdt_dir}/${deffdt_file} does not exists"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "${console}" = "display"; then setenv consoleargs "console=tty1"; fi
|
||||
if test "${console}" = "serial"; then setenv consoleargs "console=ttyS0,115200"; fi
|
||||
if test "${console}" = "both"; then setenv consoleargs "console=ttyS0,115200 console=tty1"; fi
|
||||
@@ -50,7 +88,10 @@ fi
|
||||
|
||||
setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} hdmi.audio=EDID:0 disp.screen0_output_mode=${disp_mode} consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ubootsource=${devtype} usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}"
|
||||
|
||||
if test "${disp_mem_reserves}" = "off"; then setenv bootargs "${bootargs} sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_fb_mem_reserve=16"; fi
|
||||
if test "${disp_mem_reserves}" = "off"; then
|
||||
setenv bootargs "${bootargs} sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_fb_mem_reserve=16"
|
||||
fi
|
||||
|
||||
if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=memory"; fi
|
||||
|
||||
load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}uInitrd
|
||||
@@ -58,11 +99,13 @@ load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}zImage
|
||||
|
||||
if test -e ${devtype} ${devnum} "${prefix}.next"; then
|
||||
echo "Found mainline kernel configuration"
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtb/${fdtfile}
|
||||
if load ${devtype} ${devnum} ${fdt_addr_r} ${fdtdir}/${fdtfile}; then
|
||||
echo "Load fdt: ${fdtdir}/${fdtfile}"
|
||||
fi
|
||||
fdt addr ${fdt_addr_r}
|
||||
fdt resize 65536
|
||||
for overlay_file in ${overlays}; do
|
||||
if load ${devtype} ${devnum} ${load_addr} ${prefix}dtb/overlay/${overlay_prefix}-${overlay_file}.dtbo; then
|
||||
if load ${devtype} ${devnum} ${load_addr} ${fdtdir}/overlay/${overlay_prefix}-${overlay_file}.dtbo; then
|
||||
echo "Applying kernel provided DT overlay ${overlay_prefix}-${overlay_file}.dtbo"
|
||||
fdt apply ${load_addr} || setenv overlay_error "true"
|
||||
fi
|
||||
@@ -75,9 +118,9 @@ if test -e ${devtype} ${devnum} "${prefix}.next"; then
|
||||
done
|
||||
if test "${overlay_error}" = "true"; then
|
||||
echo "Error applying DT overlays, restoring original DT"
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtb/${fdtfile}
|
||||
load ${devtype} ${devnum} ${fdt_addr_r} ${fdtdir}/${fdtfile}
|
||||
else
|
||||
if load ${devtype} ${devnum} ${load_addr} ${prefix}dtb/overlay/${overlay_prefix}-fixup.scr; then
|
||||
if load ${devtype} ${devnum} ${load_addr} ${fdtdir}/overlay/${overlay_prefix}-fixup.scr; then
|
||||
echo "Applying kernel provided DT fixup script (${overlay_prefix}-fixup.scr)"
|
||||
source ${load_addr}
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user