mirror of
https://github.com/clockworkpi/DevTerm.git
synced 2025-12-17 12:48:49 +01:00
Created Create DevTerm R01 OS image from scratch (markdown)
parent
25c00c6947
commit
54bf6fee7d
400
Create-DevTerm-R01-OS-image-from-scratch.md
Normal file
400
Create-DevTerm-R01-OS-image-from-scratch.md
Normal file
@ -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:**
|
||||
|
||||

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

|
||||
|
||||
# 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
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user