Created
May 29, 2025 07:21
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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