diff --git a/Create-DevTerm-R01-OS-image-from-scratch.md b/Create-DevTerm-R01-OS-image-from-scratch.md new file mode 100644 index 0000000..fd495cd --- /dev/null +++ b/Create-DevTerm-R01-OS-image-from-scratch.md @@ -0,0 +1,400 @@ + +# Before start +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 + + +# Prepare + +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` + + +# Bootloader + +### reference doc: +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:** + +![Image 2022-04-11 112248](Assets/Image%202022-04-11%20112248.png) + +otherwises, the boot will hang + + +## u-boot.toc1 +[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 + +![Image 2022-04-10 192110](Assets/Image%202022-04-10%20192110.png) + +# Disk partition prepare + +## old fedora image fdisk partition +``` +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 +``` + + +## create disk image file + +### create image file with dd +``` +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 + + +# Download ubuntu riscv image for rootfs + +https://wiki.ubuntu.com/RISC-V + +https://cdimage.ubuntu.com/releases/21.04/release/ + +https://cdimage.ubuntu.com/releases/21.04/release/ubuntu-21.04-preinstalled-server-riscv64+unmatched.img.xz + +## take rootfs of ubuntu out +``` +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 + + + +## prebuilt files + +### boot partition + + +#### ubuntu_2104_devterm_d1_boot.tar.bz2 +``` +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 +``` + +#### ubuntu_2104_devterm_d1_EFI.tar.bz2 + +https://mega.nz/file/kNUBRBIB#NsPzKTDWbfBSTth7-eVz9gPjeaEdYnP7PfuYGz28cOk + +**extlinux.conf is the file actually do the boot configuration** + +# How to compile kernel + +## get kernel source +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 +## get toolchain +https://github.com/cuu/toolchain-thead-glibc +download toolchain + +## simple step for compiling kernel + +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/ + +# Make alpha os image + +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 + +``` + +## chroot part +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 . + +### upgrade to devel +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 +``` + +### add cpi user +``` +useradd -m cpi + +#add into groups +usermod -a -G adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,lxd,pulse,pulse-access cpi +``` +### twm stuff + +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 + +``` + +### xorg fbdev fix +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 +``` + +### reduce time of boot +``` +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 +``` + +### faster login +``` +All scripts in /etc/update-motd.d/ transferred to other place or just deleted them all +``` + +### Install devterm related package +``` +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 +``` + +## get out chroot + +``` +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 + +``` + +# Final part + +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 + + +