Odroid-C2: Difference between revisions

From Alpine Linux
No edit summary
No edit summary
Line 22: Line 22:




==Toolchain==
==Required environement and toolchain==
Using GNU/Linux is recommended and this guide and here are the required dependencies:
Using GNU/Linux is recommended and this guide and here are the required dependencies:
Example on debian : apt install bc bison flex make gcc gcc-aarch64-linux-gnu libncurses-dev
Example on debian :
<pre>
apt install bc bison flex make gcc gcc-aarch64-linux-gnu libncurses-dev git
</pre>
Environement variables
<pre>
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu
</pre>


==Build u-boot from source==
<pre>
git clone --depth 1 https://source.denx.de/u-boot/u-boot.git -b v2022.01 u-boot-denx.de
cd u-boot-denx.de
export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu-
make mrproper && make odroid-c2_defconfig
</pre>
Change boot options:
TODO : remove lines
< # CONFIG_AUTOBOOT_KEYED is not set
< # CONFIG_AUTOBOOT_USE_MENUKEY is not set
Patch default configuration:
<pre>
sed -i -e 's/.*CONFIG_SD_BOOT.*/CONFIG_SD_BOOT=y/' .config
echo "CONFIG_AUTOBOOT_KEYED=y" >> .config
echo "CONFIG_AUTOBOOT_FLUSH_STDIN=y" >> .config
echo "CONFIG_AUTOBOOT_PROMPT="Press quickly 'Enter' twice to stop autoboot: %d\n"" >> .config
echo "# CONFIG_AUTOBOOT_ENCRYPTION is not set" >> .config
echo "CONFIG_AUTOBOOT_DELAY_STR=""" >> .config
echo "CONFIG_AUTOBOOT_STOP_STR="\xd\xd"" >> .config
echo "CONFIG_AUTOBOOT_KEYED_CTRLC=y" >> .config
</pre>
Build time:
<pre>
time make -j$(nproc)
</pre>


==Build u-boot from source==
''Work in progress''




==Build the latest LTS kernel from source==
==Build the latest LTS kernel from source==
''Work in progress''
<pre>
git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -b linux-5.154.y linux-stable
cd linux-stable
make mrproper && make defconfig
</pre>
We need to adapt the default arm64 generated by defconfig
<pre>
sed -i -e 's/.*CONFIG_SQUASHFS_XZ.*/CONFIG_SQUASHFS_XZ=y/' .config
sed -i -e 's/.*CONFIG_UEVENT_HELPER.*/CONFIG_UEVENT_HELPER=y/' .config
sed -i -e 's/.*CONFIG_BLK_DEV_RAM.*/CONFIG_BLK_DEV_RAM=y/' .config
echo CONFIG_UEVENT_HELPER_PATH=\"/sbin/hotplug\" >> .config
echo CONFIG_BLK_DEV_RAM_COUNT=16 >> .config
echo CONFIG_BLK_DEV_RAM_SIZE=4096 >> .config
</pre>
 
Build the kernel:
<pre>
time make -j$(nproc) Image dtbs modules
</pre>
 
Create modloop:
<pre>
rm -rf installed-modules && mkdir installed-modules
INSTALL_MOD_PATH=installed-modules make modules_install
find installed-modules -type l -delete
rm -f modloop
mksquashfs installed-modules/lib/ modloop -b 1048576 -comp xz -Xdict-size 100% -all-root
rm -rf installed-modules
</pre>





Revision as of 10:30, 19 March 2022

This material needs wiki syntax or style improvements ...

Please feel free to help us clean it up.

(Parts of this page are WIP, still incomplete and some might be incorrect.)

Introduction

The Odroid-C2 single board computer is not very well supported by Alpine/Linux. However the "Generic ARM (aarch64)" build contains almost everything we need !


What do we need ?

  • kernel : provided kernel by the Alpine team does not boot
  • u-boot : provided u-boot does not autoboot without serial
  • system files : everything is okay


On the hardware side:

  • Odroid-C2
  • Official PSU or just a micro-SD cable (notes : the barrel plug (inner(positive) diameter 0.8mm and outer(negative) diameter 2.5mm) is recommended, without the J1 jumper)
  • micro-SD (or eMMC)
  • USB to TTL (official or CP2102 chipset or an old rpi)


Required environement and toolchain

Using GNU/Linux is recommended and this guide and here are the required dependencies: Example on debian :

apt install bc bison flex make gcc gcc-aarch64-linux-gnu libncurses-dev git

Environement variables

export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu

Build u-boot from source

git clone --depth 1 https://source.denx.de/u-boot/u-boot.git -b v2022.01 u-boot-denx.de
cd u-boot-denx.de
export ARCH=arm64 && export CROSS_COMPILE=aarch64-linux-gnu-
make mrproper && make odroid-c2_defconfig

Change boot options: TODO : remove lines < # CONFIG_AUTOBOOT_KEYED is not set < # CONFIG_AUTOBOOT_USE_MENUKEY is not set

Patch default configuration:

sed -i -e 's/.*CONFIG_SD_BOOT.*/CONFIG_SD_BOOT=y/' .config
echo "CONFIG_AUTOBOOT_KEYED=y" >> .config
echo "CONFIG_AUTOBOOT_FLUSH_STDIN=y" >> .config
echo "CONFIG_AUTOBOOT_PROMPT="Press quickly 'Enter' twice to stop autoboot: %d\n"" >> .config
echo "# CONFIG_AUTOBOOT_ENCRYPTION is not set" >> .config
echo "CONFIG_AUTOBOOT_DELAY_STR=""" >> .config
echo "CONFIG_AUTOBOOT_STOP_STR="\xd\xd"" >> .config
echo "CONFIG_AUTOBOOT_KEYED_CTRLC=y" >> .config

Build time:

time make -j$(nproc)


Build the latest LTS kernel from source

git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git -b linux-5.154.y linux-stable
cd linux-stable
make mrproper && make defconfig

We need to adapt the default arm64 generated by defconfig

sed -i -e 's/.*CONFIG_SQUASHFS_XZ.*/CONFIG_SQUASHFS_XZ=y/' .config
sed -i -e 's/.*CONFIG_UEVENT_HELPER.*/CONFIG_UEVENT_HELPER=y/' .config
sed -i -e 's/.*CONFIG_BLK_DEV_RAM.*/CONFIG_BLK_DEV_RAM=y/' .config
echo CONFIG_UEVENT_HELPER_PATH=\"/sbin/hotplug\" >> .config
echo CONFIG_BLK_DEV_RAM_COUNT=16 >> .config
echo CONFIG_BLK_DEV_RAM_SIZE=4096 >> .config

Build the kernel:

time make -j$(nproc) Image dtbs modules

Create modloop:

rm -rf installed-modules && mkdir installed-modules
INSTALL_MOD_PATH=installed-modules make modules_install
find installed-modules -type l -delete
rm -f modloop
mksquashfs installed-modules/lib/ modloop -b 1048576 -comp xz -Xdict-size 100% -all-root
rm -rf installed-modules


Assembly

Work in progress


Booting

Work in progress


Troubleshooting

Work in progress