Difference between revisions of "Development"
m (Removed protection from "Development") |
|||
(11 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | <!-- ############################################################ --> | ||
+ | <!-- # Development page for AllStarLink/PTTLink # --> | ||
+ | <!-- # Supplements/ties together Development category and other # --> | ||
+ | <!-- # development related information # --> | ||
+ | <!-- ############################################################ --> | ||
+ | [[Category:Software]] | ||
+ | {{Infobox PTTLink | ||
+ | | image = Raspberry-Pi-3-B.webp | ||
+ | | caption = Example PTTLink Node | ||
+ | | category = Development | ||
+ | }} | ||
+ | {{ Note|'''This document is a work in progress and is still being updated by the author.''' }} | ||
Welcome to the Development section for the AllStarLink/PTTLink system. | Welcome to the Development section for the AllStarLink/PTTLink system. | ||
+ | |||
+ | = Compiling = | ||
+ | Information related to compiling app_rpt and other various software. | ||
+ | |||
+ | *[[Compiling]] - Building PTTLink from source | ||
+ | |||
+ | = Cross compiling = | ||
+ | Compiling on the Raspberry PI is both extremely slow and an exercise in pain. Thankfully there are ways to cross compile the software using a standard desktop computer with the Raspberry PI as the target. | ||
+ | |||
+ | == Installing cross compiling toolchain == | ||
+ | Run the following to install a newer cross compiling toolchain from your distro's package tree along with other necessary utilities: | ||
+ | <syntaxhighlight lang="text">apt-get install -y git bc bison flex rsync libssl-dev make device-tree-compiler libc6-dev libncurses5-dev crossbuild-essential-armhf crossbuild-essential-arm64</syntaxhighlight> | ||
+ | |||
+ | === GCC 4.9 === | ||
+ | If you intend to cross compile pieces of the Asterisk 1.4 distribution then you will need the GCC 4.9.x compiler. Linaro has a recent version of the GCC 4.9 compiler that we can use for this. | ||
+ | |||
+ | *Install latest GCC 4.9.x cross compiler and associated toolset: | ||
+ | ==== 32 bit ==== | ||
+ | <syntaxhighlight lang="text">wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz | ||
+ | sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /opt</syntaxhighlight> | ||
+ | ==== 64 bit ==== | ||
+ | <syntaxhighlight lang="text">wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz | ||
+ | sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz -C /opt</syntaxhighlight> | ||
+ | |||
+ | == Raspberry PI 3 == | ||
+ | Note: These instructions will use the 64bit Kernel for the Raspberry PI 3. | ||
+ | |||
+ | '''Kernel versions''' | ||
+ | *Replace the 4.19 with the specific version of the Linux kernel you want in the git clone command below. | ||
+ | |||
+ | You will need to already have a Debian build machine setup to do this. | ||
+ | |||
+ | === Configure Debian Build Machine === | ||
+ | *Create build directory | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkdir ~/Pi3-Kernel && cd ~/Pi3-Kernel | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Clone the Raspbverry Pi repository and pre-built binaries (removing the pre-built 32bit Kernel) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone --depth=1 -b rpi-4.19.y https://github.com/raspberrypi/linux.git | ||
+ | svn export https://github.com/raspberrypi/firmware/trunk/boot | ||
+ | rm boot/kernel* | ||
+ | rm boot/*.dtb | ||
+ | rm boot/overlays/*.dtbo | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Load stock Raspbery Pi 3 configuration | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd linux | ||
+ | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Update config using nconfig (if required. Skip if using stock config) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- nconfig | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Build Kernel with optimizations for the Pi 3 Arm Cortex A53 CPU | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 \ | ||
+ | CXXFLAGS="-march=armv8-a+crypto+crc -mtune=cortex-a53" \ | ||
+ | CFLAGS="-march=armv8-a+crypto+crc -mtune=cortex-a53" \ | ||
+ | bindeb-pkg | ||
+ | cp arch/arm64/boot/Image ../boot/kernel8.img | ||
+ | cp arch/arm64/boot/dts/overlays/*.dtbo ../boot/overlays/ | ||
+ | cp arch/arm64/boot/dts/broadcom/*.dtb ../boot/ | ||
+ | cd .. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Copy new Kernel from build machine and cleanup build folder. | ||
+ | Note: we are copying the files to a network share mounted under /mnt/pi3dev | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo cp *.deb /mnt/pi3dev/Pi3-Kernel/ | ||
+ | sudo cp -r boot /mnt/pi3dev/Pi3-Kernel/ | ||
+ | sudo rm ~/Pi3-Kernel/linux* | ||
+ | sudo rm -r ~/Pi3-Kernel/boot | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Update Raspberry Pi 3 === | ||
+ | ==== Startup configuration ==== | ||
+ | *Create cmdline.txt and config.txt to boot (as required). Keep a copy in home directory for now | ||
+ | <syntaxhighlight lang="text"> | ||
+ | echo 'dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0' > ~/cmdline.txt | ||
+ | echo $'kernel=kernel8.img\ngpu_mem=16\narm_64bit=1' > ~/config.txt | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Kernel installation ==== | ||
+ | *Remove old Kernel and install the one we compiled from our network share (you'll need to mount it) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo cp /mnt/pi3dev/Pi3-Kernel/*.deb /home/pi/ | ||
+ | cd ~/ | ||
+ | mkdir temp && cd temp | ||
+ | sudo apt purge linux-headers-* linux-image-* | ||
+ | cd .. && rm -r temp | ||
+ | sudo rm -r /boot/* | ||
+ | sudo dpkg -i linux-headers-*.deb linux-image-*.deb linux-libc-*.deb | ||
+ | sudo cp -r /mnt/pi3dev/Pi3-Kernel/boot/* /boot/ | ||
+ | sudo cp ~/cmdline.txt /boot/ | ||
+ | sudo cp ~/config.txt /boot/ | ||
+ | sudo reboot | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Raspberry PI 4 == | ||
+ | Note: These instructions will use the 64bit Kernel for the Raspberry Pi 4. | ||
+ | |||
+ | '''Kernel versions''' | ||
+ | *Replace the 4.19 with the specific version of the Linux kernel you want in the git clone command below. | ||
+ | *Support for hardware with more than 3GB of RAM is only available in 4.19 and above. | ||
+ | **A workaround is to add total_mem=3072 to config text when using other Kernel version with the 4GB Pi 4. | ||
+ | *FKMS 3D driver fixes are only available in version 4.19 of the Kernel | ||
+ | **3D acceleration does not work and it falls back to software emulation | ||
+ | |||
+ | You will need to already have a Debian build machine setup to do this. | ||
+ | |||
+ | === Configure Debian Build Machine === | ||
+ | *Create build directory | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | mkdir ~/Pi4-Kernel && cd ~/Pi4-Kernel | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Clone the Raspbverry Pi repository and pre-built binaries (removing the pre-built 32bit Kernel) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | git clone --depth=1 -b rpi-4.19.y https://github.com/raspberrypi/linux.git | ||
+ | svn export https://github.com/raspberrypi/firmware/trunk/boot | ||
+ | rm boot/kernel* | ||
+ | rm boot/*.dtb | ||
+ | rm boot/overlays/*.dtbo | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Load stock Raspbery Pi 4 configuration | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | cd linux | ||
+ | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Update config using nconfig (if required. Skip if using stock config) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- nconfig | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Build Kernel with optimizations for the Pi 4 Arm Cortex A72 CPU | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 \ | ||
+ | CXXFLAGS="-march=armv8-a+crc -mtune=cortex-a72" \ | ||
+ | CFLAGS="-march=armv8-a+crc -mtune=cortex-a72" \ | ||
+ | bindeb-pkg | ||
+ | cp arch/arm64/boot/Image ../boot/kernel8.img | ||
+ | cp arch/arm64/boot/dts/overlays/*.dtbo ../boot/overlays/ | ||
+ | cp arch/arm64/boot/dts/broadcom/*.dtb ../boot/ | ||
+ | cd .. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *Copy new Kernel from build machine and cleanup build folder. | ||
+ | Note: we are copying the files to a network share mounted under /mnt/pi4dev | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo cp *.deb /mnt/pi4dev/Pi4-Kernel/ | ||
+ | sudo cp -r boot /mnt/pi4dev/Pi4-Kernel/ | ||
+ | sudo rm ~/Pi4-Kernel/linux*.deb | ||
+ | sudo rm -r ~/Pi4-Kernel/boot | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Update Raspberry Pi 4 === | ||
+ | ==== Startup configuration ==== | ||
+ | *Create cmdline.txt and config.txt to boot (as required). Keep a copy in home directory for now | ||
+ | <syntaxhighlight lang="text"> | ||
+ | echo 'dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0' > ~/boot/cmdline.txt | ||
+ | echo $'kernel=kernel8.img\ngpu_mem=512\narm_64bit=1\ndtoverlay=vc4-fkms-v3d' > ~/boot/config.txt | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ==== Kernel installation ==== | ||
+ | *Remove old Kernel and install the one we compiled from our network share (you'll need to mount it) | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo cp /mnt/pi4dev/Pi4-Kernel/*.deb /home/pi/ | ||
+ | cd ~/ | ||
+ | mkdir temp && cd temp | ||
+ | sudo apt purge linux-headers-* linux-image-* | ||
+ | cd .. && rm -r temp | ||
+ | sudo rm -r /boot/* | ||
+ | sudo dpkg -i linux-headers-*.deb linux-image-*.deb linux-libc-*.deb | ||
+ | sudo cp -r /mnt/pi4dev/Pi4-Kernel/boot/* /boot/ | ||
+ | sudo cp ~/boot/cmdline.txt /boot/ | ||
+ | sudo cp ~/boot/config.txt /boot/ | ||
+ | sudo reboot | ||
+ | </syntaxhighlight> |
Latest revision as of 00:50, 15 March 2022
Welcome to the Development section for the AllStarLink/PTTLink system.
Compiling
Information related to compiling app_rpt and other various software.
- Compiling - Building PTTLink from source
Cross compiling
Compiling on the Raspberry PI is both extremely slow and an exercise in pain. Thankfully there are ways to cross compile the software using a standard desktop computer with the Raspberry PI as the target.
Installing cross compiling toolchain
Run the following to install a newer cross compiling toolchain from your distro's package tree along with other necessary utilities:
apt-get install -y git bc bison flex rsync libssl-dev make device-tree-compiler libc6-dev libncurses5-dev crossbuild-essential-armhf crossbuild-essential-arm64
GCC 4.9
If you intend to cross compile pieces of the Asterisk 1.4 distribution then you will need the GCC 4.9.x compiler. Linaro has a recent version of the GCC 4.9 compiler that we can use for this.
- Install latest GCC 4.9.x cross compiler and associated toolset:
32 bit
wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /opt
64 bit
wget http://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/aarch64-linux-gnu/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz
sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz -C /opt
Raspberry PI 3
Note: These instructions will use the 64bit Kernel for the Raspberry PI 3.
Kernel versions
- Replace the 4.19 with the specific version of the Linux kernel you want in the git clone command below.
You will need to already have a Debian build machine setup to do this.
Configure Debian Build Machine
- Create build directory
mkdir ~/Pi3-Kernel && cd ~/Pi3-Kernel
- Clone the Raspbverry Pi repository and pre-built binaries (removing the pre-built 32bit Kernel)
git clone --depth=1 -b rpi-4.19.y https://github.com/raspberrypi/linux.git
svn export https://github.com/raspberrypi/firmware/trunk/boot
rm boot/kernel*
rm boot/*.dtb
rm boot/overlays/*.dtbo
- Load stock Raspbery Pi 3 configuration
cd linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
- Update config using nconfig (if required. Skip if using stock config)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- nconfig
- Build Kernel with optimizations for the Pi 3 Arm Cortex A53 CPU
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 \
CXXFLAGS="-march=armv8-a+crypto+crc -mtune=cortex-a53" \
CFLAGS="-march=armv8-a+crypto+crc -mtune=cortex-a53" \
bindeb-pkg
cp arch/arm64/boot/Image ../boot/kernel8.img
cp arch/arm64/boot/dts/overlays/*.dtbo ../boot/overlays/
cp arch/arm64/boot/dts/broadcom/*.dtb ../boot/
cd ..
- Copy new Kernel from build machine and cleanup build folder.
Note: we are copying the files to a network share mounted under /mnt/pi3dev
sudo cp *.deb /mnt/pi3dev/Pi3-Kernel/
sudo cp -r boot /mnt/pi3dev/Pi3-Kernel/
sudo rm ~/Pi3-Kernel/linux*
sudo rm -r ~/Pi3-Kernel/boot
Update Raspberry Pi 3
Startup configuration
- Create cmdline.txt and config.txt to boot (as required). Keep a copy in home directory for now
echo 'dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0' > ~/cmdline.txt
echo $'kernel=kernel8.img\ngpu_mem=16\narm_64bit=1' > ~/config.txt
Kernel installation
- Remove old Kernel and install the one we compiled from our network share (you'll need to mount it)
sudo cp /mnt/pi3dev/Pi3-Kernel/*.deb /home/pi/
cd ~/
mkdir temp && cd temp
sudo apt purge linux-headers-* linux-image-*
cd .. && rm -r temp
sudo rm -r /boot/*
sudo dpkg -i linux-headers-*.deb linux-image-*.deb linux-libc-*.deb
sudo cp -r /mnt/pi3dev/Pi3-Kernel/boot/* /boot/
sudo cp ~/cmdline.txt /boot/
sudo cp ~/config.txt /boot/
sudo reboot
Raspberry PI 4
Note: These instructions will use the 64bit Kernel for the Raspberry Pi 4.
Kernel versions
- Replace the 4.19 with the specific version of the Linux kernel you want in the git clone command below.
- Support for hardware with more than 3GB of RAM is only available in 4.19 and above.
- A workaround is to add total_mem=3072 to config text when using other Kernel version with the 4GB Pi 4.
- FKMS 3D driver fixes are only available in version 4.19 of the Kernel
- 3D acceleration does not work and it falls back to software emulation
You will need to already have a Debian build machine setup to do this.
Configure Debian Build Machine
- Create build directory
mkdir ~/Pi4-Kernel && cd ~/Pi4-Kernel
- Clone the Raspbverry Pi repository and pre-built binaries (removing the pre-built 32bit Kernel)
git clone --depth=1 -b rpi-4.19.y https://github.com/raspberrypi/linux.git
svn export https://github.com/raspberrypi/firmware/trunk/boot
rm boot/kernel*
rm boot/*.dtb
rm boot/overlays/*.dtbo
- Load stock Raspbery Pi 4 configuration
cd linux
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
- Update config using nconfig (if required. Skip if using stock config)
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- nconfig
- Build Kernel with optimizations for the Pi 4 Arm Cortex A72 CPU
ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make -j4 \
CXXFLAGS="-march=armv8-a+crc -mtune=cortex-a72" \
CFLAGS="-march=armv8-a+crc -mtune=cortex-a72" \
bindeb-pkg
cp arch/arm64/boot/Image ../boot/kernel8.img
cp arch/arm64/boot/dts/overlays/*.dtbo ../boot/overlays/
cp arch/arm64/boot/dts/broadcom/*.dtb ../boot/
cd ..
- Copy new Kernel from build machine and cleanup build folder.
Note: we are copying the files to a network share mounted under /mnt/pi4dev
sudo cp *.deb /mnt/pi4dev/Pi4-Kernel/
sudo cp -r boot /mnt/pi4dev/Pi4-Kernel/
sudo rm ~/Pi4-Kernel/linux*.deb
sudo rm -r ~/Pi4-Kernel/boot
Update Raspberry Pi 4
Startup configuration
- Create cmdline.txt and config.txt to boot (as required). Keep a copy in home directory for now
echo 'dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait net.ifnames=0' > ~/boot/cmdline.txt
echo $'kernel=kernel8.img\ngpu_mem=512\narm_64bit=1\ndtoverlay=vc4-fkms-v3d' > ~/boot/config.txt
Kernel installation
- Remove old Kernel and install the one we compiled from our network share (you'll need to mount it)
sudo cp /mnt/pi4dev/Pi4-Kernel/*.deb /home/pi/
cd ~/
mkdir temp && cd temp
sudo apt purge linux-headers-* linux-image-*
cd .. && rm -r temp
sudo rm -r /boot/*
sudo dpkg -i linux-headers-*.deb linux-image-*.deb linux-libc-*.deb
sudo cp -r /mnt/pi4dev/Pi4-Kernel/boot/* /boot/
sudo cp ~/boot/cmdline.txt /boot/
sudo cp ~/boot/config.txt /boot/
sudo reboot