|
@@ -0,0 +1,471 @@
|
|
|
+
|
|
|
+# Before start
|
|
|
+Our system image is modified based on fedora wiki
|
|
|
+Mainly replace the kernel and rootfs
|
|
|
+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 R-01 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
|
|
|
+sudo apt install git
|
|
|
+sudo apt install make
|
|
|
+sudo apt install build-essential
|
|
|
+sudo apt install libfontconfig1
|
|
|
+sudo apt install ncurses-devel
|
|
|
+sudo apt install libncurses-dev
|
|
|
+sudo apt install build-essential
|
|
|
+sudo apt install flex bison
|
|
|
+sudo apt install python3-distutils
|
|
|
+sudo apt install swig
|
|
|
+sudo apt install python3-dev
|
|
|
+sudo apt install openssl
|
|
|
+sudo apt install libssl-dev
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+install qemu static for chroot
|
|
|
+
|
|
|
+`sudo apt install qemu-user-static`
|
|
|
+
|
|
|
+
|
|
|
+manually fix default compiler link:
|
|
|
+
|
|
|
+```
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-cpp-11 /usr/bin/riscv64-linux-gnu-cpp
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcc-nm-11 /usr/bin/riscv64-linux-gnu-gcc-nm
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcov-dump-11 /usr/bin/riscv64-linux-gnu-gcov-dump
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcc-11 /usr/bin/riscv64-linux-gnu-gcc
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcc-ranlib-11 /usr/bin/riscv64-linux-gnu-gcc-ranlib
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcov-tool-11 /usr/bin/riscv64-linux-gnu-gcov-tool
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcc-ar-11 /usr/bin/riscv64-linux-gnu-gcc-ar
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-gcov-11 /usr/bin/riscv64-linux-gnu-gcov
|
|
|
+sudo ln -s /usr/bin/riscv64-linux-gnu-lto-dump-11 /usr/bin/riscv64-linux-gnu-lto-dump
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+# 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:**
|
|
|
+
|
|
|
+ ![menuconfig](https://raw.githubusercontent.com/clockworkpi/DevTerm/main/Pictures/Image%202022-04-11%20112248.png)
|
|
|
+
|
|
|
+otherwises, the boot will hang
|
|
|
+
|
|
|
+
|
|
|
+## u-boot.toc1
|
|
|
+
|
|
|
+**toc1.cfg**
|
|
|
+
|
|
|
+```
|
|
|
+[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
|
|
|
+![boot ](https://raw.githubusercontent.com/clockworkpi/DevTerm/main/Pictures/Image%202022-04-10%20192110.png)
|
|
|
+
|
|
|
+
|
|
|
+# Disk partition prepare
|
|
|
+
|
|
|
+## Original 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 R-01
|
|
|
+## Official toolchain
|
|
|
+https://github.com/cuu/toolchain-thead-glibc #It's official allwinner toolchain
|
|
|
+download toolchain
|
|
|
+
|
|
|
+## Steps 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_r01
|
|
|
+
|
|
|
+and we have to ,because allwinner prebuilt toolchain has the neccessary custom opcode for the kernel of R-01
|
|
|
+
|
|
|
+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/
|
|
|
+
|
|
|
+## Mainline toolchain
|
|
|
+https://github.com/riscv/riscv-gnu-toolchain
|
|
|
+all the same as Official toolchain except need to disable Vector in kernel `make menuconfig`
|
|
|
+
|
|
|
+![d1_disable_vector_kernel](https://raw.githubusercontent.com/clockworkpi/DevTerm/main/Pictures/d1_disable_vector_kernel.jpg)
|
|
|
+
|
|
|
+# 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 remove update-notifier-common
|
|
|
+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
|
|
|
+```
|
|
|
+### Deploy the TWM window manager env.
|
|
|
+
|
|
|
+The R-01 uses 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 config
|
|
|
+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 24
|
|
|
+ Modes "1280x480" "480x1280"
|
|
|
+ EndSubsection
|
|
|
+
|
|
|
+EndSection
|
|
|
+```
|
|
|
+
|
|
|
+### Optmise 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
|
|
|
+```
|
|
|
+curl https://raw.githubusercontent.com/clockworkpi/apt/main/debian/KEY.gpg | sudo tee /etc/apt/trusted.gpg.d/clockworkpi.asc
|
|
|
+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-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
|
|
|
+
|
|
|
+
|
|
|
+# Compiling other stuff
|
|
|
+
|
|
|
+## WiringPI
|
|
|
+```
|
|
|
+git clone https://github.com/clockworkpi/DevTerm.git
|
|
|
+wget https://github.com/WiringPi/WiringPi/archive/refs/tags/final_official_2.50.tar.gz
|
|
|
+tar zxvf final_official_2.50.tar.gz
|
|
|
+cd WiringPi-final_official_2.50/
|
|
|
+cp ../DevTerm/Code/patch/d1/wiringCP0329.patch .
|
|
|
+git apply wiringCP0329.patch
|
|
|
+sudo ./build
|
|
|
+#Choice: 2
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+# For apt upgrade
|
|
|
+
|
|
|
+apt upgrade on R01 os will mess up the content of extlinux.conf
|
|
|
+lead the boot failed
|
|
|
+
|
|
|
+so mount the sd card(with R01 os) on a PC (like Linux )
|
|
|
+
|
|
|
+then go into the **boot partition** of the sd card
|
|
|
+
|
|
|
+you will see
|
|
|
+```
|
|
|
+extlinux.conf
|
|
|
+extlinux.conf.cpi.bak
|
|
|
+```
|
|
|
+replace extlinux.conf with extlinux.conf.cpi.bak
|
|
|
+
|
|
|
+the **extlinux.conf.cpi.bak** is for this kind of situation
|
|
|
+
|
|
|
+# Hints
|
|
|
+https://forum.clockworkpi.com/t/r01-os-early-hints/8636
|