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