mirror of
https://github.com/easytarget/MQ-Pro-IO.git
synced 2025-09-11 09:45:53 +01:00
Source updates may break building older releases (eg kernel#48 source breaks dtb includes for kernel#41) * Only build latest * offer to update sources
103 lines
2.8 KiB
Bash
Executable File
103 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Takes a list of dts files for the specified architecture and emits appropriate compiled dtb files for use in customised deviceTree setups.
|
|
#
|
|
|
|
dtc=/usr/bin/dtc
|
|
|
|
cdir=`pwd`
|
|
versions=`dpkg --list | grep linux-image-[0-9].* | cut -d" " -s -f 3 | sed s/^linux-image-// | sort -V`
|
|
current=`/usr/bin/uname -r`
|
|
|
|
read -p "Update source tree (may be slow)? [y/N]: " choice
|
|
if [ ! -z "$choice" ] ; then
|
|
if [ "$choice" == 'y' ] ; then
|
|
cd ../source
|
|
apt source linux-riscv
|
|
fi
|
|
fi
|
|
|
|
echo -e "\nAvailable kernels:"
|
|
option=0
|
|
declare -a klist
|
|
for ver in $versions ; do
|
|
option=$((option+1))
|
|
klist[$option]=$ver
|
|
echo -n " [$option] $ver"
|
|
if [ $ver == $current ] ; then
|
|
echo " - currently running kernel"
|
|
else
|
|
echo
|
|
fi
|
|
done
|
|
|
|
read -p "Which kernel to build? [$option]: " choice
|
|
if [ -z "$choice" ] ; then
|
|
choice=$option
|
|
else
|
|
echo
|
|
echo "WARNING: building older versions may fail if the source tree includes have changed with more recent kernels"
|
|
echo
|
|
fi
|
|
|
|
revision=${klist[$choice]}
|
|
if [ -z "$revision" ] ; then
|
|
echo "No valid kernel selected, exiting."
|
|
exit
|
|
fi
|
|
|
|
echo -ne "\nBuilding for kernel: $revision"
|
|
echo
|
|
|
|
# Ensure sure build root exists and is clean
|
|
if [ -d "$cdir/$revision" ]; then
|
|
echo "Cleaning existing $revision build directory"
|
|
rm -f $revision/*.dts $revision/*.dtsi $revision/*.dtb
|
|
else
|
|
echo "Creating new build directory: $revision"
|
|
mkdir $revision
|
|
fi
|
|
|
|
# Compile
|
|
cd $cdir
|
|
echo -e "\nCompiling against headers for $revision"
|
|
echo "Precompiling all includes in build root into $revision build directory"
|
|
|
|
for file in `ls *.dtsi`; do
|
|
echo " $file -> $revision/${file##*/}"
|
|
cpp -I/usr/src/linux-headers-$revision/include/ -nostdinc -undef -x assembler-with-cpp $file > $revision/${file##*/}
|
|
if [ ! -s "$revision/${file##*/}" ] ; then
|
|
rm "$revision/${file##*/}"
|
|
echo "**** ERROR ****"
|
|
echo "Precompile failed for include: $revision/${file##*/}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "Precompiling all sources in build root into $revision build directory"
|
|
for file in `ls *.dts`; do
|
|
echo " $file -> $revision/${file##*/}"
|
|
cpp -I/usr/src/linux-headers-$revision/include/ -nostdinc -undef -x assembler-with-cpp $file > $revision/${file##*/}
|
|
if [ ! -s "$revision/${file##*/}" ] ; then
|
|
rm "$revision/${file##*/}"
|
|
echo "**** ERROR ****"
|
|
echo "Precompile failed for source: $revision/${file##*/}"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "Compiling all device tree sources in $revision build directory"
|
|
cd $revision
|
|
for file in `ls *.dts`; do
|
|
out=${file/.dts/.dtb}
|
|
echo " $revision/$file -> $revision/$out"
|
|
$dtc $file > $out
|
|
if [ ! -s "$out" ] ; then
|
|
rm "$out"
|
|
echo "**** ERROR ****"
|
|
echo "Compile failed for: $out"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo -e "\nSuccess. Consider running 'flash_latest.sh' to make permanent (see docs)"
|