Differences between revisions 9 and 10
Revision 9 as of 2014-06-14 10:36:40
Size: 14781
Editor: ?IanCampbell
Comment: Tested cubieboard2, list DTB for each platform
Revision 10 as of 2014-06-14 13:46:49
Size: 15283
Editor: ?IanCampbell
Comment:
Deletions are marked like this. Additions are marked like this.
Line 272: Line 272:
= Board Specific Information =

== Cubietech Cubietruck ==

Wifi requires non-free firmware DebianPkg:firmware-brcm80211 at least version 0.42 plus an additional firmware file which is not yet packaged but can be installed with:

{{{
wget -O /lib/firmware/brcm/brcmfmac43362-sdio.txt http://dl.cubieboard.org/public/Cubieboard/benn/firmware/ap6210/nvram_ap6210.txt
}}}

Message such as {{{brcmfmac: brcmf_fil_cmd_data: Failed err=-23}}} are expected and do not represent a actual problem.

.

Introduction

Support for boards using the Allwinner "sunxi" (sun4i, sun5i, sun7i etc) family of processors, e.g. A10, A13, A20 etc.

Install Using Debian-Installer

Supported Platforms

Debian-installer should work out of the box on all the following sunxi-based systems, but as the developers do not have access to all of them, the installer has only been tested on particular systems. If you have used the installer on one of the untested systems, please submit an installation-report to the Debian project (cf. the Submitting Installation Reports chapter in the Debian installation-guide).

Systems tested and confirmed working

System

Device Tree Blob

Cubietech Cubieboard2

sun7i-a20-cubieboard2.dtb

Cubietech Cubietruck

sun7i-a20-cubietruck.dtb

Systems for which the installer has support code, but on which installation has not been tested yet

System

Device Tree Blob

Cubietech Cubieboard

sun4i-a10-cubieboard.dtb

INet-97F Rev 02

sun4i-a10-inet97fv2.dtb

LinkSprite pcDuino

sun4i-a10-pcduino.dtb

Mele A1000

sun4i-a10-a1000.dtb

Miniand Hackberry

sun4i-a10-hackberry.dtb

Olimex A10-OLinuXino-LIME

sun4i-a10-olinuxino-lime.dtb

Olimex A10s-Olinuxino Micro

sun5i-a10s-olinuxino-micro.dtb

Olimex A13-Olinuxino

sun5i-a13-olinuxino.dtb

Olimex A13-Olinuxino Micro

sun5i-a13-olinuxino-micro.dtb

Olimex A20-Olinuxino Micro

sun7i-a20-olinuxino-micro.dtb

PineRiver Mini X-Plus

sun4i-a10-mini-xplus.dtb

The installer can also be used on other sunxi-based systems as long as device-tree support for them is available, but on those systems manual intervention during the installation is required (see below).

Installing to SATA

Support for installing to a SATA device from the network is currently available in the Debian Installer daily builds. Booting the installed system directly from a SATA disk requires a u-boot with AHCI support (see the corresponding uboot information below).

NOTE: These instructions assume the use of a TFTP server, which should already be installed. However the installer images can also be loaded via other means, e.g. from MMC.

Prepare the TFTP Server

Download the kernel vmlinuz, installer initrd.gz and the appropriate Flattended Device Tree (FDT) Blob (or DTB) for the board and copy them to a path on your TFTP server. e.g.

# mkdir -p /srv/tftp/didaily/armhf/daily/{netboot,device-tree}
# cd /srv/tftp/didaily/armhf/daily/
# wget -P netboot http://d-i.debian.org/daily-images/armhf/daily/netboot/vmlinuz http://d-i.debian.org/daily-images/armhf/daily/netboot/initrd.gz
# wget -P device-tree http://d-i.debian.org/daily-images/armhf/daily/device-tree/sun7i-a20-cubietruck.dtb 

Create a script to boot the installer. e.g. /srv/tftp/didaily/cubietruck:

#setenv diargs <EXTRA ARGUMENTS>

setenv fdt_addr       0x43000000
setenv ramdisk_addr_r 0x48000000
setenv kernel_addr_r  0x47000000

setenv dibase /didaily/armhf/daily

tftp ${kernel_addr_r} ${dibase}/netboot/vmlinuz
setenv bootargs "console=ttyS0,115200 -- ${diargs}"

tftp ${fdt_addr} ${dibase}/device-tree/sun7i-a20-cubietruck.dtb
fdt addr ${fdt_addr} 0x40000

tftp ${ramdisk_addr_r} ${dibase}/netboot/initrd.gz
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr}

then to make a script which u-boot can run:

# mkimage -T script -A arm -d /srv/tftp/didaily/cubietruck /srv/tftp/didaily/cubietruck.scr

Running the Installer

At the u-boot prompt, boot the images which were just downloaded via the script:

uboot> setenv autoload no
uboot> dhcp
uboot> tftp ${scriptaddr} /didaily/cubietruck.scr
uboot> source ${scriptaddr}

Install in the usual way. Use setenv diargs foo=bar to pass arguments to the installer (e.g. for preseeding)

Booting the Installed System

At the u-boot prompt run the following:

uboot> scsi scan
uboot> setenv device scsi
uboot> setenv partition 0
uboot> load ${device} ${partition} ${scriptaddr} boot.scr
uboot> setenv bootargs console=ttyS0,115200n8 root=/dev/sda2 rootwait
uboot> source ${scriptaddr}

This can be made the default with:

uboot> setenv device scsi
uboot> setenv partition 0
uboot> setenv bootargs console=ttyS0,115200n8 root=/dev/sda2 rootwait
uboot> setenv boot_debian scsi scan\;load \${device} \${partition} \${scriptaddr} boot.scr\;source \${scriptaddr}
uboot> setenv bootcmd run boot_debian
uboot> saveenv
uboot> boot

Systems not supported Out-of-the-box

This is a bit more fiddly.

First find a suitable device tree blob (DTB) for your board. You might find one in the daily builds, or upstream. Otherwise you might need to write one yourself (or find someone who is willing to do it for you).

Once you have a suitable DTB you can populate the TFTP server with the vmlinuz, initrd.gz and the DTB and create a suitable installer boot script by modifying the one above.

Boot the installer and preceed as usual. Towards the end you will encounter:

   ┌─────────────────┤ [!] Continue without boot loader ├──────────────────┐
   │                                                                       │
   │                       No boot loader installed                        │
   │ No boot loader has been installed, either because you chose not to or │
   │ because your specific architecture doesn't support a boot loader yet. │
   │                                                                       │
   │ You will need to boot manually with the /vmlinuz kernel on partition  │
   │ /dev/sda1 and root=/dev/sda2 passed as a kernel argument.             │
   │                                                                       │
   │                              <Continue>                               │
   │                                                                       │
   └───────────────────────────────────────────────────────────────────────┘

This is expected. Make a note of the partitions and continue. Once the installer has completed the you need to boot the resulting system but using the DTB from TFTP in order to fix things up:

uboot> setenv fdt_addr       0x43000000
uboot> setenv ramdisk_addr_r 0x48000000
uboot> setenv kernel_addr_r  0x47000000
uboot> setenv dibase /didaily/armhf/daily
uboot> setenv autoload no;dhcp
uboot> tftp ${fdt_addr} ${dibase}/device-tree/sun7i-a20-cubieboard2.dtb
uboot> fdt addr ${fdt_addr} 0x40000
uboot> scsi scan
uboot> load scsi 0 ${kernel_addr_r} /vmlinuz
uboot> load scsi 0 ${ramdisk_addr_r} /initrd.img
uboot> setenv bootargs console=ttyS0,115200n8 root=/dev/sda2 rootwait
uboot> bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr}

This should now boot you to a login prompt.

Login and install flash-kernel and the u-boot-tools:

# apt-get install flash-kernel u-boot-tools

Now you need to create a flash-kernel database entry. Start by copying the entries for Cubietech Cubietruck from /usr/share/flash-kernel/db/all.db to /etc/flash-kernel/db. Now you need to modify the Machine and DTB-Id fields.

For the Machine use the output of:

# cat /proc/device-tree/model ; echo

For DTB-Id if you used a DTB from the daily builds then use that name for DTB-Id. If you got the DTB from somewhere else then install it as /boot/dtb-$(uname -r) and omit the DTB-Id field. In this case you will need to take care around kernel upgrades.

Now run flash-kernel and reboot. At this point you should be able to boot using the process from Booting the Installed System above. If this fails the boot again using the manual method described above and try again e.g. fix your /etc/flash-kernel/db.

Once you have it working run reportbug flash-kernel and report a wishlist bug to support your platform. Be sure to include the contents of /etc/flash-kernel/db and say where the DTB came from.

Installing to MMC

Support for the sunxi MMC controller will be in upstream Linux v3.16, however it has been backported to the v3.15 Debian kernel. However at the time of writing Debian Installer is using v3.14 and hence cannot install to MMC on this platform.

TBD: Describe installation to MMC once D-I switches to v3.15.

Mainline kernel and linux-sunxi.org 3.4 kernel

There are two different Linux kernel series for sunxi-based systems:

  • mainline kernel
  • linux-sunxi.org kernel

Development for sunxi-based systems had originally begun based on an Allwinner android kernel. The linux-sunxi.org 3.4 kernel series is based on this android kernel and is maintained by a group of volunteers at linux-sunxi.org.

The mainline kernel is the "official" Linux kernel series released by Linus Torvalds. Beginning with kernel 3.8, several developers have been working on integrating sunxi support into the mainline kernel. An overview of the progress can be found in the linux-sunxi.org wiki.

Debian uses the same kernel on all supported architectures and therefore supports only the mainline kernel. The disadvantage of the mainline kernel compared to the linux-sunxi.org kernel is that not all sunxi-specific drivers have yet been ported. The mainline kernel contains support for serial console, USB, SATA, Ethernet and MMC/SD, but it has no display and audio drivers for sunxi hardware, i.e. while running a headless server usually works without problems with the mainline kernel, it currently cannot be used for media center applications and the like and as there is no local display support, its use on tablets and other mobile devices is very limited.

While the installer always uses the mainline kernel, it is possible to manually install a linux-sunxi.org kernel on a Debian system later on, but in that case you are on your own with regards to kernel updates and bootloader setup. Several of the automatic mechanisms in Debian to smoothly handle kernel updates and bootloader configuration will not work properly with the linux-sunxi.org 3.4 series.

U-boot versions for sunxi-based systems

Overview

There are several u-boot versions for sunxi-based systems:

  • the original Allwinner u-boot
  • u-boot-sunxi
  • mainline u-boot

You can mostly ignore the original Allwinner u-boot for Debian purposes. Compared to u-boot-sunxi it is rather old and relies on proprietary bootloader components ("boot0"/"boot1") to perform basic hardware initialization. About the only use case for it is booting from the NAND flash available on some sunxi-based boards in conjunction with using an android or android-derived kernel version that contains the original Allwinner NAND flash driver for Android.

U-boot-sunxi is currently the most useful u-boot version for booting Debian on sunxi-based systems. It contains an SPL component that takes care of the basic hardware initialization and therefore does not need the proprietary boot0/boot1 loaders from Allwinner. It can boot locally from MMC/SD card and over the network by TFTP, but it cannot access the NAND flash. U-boot-sunxi gets synced regularly to new mainline u-boot relases and is therefore usually quite up to date with regard to modern u-boot features.

Mainline u-boot is the official upstream u-boot version. Work is currently in progress to integrate the sunxi-specific parts of u-boot-sunxi into mainline u-boot. When this process is completed, u-boot-sunxi can be replaced by mainline u-boot. At the time of writing (2014-06), sunxi support in mainline u-boot is limited to the A20 SOC and the Cubietech Cubietruck board, but support for other SOCs and boards is intended to follow in the near future. Mainline u-boot currently does not have PSCI support (see below).

Information about how to install a u-boot image for sunxi-based systems onto an MMC/SD-card can be found at the linux-sunxi.org wiki.

U-boot-sunxi development branches, SMP and AHCI support

Due to several people working independently on different aspects of u-boot-sunxi, there is more than one relevant u-boot-sunxi source tree.

The "official" u-boot-sunxi repository is at https://github.com/linux-sunxi/u-boot-sunxi ("sunxi" is the master branch).

For SMP support on Allwinner SOCs, i.e. for using more than one CPU core, the mainline Linux kernel requires support for PSCI (Power State Coordination Interface) in u-boot, which is not available in the "official" u-boot-sunxi tree. Hans de Goede has a git repository at https://github.com/jwrdegoede/u-boot-sunxi, where the "sunxi-next" branch is based on the "official" u-boot-sunxi but has PSCI support and is regularly synced with the "official" u-boot-sunxi. If you have an A20-based board, this is currently a better choice than the "official" u-boot-sunxi tree.

Ian Campbell is working on sunxi AHCI support (i.e. booting from a SATA harddisk in u-boot), targeted at mainline u-boot. He has a git repository at git://gitorious.org/ijc/u-boot.git and the "sunxi-mainlining-with-smp-and-ahci-wip" branch combines PSCI and AHCI support for the Cubietech Cubietruck and Cubieboard2. If you have one of these boards and need to boot your kernel directly from harddisk, you should use this tree.

Install Using SD Card Images

See Linux sunxi projects Bootable OS Images page.

NOTE: Obviously YMMV with these images.

Board Specific Information

Cubietech Cubietruck

Wifi requires non-free firmware firmware-brcm80211 at least version 0.42 plus an additional firmware file which is not yet packaged but can be installed with:

wget -O /lib/firmware/brcm/brcmfmac43362-sdio.txt http://dl.cubieboard.org/public/Cubieboard/benn/firmware/ap6210/nvram_ap6210.txt

Message such as brcmfmac: brcmf_fil_cmd_data: Failed err=-23 are expected and do not represent a actual problem.

Resources

http://linux-sunxi.org/