-
Notifications
You must be signed in to change notification settings - Fork 78
Create DevTerm R01 OS image from scratch
Our system image is modified based on fedora wiki
The main thing is to replace the root fs and kernel files
Some linux experience is required to handle every possible situation
there are some discrepancies with the final system image
So this document is more suitable for the guidance of the d1 system image
a ubuntu linux system, like ubuntu 21.04
install riscv64 gcc
sudo apt install gcc-11-riscv64-linux-gnu binutils-riscv64-linux-gnu
install qemu static for chroot
sudo apt install qemu-user-static
https://fedoraproject.org/wiki/Architectures/RISC-V/Allwinner
git clone https://github.com/smaeul/sun20i_d1_spl
pushd sun20i_d1_spl
git checkout origin/mainline
make CROSS_COMPILE=riscv64-linux-gnu- p=sun20iw1p1 mmc
popd
pushd sun20i_d1_spl
sudo dd if=nboot/boot0_sdcard_sun20iw1p1.bin of=/dev/sdX bs=512 seek=16
git clone https://github.com/tekkamanninja/opensbi -b allwinner_d1 pushd opensbi CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic FW_PIC=y BUILD_INFO=y make popd
git clone https://github.com/tekkamanninja/u-boot -b allwinner_d1
pushd u-boot
make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv nezha_defconfig
make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv menuconfig
make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv u-boot.bin u-boot.dtb
popd
in menuconfig, there is an import option must be selected:

otherwises, the boot will hang
[opensbi] file = fw_dynamic.bin addr = 0x40000000 [dtb] file = u-boot.dtb addr = 0x44000000 [u-boot] file = u-boot.bin addr = 0x4a000000
pushd u-boot
cp ${PATH_TO_TOC1_CFG}/toc1.cfg ${PATH_TO_OPENSBI}/fw_dynamic.bin .
tools/mkimage -T sunxi_toc1 -d toc1.cfg u-boot.toc1
popd
pushd u-boot sudo dd if=u-boot.toc1 of=/dev/sdX bs=512 seek=32800

Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xda568ce2
Device Boot Start End Sectors Size Id Type
fedora-riscv64-d1-developer-xfce-rawhide-Rawhide-20211124-132603.n.0-sda.raw.img2 69632 319487 249856 122M c W95 FAT32 (LBA)
fedora-riscv64-d1-developer-xfce-rawhide-Rawhide-20211124-132603.n.0-sda.raw.img3 * 319488 1320959 1001472 489M 83 Linux
fedora-riscv64-d1-developer-xfce-rawhide-Rawhide-20211124-132603.n.0-sda.raw.img4 1320960 25319423 23998464 11.5G 83 Linux
MEGA=16777216
dd if=/dev/zero bs=$MEGA count=1024 of=disk.img
echo -e "o\nn\np\n2\n69632\n319487\nn\np\n3\n319488\n1320959\nn\np\n4\n1320960\n\n\nt\n2\nc\na\n3\n\nw" | fdisk disk.img
fdisk -l disk.img
sudo losetup --show -f -P disk.img #/dev/loop1 sudo mkfs.vfat /dev/loop1p2 sudo mkfs.ext4 /dev/loop1p3 sudo mkfs.ext4 /dev/loop1p4
https://wiki.ubuntu.com/RISC-V
https://cdimage.ubuntu.com/releases/21.04/release/
sudo losetup --show -f -P ubuntu-21.04-preinstalled-server-riscv64+unmatched.img # eg: /dev/loop1,depends on your linux system
sudo mount /dev/loop1p1 /mnt/p1
sudo tar cpjfv ubuntu-21.04-preinstalled-server-riscv64+unmatched_rootfs.tar.bz2 -C /mnt/p1/ .
sudo umount /mnt/p1
sudo losetup -D /dev/loop1 #dettach,release /dev/loop1
download link:
https://mega.nz/file/IQFlWZKL#_ERlz3GXoUgxsIoaLHK8oQ2A6SNFcHhZpS2tF3N6RaQ
https://mega.nz/file/IIlAHKST#PP8feOr6tHxdbD-Zoyj64G4TfG7HG_1s3VHasisP6h0
https://mega.nz/file/NEsV1SRQ#FexV7wJhiUQKLcfBol4bB5m8UsX1O5qWet8geONclY4
https://mega.nz/file/YJUjiKKb#nrxH6BDvyGjpNSyZEzbRqbHk9ed9RE7jcuOPbTdximM
included files
├── board.dtb
├── **boot**
│ └── uEnv.txt
├── config-5.4.61
├── **efi**
├── **extlinux**
│ ├── extlinux.conf
│ └── extlinux.conf.cpi.bak
├── **grub2**
│ └── **themes**
│ └── **system**
│ └── **background.png**
├── grub.cfg
├── System.map-5.4.61
├── **uEnv.txt** -\> boot/uEnv.txt
└── vmlinuz-5.4.61
https://mega.nz/file/kNUBRBIB#NsPzKTDWbfBSTth7-eVz9gPjeaEdYnP7PfuYGz28cOk
extlinux.conf is the file actually do the boot configuration
https://github.com/cuu/last_linux-5.4.git
it is a mirror kernel code from tina_d1_h of all winner with all patched for devterm d1
https://github.com/cuu/toolchain-thead-glibc download toolchain
extract and put toolchain in any folder you like
then edit m.sh in last_linux-5.4
set correct path of toolchain for PATH
export PATH=/data/tina_d1_h/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/:$PATH
to be
export PATH=/wherever_you_put_toolchain/riscv64-glibc-gcc-thead_20200702/bin/:$PATH
then simply run ./m.sh to compile kernel
we just simple use the prebuit toolchain from all-winner to compile the patched kernel code based on all-winner tina for devterm_d1
and we have to ,because allwinner prebuilt toolchain has the neccessary custom opcode for the kernel of d1
kernel patch url: https://github.com/clockworkpi/DevTerm/tree/main/Code/patch/d1
to get original tina code from allwinner ,visit https://open.allwinnertech.com/
required file list:
- ubuntu_2104_devterm_d1_EFI.tar.bz2
- ubuntu_2104_devterm_d1_boot.tar.bz2
- ubuntu-21.04-preinstalled-server-riscv64+unmatched_rootfs.tar.bz2
- boot0_sdcard_sun20iw1p1.bin
- u-boot.toc1
- disk.img with all partitions formatted
sudo losetup --show -f -P disk.img ## assume we will have /dev/loop1
sudo dd if=boot0_sdcard_sun20iw1p1.bin of=/dev/loop1 bs=512 seek=16
sudo dd if=u-boot.toc1 of=/dev/loop1 bs=512 seek=32800
sudo mount /dev/loop1p2 /mnt/p2
sudo mount /dev/loop1p3 /mnt/p3
sudo mount /dev/loop1p4 /mnt/p4
sudo tar xpjfv ubuntu_2104_devterm_d1_EFI.tar.bz2 -C /mnt/p2
sudo tar xpjfv ubuntu_2104_devterm_d1_boot.tar.bz2 -C /mnt/p3
sudo tar xpjfv ubuntu-21.04-preinstalled-server-riscv64+unmatched_rootfs.tar.bz2 -C /mnt/p4
sudo mount /dev/loop1p3 /mnt/p4/boot cd /mnt/p4
sudo mount --bind /dev dev/ sudo mount --bind /sys sys/ sudo mount --bind /proc proc/ sudo mount --bind /dev/pts dev/pts sudo chroot .
now we are in chroot
touch /etc/cloud/cloud-init.disabled
apt-get update && apt-get purge needrestart
then edit /etc/apt/source.list, replace all hirsute to devel
then
apt update
apt-get dist-upgrade
wait a long time until upgrade done(or retry if failed,it is neccessary for having a newer xorg/mesa in riscv to display)
after upgrade
apt update
apt install mesa-utils libgl1-mesa-glx libglx-mesa0 libgles2-mesa libegl-mesa0
apt install -y xterm cmus alsamixergui qutebrowser elinks vim emacs tilde bc gnuplot dosbox chocolate-doom gimp xfig xpdf xaos x11-apps gkrellm imagemagick inkscape
apt remove multipath-tools
useradd -m cpi
#add into groups
usermod -a -G adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,lxd,pulse,pulse-access cpi
d1 use twm as default window manager for low resource usage
wget https://github.com/clockworkpi/DevTerm/blob/main/Code/R01/d1_twm.tar.bz2?raw=true
tar xpjfv d1_twm.tar.bz2 -C /home/cpi
chown -R cpi:cpi /home/cpi
rotate Xorg
ubuntu@ubuntu:~$ cat /etc/X11/xorg.conf.d/10-d1.conf
Section "Device"
Identifier "FBDEV"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
Option "Rotate" "cw"
Option "SwapbuffersWait" "true"
EndSection
Section "Screen"
Identifier "Screen0"
Device "FBDEV"
DefaultDepth 24
Subsection "Display"
Depth 16
Modes "1280x480" "480x1280"
EndSubsection
Subsection "Display"
Depth 24
Modes "1280x480" "480x1280"
EndSubsection
EndSection
sudo systemctl mask apt-daily.service apt-daily-upgrade.service
sudo systemctl disable apt-daily.service apt-daily-upgrade.service
sudo systemctl disable apt-daily.timer apt-daily-upgrade.timer
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl disable systemd-random-seed.service
sudo systemctl disable e2scrub_reap.service
sudo systemctl disable systemd-networkd-wait-online.service
sudo systemctl disable lvm2-monitor.service
sudo systemctl disable snapd.seeded.service
sudo systemctl disable pppd-dns.service
sudo systemctl disable avahi-daemon.service
sudo systemctl disable ModemManager.service
sudo systemctl disable apport.service
sudo systemctl mask apport.service
sudo systemctl disable accounts-daemon.service
sudo systemctl mask accounts-daemon.service
sudo systemctl disable udisks2.service
All scripts in /etc/update-motd.d/ transferred to other place or just deleted them all
wget -O - https://raw.githubusercontent.com/clockworkpi/apt/main/debian/KEY.gpg | sudo apt-key add -
echo "deb https://raw.githubusercontent.com/clockworkpi/apt/main/debian/ stable main" | sudo tee /etc/apt/sources.list.d/clockworkpi.list
apt update
apt install devterm-audio-patch devterm-backlight-cpi devterm-fan-temp-daemon-rpi devterm-keyboard-firmware devterm-thermal-printer devterm-thermal-printer-cups devterm-wiringpi-cpi
exit
cd
sudo umount /mnt/p4/dev/pts
sudo umount /mnt/p4/dev/
sudo umount /mnt/p4/proc
sudo umount /mnt/p4/sys
sudo umount /mnt/p4/boot
sudo umount /mnt/p3
sudo umount /mnt/p2
sudo umount /mnt/p4
sudo losetup -D /dev/loop1
now we have a chroot edited os image file disk.img in 16GB with ubuntu devel branch root fs
you can still use
sudo losetup --show -f -P disk.img
sudo gparted /dev/loop1
to shrink the disk size to be like 8G or less to fit your sd card
then dd it into sd card