blob: 74434d4435ec467ceeaed57ea4b1b095fcfae3af [file] [log] [blame]
Neil Armstrong514ad812017-11-27 10:16:19 +01001U-Boot for LibreTech CC
2=======================
3
4LibreTech CC is a single board computer manufactured by Libre Technology
5with the following specifications:
6
Neil Armstrong6be6a2f2018-06-27 17:19:02 +02007 - Amlogic S905X ARM Cortex-A53 quad-core SoC @ 1.5GHz
Neil Armstrong514ad812017-11-27 10:16:19 +01008 - ARM Mali 450 GPU
9 - 2GB DDR3 SDRAM
Neil Armstrong6be6a2f2018-06-27 17:19:02 +020010 - 10/100 Ethernet
Neil Armstrong514ad812017-11-27 10:16:19 +010011 - HDMI 2.0 4K/60Hz display
12 - 40-pin GPIO header
Neil Armstrong6be6a2f2018-06-27 17:19:02 +020013 - 4 x USB 2.0 Host
Neil Armstrong514ad812017-11-27 10:16:19 +010014 - eMMC, microSD
15 - Infrared receiver
16
17Schematics are available on the manufacturer website.
18
19Currently the U-Boot port supports the following devices:
20 - serial
21 - eMMC, microSD
22 - Ethernet
Neil Armstrong6be6a2f2018-06-27 17:19:02 +020023 - I2C
24 - Regulators
25 - Reset controller
26 - Clock controller
27 - USB Host
28 - ADC
Neil Armstrong514ad812017-11-27 10:16:19 +010029
30U-Boot compilation
31==================
32
Neil Armstrong514ad812017-11-27 10:16:19 +010033 > export CROSS_COMPILE=aarch64-none-elf-
34 > make libretech-cc_defconfig
35 > make
36
37Image creation
38==============
39
Daniel Drake8ac99132019-08-06 16:10:42 +080040To boot the system, u-boot must be combined with several earlier stage
41bootloaders:
42
43* bl2.bin: vendor-provided binary blob
44* bl21.bin: built from vendor u-boot source
45* bl30.bin: vendor-provided binary blob
46* bl301.bin: built from vendor u-boot source
47* bl31.bin: vendor-provided binary blob
48* acs.bin: built from vendor u-boot source
49
50These binaries and the tools required below have been collected and prebuilt
51for convenience at <https://github.com/BayLibre/u-boot/releases/>
52
53Download and extract the libretech-cc release from there, and set FIPDIR to
54point to the `fip` subdirectory.
55
56 > export FIPDIR=/path/to/extracted/fip
57
58Alternatively, you can obtain the original vendor u-boot tree which
59contains the required blobs and sources, and build yourself.
60Note that old compilers are required for this to build. The compilers here
61are suggested by Amlogic, and they are 32-bit x86 binaries.
Neil Armstrong514ad812017-11-27 10:16:19 +010062
63 > wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz
64 > wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz
65 > tar xvfJ gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz
66 > tar xvfJ gcc-linaro-arm-none-eabi-4.8-2013.11_linux.tar.xz
67 > export PATH=$PWD/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux/bin:$PWD/gcc-linaro-arm-none-eabi-4.8-2013.11_linux/bin:$PATH
68 > git clone https://github.com/BayLibre/u-boot.git -b libretech-cc amlogic-u-boot
69 > cd amlogic-u-boot
70 > make libretech_cc_defconfig
71 > make
72 > export FIPDIR=$PWD/fip
73
Daniel Drake8ac99132019-08-06 16:10:42 +080074Once you have the binaries available (either through the prebuilt download,
75or having built the vendor u-boot yourself), you can then proceed to glue
76everything together. Go back to mainline U-Boot source tree then :
77
Neil Armstrong514ad812017-11-27 10:16:19 +010078 > mkdir fip
79
80 > cp $FIPDIR/gxl/bl2.bin fip/
81 > cp $FIPDIR/gxl/acs.bin fip/
82 > cp $FIPDIR/gxl/bl21.bin fip/
83 > cp $FIPDIR/gxl/bl30.bin fip/
84 > cp $FIPDIR/gxl/bl301.bin fip/
85 > cp $FIPDIR/gxl/bl31.img fip/
86 > cp u-boot.bin fip/bl33.bin
87
88 > $FIPDIR/blx_fix.sh \
89 fip/bl30.bin \
90 fip/zero_tmp \
91 fip/bl30_zero.bin \
92 fip/bl301.bin \
93 fip/bl301_zero.bin \
94 fip/bl30_new.bin \
95 bl30
96
97 > $FIPDIR/acs_tool.pyc fip/bl2.bin fip/bl2_acs.bin fip/acs.bin 0
98
99 > $FIPDIR/blx_fix.sh \
100 fip/bl2_acs.bin \
101 fip/zero_tmp \
102 fip/bl2_zero.bin \
103 fip/bl21.bin \
104 fip/bl21_zero.bin \
105 fip/bl2_new.bin \
106 bl2
107
108 > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl30_new.bin
109 > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl31.img
110 > $FIPDIR/gxl/aml_encrypt_gxl --bl3enc --input fip/bl33.bin
111 > $FIPDIR/gxl/aml_encrypt_gxl --bl2sig --input fip/bl2_new.bin --output fip/bl2.n.bin.sig
112 > $FIPDIR/gxl/aml_encrypt_gxl --bootmk \
113 --output fip/u-boot.bin \
114 --bl2 fip/bl2.n.bin.sig \
115 --bl30 fip/bl30_new.bin.enc \
116 --bl31 fip/bl31.img.enc \
117 --bl33 fip/bl33.bin.enc
118
119and then write the image to SD with:
120
121 > DEV=/dev/your_sd_device
122 > dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=512 skip=1 seek=1
123 > dd if=fip/u-boot.bin.sd.bin of=$DEV conv=fsync,notrunc bs=1 count=444
Daniel Drake8ac99132019-08-06 16:10:42 +0800124
125Note that Amlogic provides aml_encrypt_gxl as a 32-bit x86 binary with no
126source code. Should you prefer to avoid that, there are open source reverse
127engineered versions available:
128
1291. gxlimg <https://github.com/repk/gxlimg>, which comes with a handy
130 Makefile that automates the whole process.
1312. meson-tools <https://github.com/afaerber/meson-tools>
132
133However, these community-developed alternatives are not endorsed by or
134supported by Amlogic.