Skip to content

DevTerm R‐01 Create OS image from scratch

emutyworks edited this page Jun 27, 2022 · 21 revisions

DevTerm R‐01

*This procedure was done with WSL2 (LxRunOffline/Ubuntu 21.10).
*This is not yet complete. I will update soon.

- Prepare
$ sudo apt update
$ sudo apt install -y gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu qemu-user-static
$ sudo apt install -y build-essential bison flex swig python3-dev libssl-dev bzip2 libncurses5-dev libncursesw5-dev

- SPL(Boot0)
$ 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

- OpenSBI
$ 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

- U-boot
$ 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
----------
Deveice Drivers --->
  MMC Host controller Support  --->
    [*] Poll for broken card detection case
----------
$ make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv u-boot.bin u-boot.dtb

- Build u-boot.toc1
$ vi toc1.cfg
----------
[opensbi]
file = fw_dynamic.bin
addr = 0x40000000
[dtb]
file = u-boot.dtb
addr = 0x44000000
[u-boot]
file = u-boot.bin
addr = 0x4a000000
----------
$ cp ../opensbi/build/platform/generic/firmware/fw_dynamic.bin .
$ tools/mkimage -T sunxi_toc1 -d toc1.cfg u-boot.toc1
$ popd

- Download this file
ubuntu-21.04-preinstalled-server-riscv64+unmatched_rootfs.tar.bz2
https://mega.nz/file/IQFlWZKL#_ERlz3GXoUgxsIoaLHK8oQ2A6SNFcHhZpS2tF3N6RaQ
ubuntu_2104_devterm_d1_boot.tar.bz2
https://mega.nz/file/NEsV1SRQ#FexV7wJhiUQKLcfBol4bB5m8UsX1O5qWet8geONclY4
ubuntu_2104_devterm_d1_EFI.tar.bz2
https://mega.nz/file/kNUBRBIB#NsPzKTDWbfBSTth7-eVz9gPjeaEdYnP7PfuYGz28cOk

- Create disk image file
$ MEGA=16777216
$ sudo 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
----------
Device     Boot   Start      End  Sectors  Size Id Type
disk.img2         69632   319487   249856  122M  c W95 FAT32 (LBA)
disk.img3  *     319488  1320959  1001472  489M 83 Linux
disk.img4       1320960 33554431 32233472 15.4G 83 Linux
----------

$ sudo losetup --show -f -P disk.img
----------
/dev/loop3
----------
$ sudo mkfs.vfat /dev/loop3p2
$ sudo mkfs.ext4 /dev/loop3p3
$ sudo mkfs.ext4 /dev/loop3p4

- Make alpha os image
$ sudo dd if=sun20i_d1_spl/nboot/boot0_sdcard_sun20iw1p1.bin of=/dev/loop3 bs=512 seek=16
$ sudo dd if=u-boot/u-boot.toc1 of=/dev/loop3 bs=512 seek=32800

$ sudo mkdir -p /mnt/p2 /mnt/p3 /mnt/p4
$ sudo mount /dev/loop3p2 /mnt/p2
$ sudo mount /dev/loop3p3 /mnt/p3
$ sudo mount /dev/loop3p4 /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/loop3p3 /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 .

$ touch /etc/cloud/cloud-init.disabled
$ apt remove update-notifier-common
$ apt-get update && apt-get purge needrestart

$ vi /etc/apt/sources.list
----------
*replace all "hirsute" to "devel"
----------
$ apt update
$ apt-get dist-upgrade

$ apt update
$ apt install mesa-utils libgl1-mesa-glx libglx-mesa0 libgles2-mesa libegl-mesa0
$ apt install 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
$ usermod -a -G adm,dialout,cdrom,floppy,sudo,audio,dip,video,plugdev,netdev,lxd,pulse,pulse-access cpi

$ 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

$ vi /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
----------

$ 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

$ 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

$ exit
$ cd
$ sudo umount /mnt/p4/dev/pts
$ sudo umount -l /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 -l /mnt/p4
$ sudo losetup -D /dev/loop4


Clone this wiki locally