Alpine on ARM: Difference between revisions

From Alpine Linux
mNo edit summary
No edit summary
Line 8: Line 8:
==Supported SoCs==
==Supported SoCs==


Alpine gets compiled with support files for so many ARM SoCs that it's best to find out for a particular chipset by further refining (filtering) the search results for DTB files in the Package database.
Beyond the Raspberry Pi images, Alpine gets compiled with support files for so many and even formidable ARM SoCs, that it can be useful to find out about a particular chipset by further refining (filtering for for "*<some-board-or-SoC-code>*.dtb" file), starting from the results of searching for all *.dtb files in the package database.


For example, by refining these search results in the current "edge" release:
For example, by refining the following search in the current "edge" release:


Results for the architecure "armhf":
DTB-files in the current edge branch:
https://pkgs.alpinelinux.org/contents?repo=main&file=*.dtb&arch=armhf&branch=edge
https://pkgs.alpinelinux.org/contents?repo=main&file=*.dtb&branch=edge


Results for the architecture "aarch64":
https://pkgs.alpinelinux.org/contents?repo=main&file=*.dtb&arch=aarch64&branch=edge


==Installing Alpine on supported Boards==
==Installing Alpine on supported Boards==


This provides some generic information, using the "Wandboard" as example. If particular boards happen to require more to successfully install Alpine on them, please consider adding the missing info here.
===== Get latest Alpine image =====
The latest images are available at: https://alpinelinux.org/downloads/
 
In case the download page provides no specific image for your particular board, download the "Generic ARM" image.
 
(Useful hints about generally identifying and accessing your target device, eg. usb-stick or sdcard, may also be found on https://wiki.alpinelinux.org/wiki/Installation.)
 
After copying the files onto an usb-stick or sdcard, some devices, e.g. containing a modern bootloader in an internal flash chip, may allow to select booting the image right away.
 
However, if your device, even with its internal bootloader firmware (if any) updated to the latest version, is not able to boot the image as is, then some preparation of the boot media according to the requirements of your devices should allow booting.
 


===== Get latest Alpine image =====
Download the last Generic ARM image at: https://alpinelinux.org/downloads/
And extract the archive somewhere.


===== Prepare SD Card =====
===== Prepare SD Card =====


First install the SoCs particular boot loader(s), e.g. SPL and u-boot.img (this could change for other board), to the sdcard.
Here we are using the "Wandboard" as example. If your particular board happens to require something different to boot Alpine, please consider adding the missing info, e.g. by adding a link below.
(Useful hints about generally identifying and accessing your target sdcard device may also be found on https://wiki.alpinelinux.org/wiki/Installation.)
 
Extract the archive somewhere.
 
First install the SoCs particular boot loader(s) to where the device expects its boot loaders, e.g. the SPL and u-boot.img (this can differ between boards).


As user root, and from the location of the extracted image files, write the SPL from the extracted Alpine files to the sdcard:
As user root, and from the location of the extracted image files, write the SPL from the extracted Alpine files to the sdcard:
Line 40: Line 48:
Finally, put the sd-card in the Wandboard and boot it with serial console connected.
Finally, put the sd-card in the Wandboard and boot it with serial console connected.


The board should now boot from the sd-card. When the prompt asks for a login, you can follow https://wiki.alpinelinux.org/wiki/Installation to setup the alpine system as usual.
The board should now boot from the sd-card. When the prompt asks for a login, you can follow https://wiki.alpinelinux.org/wiki/Installation to run setup-alpine as usual.


=== Specific guides ===
=== Specific guides ===
Line 51: Line 59:
* [[A20 OLinuXino Lime2]]
* [[A20 OLinuXino Lime2]]


==Unupported SoCs==
==Not fully supported boards==


If you have an armv6/armv7 SoC which is not listed above but is supported by mainline uboot/kernel then it's still possible to install Alpine
If you have an armv6/armv7 SoC which is not listed above but is supported by mainline uboot/kernel then it's still possible to install Alpine
Line 66: Line 74:


A lot of the SoCs have their own way of doing things, although they use uboot and Linux kernel but often they are heavily modified to suit easy flashing of "ROMs" or other unknown reasons, e.g. Rockchip's notion "partition" are neither DOS nor GPT partitions.
A lot of the SoCs have their own way of doing things, although they use uboot and Linux kernel but often they are heavily modified to suit easy flashing of "ROMs" or other unknown reasons, e.g. Rockchip's notion "partition" are neither DOS nor GPT partitions.
We will discuss to install Alpine in a more standard way like x86 with either DOS or GPT partitions. You will most likely have to install/flash the mainline uboot, which can be non-destructive if you use external storage.
Here, we will try to install Alpine in a more standard way, like on the x86 platform, with either DOS or GPT partitions. To boot this, you will most likely have to install/flash the mainline uboot, which can be non-destructive if you can load it from external storage.





Revision as of 17:52, 19 April 2023

This material needs wiki syntax or style improvements ...

Please feel free to help us clean it up.

This page is proposed for moving ...

It should be renamed to ARM SOCs. (Discuss)

(Parts of this page are still incomplete and might even need corrections.)


Supported SoCs

Beyond the Raspberry Pi images, Alpine gets compiled with support files for so many and even formidable ARM SoCs, that it can be useful to find out about a particular chipset by further refining (filtering for for "*<some-board-or-SoC-code>*.dtb" file), starting from the results of searching for all *.dtb files in the package database.

For example, by refining the following search in the current "edge" release:

DTB-files in the current edge branch: https://pkgs.alpinelinux.org/contents?repo=main&file=*.dtb&branch=edge


Installing Alpine on supported Boards

Get latest Alpine image

The latest images are available at: https://alpinelinux.org/downloads/

In case the download page provides no specific image for your particular board, download the "Generic ARM" image.

(Useful hints about generally identifying and accessing your target device, eg. usb-stick or sdcard, may also be found on https://wiki.alpinelinux.org/wiki/Installation.)

After copying the files onto an usb-stick or sdcard, some devices, e.g. containing a modern bootloader in an internal flash chip, may allow to select booting the image right away.

However, if your device, even with its internal bootloader firmware (if any) updated to the latest version, is not able to boot the image as is, then some preparation of the boot media according to the requirements of your devices should allow booting.


Prepare SD Card

Here we are using the "Wandboard" as example. If your particular board happens to require something different to boot Alpine, please consider adding the missing info, e.g. by adding a link below.

Extract the archive somewhere.

First install the SoCs particular boot loader(s) to where the device expects its boot loaders, e.g. the SPL and u-boot.img (this can differ between boards).

As user root, and from the location of the extracted image files, write the SPL from the extracted Alpine files to the sdcard:

dd if=u-boot/wandboard/SPL of=/dev/sdX seek=1 bs=1k

and the u-boot.img :

dd if=u-boot/wandboard/u-boot.img of=/dev/sdX seek=69 bs=1k

After creating a partition on the sd-card with fdisk, copy the folders apks/, boot/, efi/, extlinux/, and u-boot/ to the sd-card partition. (I'm not sure all folders are useful).

Finally, put the sd-card in the Wandboard and boot it with serial console connected.

The board should now boot from the sd-card. When the prompt asks for a login, you can follow https://wiki.alpinelinux.org/wiki/Installation to run setup-alpine as usual.

Specific guides

Not fully supported boards

If you have an armv6/armv7 SoC which is not listed above but is supported by mainline uboot/kernel then it's still possible to install Alpine


Requirements

  • Alpine's forked uboot to support tarballs (fabled?)
  • serial console
  • crosscompiler/toolchain if you can not compile natively


The embedded world

A lot of the SoCs have their own way of doing things, although they use uboot and Linux kernel but often they are heavily modified to suit easy flashing of "ROMs" or other unknown reasons, e.g. Rockchip's notion "partition" are neither DOS nor GPT partitions. Here, we will try to install Alpine in a more standard way, like on the x86 platform, with either DOS or GPT partitions. To boot this, you will most likely have to install/flash the mainline uboot, which can be non-destructive if you can load it from external storage.


Storage

One can load uboot from the following block devices if it's supported.

  • NAND
  • eMMC
  • SD card
  • USB


Power on

Some SoCs need both SPL and uboot, you need to check uboot for your board. Most (if not all) boards boots from the internal storage first (either NAND or eMMC) you will have to check documentation of your board if you wish to boot the SPL/uboot from SD/USB.

One can view SPL+uboot as BIOS and boot-loader on PC. Think that you could put the BIOS on an external storage :D

Once you have loaded the "standard" uboot, things are more or less like on x86.


Partitioning

Either DOS or GPT patitions should work. Start of the first partition should be on block 2048 so there is space for SPL/uboot and marked bootable (with the MBR bootable flag, or GPT legacy_bios_bootable attribute).

  • SPL starts at block 64 (please consult the docs for your board)
  • uboot starts at block 256 (please consult the docs for your board)

Just dd SPL and boot with the correct offset to the media you wish to boot

Booting Linux kernel

  • uboot uses extlinux.conf file to locate the kernel/initramfs/... just like syslinx, you need to put that file on the partitions which is marked bootable in the /boot directory
  • there should be an extra line "FDTDIR" which points to the DTBs

e.g.

label Fedora (3.17.0-0.rc4.git2.1.fc22.armv7hl) 22 (Rawhide)
	kernel /boot/vmlinuz-3.17.0-0.rc4.git2.1.fc22.armv7hl
	append ro root=UUID=8eac677f-8ea8-4270-8479-d5ddbb797450 console=ttyS0,115200n8 LANG=en_US.UTF-8 drm.debug=0xf
	fdtdir /boot/dtb-3.17.0-0.rc4.git2.1.fc22.armv7hl
	initrd /boot/initramfs-3.17.0-0.rc4.git2.1.fc22.armv7hl.img

Using QEMU

qemu-system-arm -M vexpress-a9 -kernel zImage -initrd initramfs-grsec -dtb vexpress-v2p-ca9.dtb -hda hda.img -serial stdio


References