wiki:AllWinner

AllWinner A20 Notes

U-boot

  • Makefile verbose: Add to Makefile KBUILD_VERBOSE = 1
  • CONFIG_MMC_TRACE: Add to include/common.h: #define DEBUG #define CONFIG_MMC_TRACE
  • Voeg patch toe van https://yadi.sk/d/5wWlPyYb3UHLth, eg. Download naar emmcFix.patch, ~/u-boot# patch -p1 <<emmcFix.sh
  • Installeer python-dev, zlib1g-dev, pkg-config, libusb-1.0-0-dev, swig

DTB

Maak een arch/arm/dts/sun7i-a20-emcatron.dts gebaseerd op arch/arm/dts/sun7i-a20-cubietruck.dts, edit deze nieuwe file.

Kernel

Hierna:

root@e560:~/linux# ls -l arch/arm/boot/zImage -rwxr-xr-x 1 root root 3940736 Apr 19 04:36 arch/arm/boot/zImage

Deze kernel copieren we even naar de u-boot folder, vervolgens:

  • root@e560:~/u-boot# sunxi-fel -v uboot u-boot-sunxi-with-spl.bin write 0x42000000 zImage

Door u-boot's autoboot af te breken krijgen we de prompt:

  • => setenv bootargs console=ttyS0,115200
  • => bootz

Buildroot

Eerst dient voor de Be een defconfig gemaakt te worden in configs/:

cd configs
root@gaya:/usr/src/buildroot/configs# cp bananapi_m1_defconfig be_defconfig

Hierna vinden we in be_defconfig:

BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="board/bananapi/bananapi-m1/boot.cmd"

En:

BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/bananapi/bananapi-m1/genimage.cfg"

Hier moet bananapi/bananapi-m1 vervangen worden door be/v2:

BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="board/be/v2/boot.cmd"
BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/be/v2/genimage.cfg"

Hierna:

root@gaya:/usr/src/buildroot/board# cp -a bananapi/bananapi-m1 be/v2

En edit de files in be/v2

Be V2 files

In be/v2 vinden we nu:

root@gaya:/usr/src/buildroot/board/be/v2# ls
boot.cmd  genimage.cfg	readme.txt

In boot.img staat:

setenv bootargs console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rootwait

HEt beste om aan de slag te gaan te Be toe te voegen als 'nieuw board' is 'make menuconfig'. In menuconfig zijn er drie bestandslocaties die erg belangrijk zijn:

  • In 'buildroot' is dat 'Location to save buildroot config'. We zetten deze even op [PREFIX]/buildroot/configs/be_defconfig
  • In 'Kernel' dient 'In-Tree Device Tree Source File names' te worden gezet. Wij zetten deze op sun7i-a20-be
  • In 'Bootloaders' dient de 'Board defconfig' gezet te worden. Wij zetten deze op A20-Be

Als we buildroot nu zouden compileren zou het een aantal bestanden niet kunnen vinden dus die moeten we eerst aanmaken. Eerst 'saven' we de config nadat we bovenstaande aanpassingen hebben gemaakt. De 'save optie' zal default '.config' gebruiken. Dit is prima maar hierna:

fredl@gaya:/usr/src/buildroot$ cp .config configs/be_defconfig 

When we build with this setup, eventually we will be confronted with the error message:

***
*** Can't find default configuration "arch/../configs/A20-Be_defconfig"!
***

So now we need to make this file. We first pick an UBoot defconfig that looks reasonable. For the Be we use A20-OLinuXino_MICRO-eMMC_defconfig. So first we copy this into our homedirectory and make a symbolic link:

fredl@gaya:/usr/src/buildroot/output/build/uboot-2018.03/configs$ cp A20-OLinuXino_MICRO-eMMC_defconfig ~/A20-Be_defconfig
fredl@gaya:/usr/src/buildroot/output/build/uboot-2018.03/configs$ ln -s ~/A20-Be_defconfig 

Door de symbolic link weten we zeker dat we niet per abuis deze config verwijderen met een 'make distclean' bijvoorbeeld.

We maken nu, voorlopig, minimaal 2 aanpasssingen aan dit bestand:

CONFIG_MMC0_CD_PIN=-1
CONFIG_DEFAULT_DEVICE_TREE="sun7i-a20-be"

De eerste aanpassing is een aanpassing die met veel moeite verkregen is om onze eMMC chip gedetecteerd te laten worden. In de tweede aanpassing refereren we naar de device tree die UBoot dient te gebruiken. Dit is een device tree die we op dat moment nog NIET HEBBEN en zal bij een hernieuwde build resulteren in:

make[2]: *** No rule to make target 'arch/arm/dts/sun7i-a20-be.dts', needed by 'arch/arm/dts/sun7i-a20-be.dtb'.  Stop.

De arch/arm/dts/sun7i-a20-be.dts gaan we nu dus maken:

fredl@gaya:/usr/src/buildroot/output/build/uboot-2018.03/arch/arm/dts$ cp sun7i-a20-olinuxino-lime.dts ~/sun7i-a20-be.dts
fredl@gaya:/usr/src/buildroot/output/build/uboot-2018.03/arch/arm/dts$ ln -s ~/sun7i-a20-be.dts 

Wederom hier een symlink zodat we deze DTS niet per abuis kwijtraken. Overigens gebruiken we hier de OlinuxXino?-Lime als template.

Een hernieuwde build zal nu resulteren in een foutmelding in de *KERNEL* (ergo, we zijn nu voorbij het DTS gebeuren in uboot):

make[2]: *** No rule to make target 'arch/arm/boot/dts/sun7i-a20-be.dtb'.  Stop.
arch/arm/Makefile:341: recipe for target 'sun7i-a20-be.dtb' failed

LET OP" dit is NIET hetzelfde bestand als voor uboot, dus we zullen dit naar onze homedirectory copieren met andere naam:

fredl@gaya:/usr/src/buildroot/output/build/linux-4.13.7/arch/arm/boot/dts$ cp sun7i-a20-olinuxino-lime.dts ~/kernel-sun7i-a20-be.dts 
fredl@gaya:/usr/src/buildroot/output/build/linux-4.13.7/arch/arm/boot/dts$ ln -s ~/kernel-sun7i-a20-be.dts sun7i-a20-be.dts

Nu zal buildroot compileren en een sdcard.img genereren.

We willen echter tevens:

  • USB Ethernet support
  • SSH Daemon

Om USB Ethernet support voor de SMSC module te compileren in de kernel gaan we eerst in menuconfig en onder 'Kernel' -> (sunxi) defconfig name passen we deze naam aan naar 'be'. Compileren zal nu zoals gewoonlijk falen omdat deze defconfig nog niet bestaat. We maken er daarom dus een op de gebruikelijke wijze:

fredl@gaya:/usr/src/buildroot/output/build/linux-4.13.7/arch/arm/configs$ cp sunxi_defconfig ~/be_defconfig
fredl@gaya:/usr/src/buildroot/output/build/linux-4.13.7/arch/arm/configs$ ln -s ~/be_defconfig

In deze be_defconfig moeten we nu toevoegen:

CONFIG_USB_NET_SMSC75XX=y

NOOT: Bovenstaande moet gebeuren voor de make be_defconfig, anders zijn de dependencies in buildroot wat vreemd. Er dient voor de kernel compilatie te worden gecontroleerd of de config optie ook in output/build/linux-4.13.7/.config staat. Als recompile nog steeds vreemd lijkt te gaan kan make linux-rebuild' helpen.

Alles combineren

Buildroot genereert een output/images/sdcard.img. Teneinde deze image in the eMMC te krijgen gaan we hem eerst meecopieren naar DRAM met:

  • fredl@gaya:/usr/src/u-boot$ sudo ../sunxi-tools/sunxi-fel -v uboot u-boot-sunxi-with-spl.bin write 0x42000000 sdcard.img
  • Nadat we de u=boot prompt hebben kunnen we het image uit DRAM naar eMMC schrijven.
  • mmc write addr blk# cnt

Voor bovenstaande is 'addr' het hexadecimale DRAM adres waarin de image gecopieerd is (0x42000000), blk# de offset in eMMC waarbij de U-Boot SPL op 8k dient te staan. Met 512 blocksize hebben we dus offset 16 nodig (16x512 = 8k). De sdcard.img is in ons geval 131072000 bytes dus er moeten 131072000/512 = 25600 blocks oftewel 'mmc write 0x42000000 0x0 0x3E800'

Last modified 8 days ago Last modified on May 16, 2018, 12:27:52 AM