Skip to content

Instantly share code, notes, and snippets.

@jglathe
Created May 29, 2025 07:21
Show Gist options
  • Save jglathe/ab20237c4516ed15a9df4d014d370bce to your computer and use it in GitHub Desktop.
Save jglathe/ab20237c4516ed15a9df4d014d370bce to your computer and use it in GitHub Desktop.
Scratch board with commands I use to create a pre-installed desktop bootable image for sc8280xp/x1e80100 devices.
lsblk -f
sudo mount /dev/sda2 /mnt/
sudo debootstrap --arch arm64 lunar /mnt http://ports.ubuntu.com/ubuntu-ports
sudo mkdir -p /mnt/boot/EFI
sudo mount /dev/sda1 /mnt/boot/EFI/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
sudo chroot /mnt/
root-passwd
FsecuritY!
#inside target rootfs
apt-get update
apt-get full-upgrade
apt-get remove flash-kernel
apt-get
#if not already there
apt-get install grub2-common efivar grub-efi
apt-get install initramfs-tools
#copy firmwares
#remoteproc remoteproc0
qcom/sc8280xp/MICROSOFT/DEVKIT23/qcadsp8280.mbn
#remoteproc remoteproc1
qcom/sc8280xp/MICROSOFT/DEVKIT23/qccdsp8280.mbn
#msm_dpu ae01000.display-controller
qcom/a660_sqe.fw
qcom/a690_gmu.bin
qcom/sc8280xp/MICROSOFT/DEVKIT23/qcdxkmsuc8280.mbn
#rest is in linux-firmware
#copy kernel, config, dtb
#copy modules
ln -s vmlinuz-6.5.0-rc5+ vmlinuz
update-initramfs -c -k 6.5.0-rc5+
ln -s initrd.img-6.5.0-rc5+ initrd
exit
for i in /mnt/dev /mnt/dev/pts /mnt/proc /mnt/sys /mnt/run; do sudo umount -l $i; done
#image handling with loop
#find the first free one
loopf="$(sudo losetup -f)"
sudo losetup "$loopf" ./Ubuntu_Desktop_23.04_wdk2023.img
sudo partprobe "$loopf"
sudo mount "$loopf"p2 /mnt/
sudo mount "$loopf"p1 /mnt/boot/EFI/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
sudo chroot /mnt/
#... in chroot
exit
for i in /mnt/dev /mnt/dev/pts /mnt/proc /mnt/sys /mnt/run; do sudo umount -l $i; done
sudo umount "$loopf"p1
sudo umount "$loopf"p2
sudo losetup -d "$loopf"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# from the original raspi desktop image as shipped
image is mounted on /media/jglathe/writable
we are in the target directory Ubuntu_prepared_24.04_sc8280xp_rootfs/
sudo rsync -avE /media/jglathe/writable/ .
prepdir="/home/jglathe/Ubuntu_prepared_24.04_sc8280xp_rootfs"
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i $prepdir/$i; done
sudo chroot $prepdir
# in the rootfs
apt-get update
#remove flash-kernel and raspi kernel
# apt-get purge flash-kernel
apt-get purge linux-*6*
apt-get purge *rpi*
apt-get purge *raspi*
rm -rf /boot/firmware/
#prepare mount point for uefi
mkdir /boot/efi
#do a full upgrade
apt-get full-upgrade
#install gparted, htop
apt-get install gparted htop
# delete machine-id
rm $(find / -name machine-id)
#copy over the "constant" part of additional setup
sudo cp etc/initramfs-tools/modules $prepdir/etc/initramfs-tools/modules
sudo cp etc/initramfs-tools/hooks/x1e-firmwares $prepdir/etc/initramfs-tools/hooks/
sudo cp etc/initramfs-tools/hooks/x1e001de-firmware $prepdir/etc/initramfs-tools/hooks/
sudo cp usr/lib/systemd/system/copy_firmware.service $prepdir/usr/lib/systemd/system/
sudo cp usr/local/bin/fetch_x1e001de-devkit_fw.sh $prepdir/usr/local/bin/
#sudo cp usr/local/bin/temperatures.sh $prepdir/usr/local/bin/
#sudo cp usr/bin/bootmac $prepdir/usr/bin/
#sudo cp var/spool/cron/crontabs/root $prepdir/var/spool/cron/crontabs/
#enable the copy_firmware.service inside rootfs
root@snapdragix:/# systemctl enable copy_firmware.service
#copy over /etc/fstab with the right content:
sudo cp etc/fstab $prepdir/etc/
#edit the labels for new system (root2410, BOOT2410)
#copy over /etc/default/grub with the (almost) right content:
sudo cp etc/default/grub $prepdir/etc/default/
#ensure these packages are installed (they are)
apt-get install alsa-ucm-conf protection-domain-mapper qrtr-tools
#done. exit the rootfs. The next steps need to be done with an image file that is partitioned with EFI start partition.
# exit
exit
for i in $prepdir/proc $prepdir/sys $prepdir/run $prepdir/dev/pts $prepdir/dev; do sudo umount -l $i; done
#create a raw file for a 16GB USB stick, a little smaller just in case
jglathe@snapdragix:~$ truncate -s 14830M Ubuntu_Desktop_24.10_x1e001dev_6.13rc.img
#mount as loop
loopf="$(sudo losetup -f)"
sudo losetup "$loopf" ./Ubuntu_Desktop_24.10_x1e001dev_6.13rc.img
#partition with gparted
jglathe@snapdragix:~$ sudo gparted "$loopf"
[Screenshot from 2025-01-05 17-03-20.png]
#mount the image file on /mnt
sudo mount "$loopf"p2 /mnt/
#copy over the prepared rootfs tree
sudo rsync -avE $prepdir/ /mnt/
#mount the EFI part of the image file on /mnt/boot/efi
sudo mount "$loopf"p1 /mnt/boot/efi/
#prepare for chroot
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
#chroot
sudo chroot /mnt/
#from outside the rootfs, copy over Kernel, initrd, config, dtb
jglathe@snapdragix:/boot$ sudo cp *-6.8.8+ /mnt/boot/
#inside the rootfs, remove the dtb, set up the dtb path
root@snapdragix:/boot# rm dtb-6.8.8+
root@snapdragix:/boot# mkdir -p dtbs/6.8.8+
#from outside the rootfs, copy over dtb again
jglathe@snapdragix:/boot$ sudo cp dtbs/6.8.8+/* /mnt/boot/dtbs/6.8.8+/
#inside the rootfs, set the symlinks you want
root@snapdragix:/boot# ln -s dtbs/6.8.8+/sc8280xp-microsoft-blackrock.dtb dtb-6.8.8+
#from outside the rootfs, copy over kernel modules
jglathe@snapdragix:~$ sudo mkdir -p /mnt/lib/modules/6.8.8+/
jglathe@snapdragix:~$ sudo cp -r /lib/modules/6.8.8+/* /mnt/lib/modules/6.8.8+/
#from inside rootfs, remove the links to build and source
root@snapdragix:/# rm /lib/modules/6.8.8+/build
root@snapdragix:/# rm /lib/modules/6.8.8+/source
#install grub
apt-get install grub2-common grub-efi
grub-install
#check that /etc/default/grub has the right content
#run update-grub
update-grub
#set GRUB_DISABLE_OS_PROBER=false in /etc/default/grub as shipping state
# run update-initramfs -u
update-initramfs -u -k all
# enable the firmware hook for initramfs
chmod +x /etc/initramfs-tools/hooks/wdk2023-firmware
#Done!
--------------------------------------------------------------------
exit
for i in /mnt/run /mnt/sys /mnt/proc /mnt/dev/pts /mnt/dev; do sudo umount -l $i; done
sudo umount "$loopf"p1
sudo umount "$loopf"p2
sudo losetup -d "$loopf"
#make a backup of the image file, took some work to create
jglathe@snapdragix:~$ cp Ubuntu_Desktop_23.04_wdk2023_6.5.0.img Ubuntu_Desktop_23.04_wdk2023_6.5.0.bak
#create and test img.xz
jglathe@snapdragix:~$ xz -vk9T0 Ubuntu_Desktop_23.04_wdk2023_6.5.0.img
jglathe@snapdragix:~$ xz -vt Ubuntu_Desktop_23.04_wdk2023_6.5.0.img.xz
--------------------------------------------------------------------
#mount script
loopf="$(sudo losetup -f)"
sudo losetup "$loopf" ./Ubuntu_Desktop_24.10_Acer_Swift_Go14.img
sudo partprobe "$loopf"
sudo mount "$loopf"p2 /mnt/
sudo mount "$loopf"p1 /mnt/boot/efi/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
--------------------------------------------------------------------
#umount script
for i in /mnt/run /mnt/sys /mnt/proc /mnt/dev/pts /mnt/dev; do sudo umount -l $i; done
sudo umount "$loopf"p1
sudo umount "$loopf"p2
sudo losetup -d "$loopf"
--------------------------------------------------------------------
nohup /usr/sbin/sshd -D &
--------------------------------------------------------------------
#Enable Volterra Linux on Snapdragon Dev Kit
#mount the relevant partitions of the drive
sudo mount /dev/sda16 /mnt/
sudo mount /dev/sda13 /mnt/boot/efi/
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt/$i; done
#chroot into it
sudo chroot /mnt/
# edit fstab
nano /etc/fstab
# identify by label (if unique enough or UUID)
LABEL=root613u / ext4 discard 0 1
UUID=766B-F921 /boot/efi vfat defaults 0 1
# change etc/flash-kernel/machine to Snapdragon Dev Kit
# add description to /etc/flash-kernel/db
Qualcomm Technologies, Inc. X1E001DE Snapdragon Devkit for Windows
# remove wdk2023-specific /etc/modprobe.d blacklist entry
# change to /boot
# purge allolder kernels before 6.13-rc4-2
# remove all symlinks and dtbs, set a new one for the devkit dtb
# remove any special hacks regarding grub custom boots (30_os-prober replace by original, 40_custom remove pop!OS entry)
# install kernel 6.13-rc4-2
# install grub boot loader
grub-install
#change to /boot
#check if a symlink fot the dtb is there, otherwise set one
ln -s /usr/lib/firmware/6.13-rc4-2-qcom-x1e/device-tree/qcom/x1e001de-devkit.dtb dtb-6.13-rc4-2-qcom-x1e
update-grub
# get the actual /etc/initramfs-tools/modules and /etc/initramfs-tools/hooks/x1e001de-firmware, enable the hook (chmod +x)
#create the firmware path, copy it over
mkdir -p qcom/x1e80100/Thundercomm/DEVKIT
# get /usr/lib/firmware/updates/qcom/ gen70500* files
# get /usr/lib/firmware/updates/qcom/x1e80100/Thundercomm/DEVKIT/ files
# this should better work
update-initramfs -u -k all
# change hostname to "angrybox"
# enable os-prober in /etc/default/grub
for i in /mnt/run /mnt/sys /mnt/proc /mnt/dev/pts /mnt/dev; do sudo umount -l $i; done
sudo umount /dev/sda13
sudo umount /dev/sda16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment