amlbian: Support making dtb-deb [1/1]
PD#SWPL-106598
Problem:
Support making dtb-deb.
Solution:
Support making dtb-deb.
Verify:
local
Change-Id: I3cb8e8d5666f073468e55e4a4e8862f12e60b15f
Signed-off-by: yi.liu <yi.liu@amlogic.com>
diff --git a/scripts/package/builddeb b/scripts/package/builddeb
index 91a502b..3a1b2ef 100755
--- a/scripts/package/builddeb
+++ b/scripts/package/builddeb
@@ -48,8 +48,68 @@
# in case we build in a setuid/setgid directory
chmod -R ug-s "$pdir"
+ # Create preinstall and post install script to remove dtb
+ if [[ "$1" == *dtb* ]]; then
+ cat >> $pdir/DEBIAN/preinst <<-EOF
+ #!/bin/bash
+ EOF
+
+ cat >> $pdir/DEBIAN/postinst <<-EOF
+ #!/bin/bash
+ cd /boot
+ ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb
+ cd - > /dev/null
+ echo dtb-$version > /boot/.dtb.tmp
+ exit 0
+ EOF
+ chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst
+ fi
+
+ # Create postinst prerm scripts for headers
+ if [[ "$1" == *headers* ]]; then
+ cat >> $pdir/DEBIAN/postinst <<-EOF
+ #!/bin/bash
+ cd /usr/src/linux-headers-$version
+ echo "Compiling headers - please wait ..."
+ find -type f -exec touch {} +
+
+ pwd
+ gcc -v
+
+ echo "Compiling headers - make -j8 -s scripts > /dev/null 2>&1..."
+ #make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts > /dev/null 2>&1 || exit 1
+ # Guoping changed to J8 avoid using too many jobs for building in build server
+ #make -j8-s scripts > /dev/null 2>&1 || exit 1
+ make -j8 -s scripts 2>&1 > log.txt || exit 1
+
+ echo "Compiling headers - make -j8 -s M=scripts/mod/ > /dev/null 2>&1..."
+ #make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ > /dev/null 2>&1 || exit 1
+ # Guoping changed to J8 avoid using too many jobs for building in build server
+ #make -j8 -s M=scripts/mod/ > /dev/null 2>&1 || exit 1
+ make -j8 -s M=scripts/mod/ 2>&1 > log.txt || exit 1
+
+ echo "Compiling headers - Done ..."
+
+ #exit 0
+ EOF
+
+ cat >> $pdir/DEBIAN/prerm <<-EOF
+ cd /usr/src/linux-headers-$version
+ rm -rf scripts .config.old
+ EOF
+
+ chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm
+ fi
+
# Create the package
+ echo "Building package: $pdir $pname.deb"
dpkg-gencontrol -p$pname -P"$pdir"
+
+ ## For HOST jammy, dpkg-deb default use zstd for compress,
+ # it will cause failed log "uses unknown compression for member 'control.tar.zst', giving up"
+ # dpkg -i need xz compress, but HOST jammy default use zst, so de-compress the debs and re-compress to xz
+ # HOST jammy: control.tar.zst data.tar.zst debian-binary
+ # HOST focal : control.tar.xz data.tar.xz debian-binary
dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" ..
}
@@ -62,6 +122,7 @@
cd $srctree
find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
find include scripts -type f -o -type l
+ find security/*/include -type f
find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
) > debian/hdrsrcfiles
@@ -80,10 +141,13 @@
destdir=$pdir/usr/src/linux-headers-$version
mkdir -p $destdir
+ (cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch)
tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir
tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir
rm -f debian/hdrsrcfiles debian/hdrobjfiles
+ (cd $destdir; export sub_make_done=0; make M=scripts clean;)
+
# copy .config manually to be where it's expected to be
cp $KCONFIG_CONFIG $destdir/.config
@@ -109,9 +173,15 @@
version=$KERNELRELEASE
tmpdir=debian/linux-image
dbg_dir=debian/linux-image-dbg
-packagename=linux-image-$version
+dtb_dir=debian/linux-dtb
+packagename=linux-image"$LOCAL_VERSION"
+dtb_packagename=linux-dtb"$LOCAL_VERSION"
dbg_packagename=$packagename-dbg
+
+echo "Building packagename: $packagename.deb"
+echo "Building dtb_packagename: $dtb_packagename.deb"
+
if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux-$version
fi
@@ -120,6 +190,15 @@
# XXX: have each arch Makefile export a variable of the canonical image install
# path instead
case $ARCH in
+aarch64|arm64)
+ image_name=Image
+ installed_image_path="boot/vmlinuz-$version"
+
+ ;;
+arm*)
+ image_name=zImage
+ installed_image_path="boot/vmlinuz-$version"
+ ;;
um)
installed_image_path="usr/bin/linux-$version"
;;
@@ -133,7 +212,9 @@
BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes)
# Setup the directory structure
-rm -rf "$tmpdir" "$dbg_dir" debian/files
+rm -rf "$tmpdir" "$dbg_dir" "$dtb_dir" debian/files
+mkdir -m 755 -p "$dtb_dir/DEBIAN"
+mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot"
@@ -147,12 +228,16 @@
cp System.map "$tmpdir/boot/System.map-$version"
cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
fi
-cp "$($MAKE -s -f $srctree/Makefile image_name)" "$tmpdir/$installed_image_path"
+cp arch/$ARCH/boot/Image "$tmpdir/$installed_image_path"
if is_enabled CONFIG_OF_EARLY_FLATTREE; then
# Only some architectures with OF support have this target
if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then
- $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
+ if [ -n "$DTBS" ]; then
+ $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install dtb-y="$DTBS"
+ else
+ $MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
+ fi
fi
fi
@@ -183,6 +268,14 @@
fi
fi
+if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then
+ if [ -n "$DTBS" ]; then
+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install dtb-y="$DTBS"
+ else
+ INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install
+ fi
+fi
+
# Install the maintainer scripts
# Note: hook scripts under /etc/kernel are also executed by official Debian
# kernel packages, as well as kernel packages built using make-kpkg.
@@ -192,7 +285,7 @@
for script in postinst postrm preinst prerm ; do
mkdir -p "$tmpdir$debhookdir/$script.d"
cat <<EOF > "$tmpdir/DEBIAN/$script"
-#!/bin/sh
+#!/bin/bash
set -e
@@ -208,6 +301,55 @@
chmod 755 "$tmpdir/DEBIAN/$script"
done
+
+##
+## Create sym link to kernel image
+##
+sed -e "s/set -e//g" -i $tmpdir/DEBIAN/postinst
+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst
+cat >> $tmpdir/DEBIAN/postinst <<EOT
+if [ "\$(grep nand /proc/partitions)" != "" ] && [ "\$(grep mmc /proc/partitions)" = "" ]; then
+ mkimage -A arm -O linux -T kernel -C none -a "0x40008000" -e "0x40008000" -n "Linux kernel" -d /$installed_image_path /boot/uImage > /dev/null 2>&1
+ cp /boot/uImage /tmp/uImage
+ sync
+ mountpoint -q /boot || mount /boot
+ cp /tmp/uImage /boot/uImage
+ rm -f /$installed_image_path
+else
+ ln -sf $(basename $installed_image_path) /boot/Image > /dev/null 2>&1 || mv /$installed_image_path /boot/Image
+fi
+exit 0
+EOT
+
+##
+## FAT install workaround
+##
+sed -e "s/set -e//g" -i $tmpdir/DEBIAN/preinst
+sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst
+cat >> $tmpdir/DEBIAN/preinst <<EOT
+# exit if we are running chroot
+if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi
+
+check_and_unmount (){
+ boot_device=\$(mountpoint -d /boot)
+
+ for file in /dev/* ; do
+ CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file))
+ if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then
+ boot_partition=\$file
+ break
+ fi
+ done
+
+ bootfstype=\$(blkid -s TYPE -o value \$boot_partition)
+ if [ "\$bootfstype" = "vfat" ]; then
+ rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/$image_name /boot/uImage
+ fi
+}
+mountpoint -q /boot && check_and_unmount
+EOT
+echo "exit 0" >> $tmpdir/DEBIAN/preinst
+
if [ "$ARCH" != "um" ]; then
if is_enabled CONFIG_MODULES; then
deploy_kernel_headers debian/linux-headers
@@ -216,6 +358,8 @@
deploy_libc_headers debian/linux-libc-dev
create_package linux-libc-dev debian/linux-libc-dev
+
+ create_package "$dtb_packagename" "$dtb_dir" "dtb"
fi
create_package "$packagename" "$tmpdir"
diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
index 32d528a..85af3e2 100755
--- a/scripts/package/mkdebian
+++ b/scripts/package/mkdebian
@@ -94,6 +94,8 @@
packageversion=$version-$revision
fi
sourcename=$KDEB_SOURCENAME
+dtb_packagename=linux-dtb$LOCAL_VERSION
+kernel_headers_packagename=linux-headers$LOCAL_VERSION
if [ "$ARCH" = "um" ] ; then
packagename=user-mode-linux
@@ -178,12 +180,19 @@
Build-Depends: bc, rsync, kmod, cpio, bison, flex | flex:native $extra_build_depends
Homepage: https://www.kernel.org/
-Package: $packagename-$version
+Package: $packagename$LOCAL_VERSION
Architecture: $debarch
Description: Linux kernel, version $version
This package contains the Linux kernel, modules and corresponding other
files, version: $version.
+Package: $kernel_headers_packagename
+Architecture: $debarch
+Description: Linux kernel headers for $version on $debarch
+ This package provides kernel header files for $version on $debarch
+ .
+ This is useful for people who need to build external modules
+
Package: linux-libc-dev
Section: devel
Provides: linux-kernel-headers
@@ -192,6 +201,11 @@
This package provides userspaces headers from the Linux kernel. These headers
are used by the installed headers for GNU glibc and other system libraries.
Multi-Arch: same
+
+Package: $dtb_packagename
+Architecture: $debarch
+Description: Linux DTB, version $version
+ This package contains device blobs from the Linux kernel, version $version
EOF
if is_enabled CONFIG_MODULES; then
@@ -209,7 +223,7 @@
if is_enabled CONFIG_DEBUG_INFO; then
cat <<EOF >> debian/control
-Package: linux-image-$version-dbg
+Package: linux-image$LOCAL_VERSION-dbg
Section: debug
Architecture: $debarch
Description: Linux kernel debugging symbols for $version