Подключение LCD дисплея 7 дюймов¶
1. Введение¶
Здесь описываются действия, необходимые для подключения дисплея к модулю Штрих-ИМ через интерфейс MIPI DSI.
Для подключения необходимо иметь следующую информацию, которую можно получить у производителя дисплея:
Документацию на дисплей и контроллер
Код инициализации
Значения параметров hfp, hbp, hpw, vfp, vbp, vpw
Значение числа каналов (lanes) в MIPI интерфейсе дисплея
Значение частоты обновления fps дисплея (обычно 60).
Последовательность команд сброса (reset sequence)
Примечание
В этом документе будет описываться дисплей MX-B70HM30-IX21, используемый на отладочной плате модуля Штрих-ИМ. Данный дисплей содержит контроллер Fitipower EK79007AD.
2. Расчет частоты тактирования¶
В этом разделе описывается, как вычислить частоту синхронизации точек (Pixel Clock) и частоту MIPI (MIPI Clock).
2.1. Формула расчета¶
Примечание
Необходимо пояснить, что значения, обсуждаемые далее, являются наследием управления электронно лучевыми экранами, в которых в потоке данных присутствовали так называемые porch области, в которых информация не выводилась на экран до и после строчных и кадровых импульсов синхронизации. Некоторое число импульсов синхронизации точек в начале и в конце каждой строки и каждого кадра было необходимо для возврата луча в начало следующей строки/кадра. В LCD дисплеях никакого луча, конечно, нет. И он никуда не возвращается, но для единообразия систем управлени и с целью совместимости эти параметры были оставлены.
Формула расчета частоты тактирования точек (Pixel clock)
pixel_clk = (width + hfp + hbp + hsync) × (height + vfp + vbp + vsync) × fps
width: разрешение LCD по ширине в точках
hfp: (horizontal front porch) - указывает число точек, которые не будут отображены в конце вывода значащих данных точек в строке.
hbp: (horizontal back porch) - указывает число точек, которые не будут отображены перед началом вывода значащих данных точек в строке.
hsync: ширина импульса горизонтальной синхронизации (в точках, т.е. в импульсах тактовой частоты):
Здесь слова horizontal front и horizontal back относятся не к информации о точках, а к импульсу строчной синхронизации (hsync). Т.е. это число пропускаемых точек находится перед (front) и после (back) импульса hsyncheight: разрешение LCD по высоте в точках
vfp: (vertical front porch) - указывает число строк, которое не будет отображаться после вывода всех значащих строк
vbp: (vertical back porch) - указывает число строк, которые не будут отображаться перед началом вывода значащих строк
vsync: ширина испульса вертикальной синхронизации в строках
fps: (frame per second) - частота обновления экрана в секунду, обычно 60:
Аналогично, слова vertical front и vertical back относятся не к информации о точках, а к импульсу кадровой синхронизации (vsync). Т.е. это число пропускаемых строк находится перед (front) и после (back) импульса vsync
Формула расчета частоты MIPI (MIPI clock)
Формула расчета минимального значения mipi clock:
Это значение используется как phy_freq в примере в разделе 2.2pixel_clk × 3 × 8 bit < mipi_clk × lane_num × 0.9
lane_num: число линий lane MIPI
2.2. Пример расчета¶
В этом разделе приведен пример расчета частоты тактирования pixel clock и частоты MIPI clock и настройка этих параметров в исходном коде драйвера.
Из документации на дисплей мы получили следующую информацию:
Параметр |
Значение |
Описание |
---|---|---|
bpp |
24 |
Число бит на точку |
width |
1024 |
Разрешение по ширине |
height |
600 |
Разрешение по высоте |
hfp |
160 |
horizontal front porch |
hbp |
160 |
horizontal back porch |
hsync |
10 |
ширина импульса горизонтальной синхронизации |
vfp |
12 |
vertical front porch |
vbp |
23 |
vertical back porch |
vsync |
1 |
ширина испульса вертикальной синхронизации |
lane_num |
4 |
число линий lane MIPI |
fps |
60 |
частота обновления |
2.2.1. Расчет Pixel Clock¶
На основании указанной информации требуемая частота pixel clock имеет значение:
pixel_clk = (1024 + 160 + 160 + 10) × (600 + 12 + 23 + 1) × 60 = 51668640
Примечание
Это значение частоты pixel clock как есть не может быть установлено в коде, потому что частота точек формируется путем деления частоты источника тактовых импульсов на целое число. Частота, устанавливаемая в коде драйвера, должна быть получена в как результат деления одной из частот 128 МГц, 153.6 МГц или 192 МГц на целое число. Если рассчитанное значение не удовлетворяет этому требованию, необходимо использовать ближайшее удовлетворяющее значение (например, половина от 128 МГц - это 64 МГц, что близко к рассчитанным 51.6 МГц). Т.о. выбираем частоту pixel clock равной 64000000 Гц.
2.2.2. Расчет MIPI Clock¶
Данные передаются в MIPI интерфейс из модуля, а затем по интерфейсу MIPI они передаются на ЖК-дисплей. Следовательно скорость передачи данных начального сегмента не может быть больше скорости передачи данных следующего сегмента, иначе данные будут накладываться. Обычно MIPI переключается из режима низкого энергопотребления в высокоскоростной режим в начале каждой строки передаваемых данных, а затем переключиться из высокоскоростного режима в режим низкого энергопотребления после завершения передачи. Значение pixel clock должно быть менее 90% тактовой частоты MIPI (phy_freq).
1 точка = 3 байта = 24 бит (24 bpp). Значение частоты MIPI должно удовлетворять следующей формуле:
pixel_clk × 3 × 8 bit < phy_freq × lane_num × 0.9
64000000 × 3 × 8 < phy_freq × 4 × 0.9
Получается, что минимальное значение MIPI clock (phy_freq) должно быть 427 МГц. Выбираем значение частоты MIPI 500 МГц (500000 указывается в единицах КГц).
Т.о. в данном примере
.pixel_clk = 64000000,
.phy_freq = 500000,
3. Конфигурирование ядра Linux и LK.¶
Примечание
Конфигурация дисплея должна быть произведена и для ядра Linux и для LK (Little kernel). В качестве LK в данном проекте выступает загрузчик UBoot.
После запуска модуля, но до момента старта ядра Linux, для управления дисплеем будут использованы настройки в LK.
После определенного этапа загрузки и во время работы системы Андроид, используются настройки параметров дисплея, произведенные в ядре Linux.
3.1. Конфигурация дисплея в ядре Linux.¶
Конфигурация параметров дисплея производится в файле DT (Device Tree), расположенном в указанной папке:
bsp/kernel/kernel4.14/arch/arm/boot/dts/lcd/
В качестве заготовки файла конфигурации можно использовать файл lcd_dummy_mipi.dtsi из этой папки.
В этом документе будет описан файл lcd_ek79007_1024x600_mipi.dtsi, содержащий настройки дисплея на контроллере EK79007AD.
Конфигурация блока параметров LCD
Настройте блок параметров LCD в файле bsp/kernel/kernel4.14/arch/arm/boot/dts/lcd/lcd_ek79007_1024x600_mipi.dtsi
/ { lcds {
lcd_ek79007_1024x600_mipi: lcd_ek79007_1024x600_mipi{
sprd,dsi-work-mode = <1>;
sprd,dsi-lane-number = <4>;
sprd,dsi-color-format = "rgb888";
sprd,width-mm = <152>;
sprd,height-mm = <85>;
Примечание
Обратите внимание, что имя блока параметров LCD (lcd_ek79007_1024x600_mipi), указанное в этом файле, должно совпадать с именем, указанном в настройках Uboot, т.к. ядро использует имя блока параметров LCD, переданное из Uboot, для загрузки соответствующего dtsi файла.
Последовательность инициализации
sprd,initial-command = [
39 00 00 02 80 8B
39 00 00 02 81 78
39 00 00 02 82 84
39 00 00 02 83 88
39 00 00 02 84 A8
39 00 00 02 85 E3
39 00 00 02 86 88
39 78 00 02 29 00
39 78 00 02 11 00
];
Примечание
Параметры инициализации дисплея также должны соответствовать параметрам инициализаци в Uboot.
Последовательность сброса
sprd,reset-on-sequence = <1 20>, <0 20>, <1 120>;
sprd,reset-off-sequence = <0 20>;
Примечание
Здесь указывается уровень и длительность в миллисекундах сигнала reset для выполнения сброса при включении и выключении дисплея.
Последовательность команд для перехода в sleep
sprd,sleep-in-command = [
13 0A 00 01 28
13 78 00 01 10
];
sprd,sleep-out-command = [
13 78 00 01 11
13 64 00 01 29
];
Примечание
Эти команды передаются в дисплей при переходе и выходе из sleep режима
Примечание
Параметры инициализации должны соответствовать параметрам, настроенным в Uboot.
Параметры в настройках ядра не должны содержать символ 0x для шестнадцатиричных значений.
Блок описания параметров тайминга дисплея
display-timings {
timing0 {
clock-frequency = <64000000>;
hactive = <1024>;
vactive = <600>;
hback-porch = <160>;
hfront-porch = <160>;
vback-porch = <23>;
vfront-porch = <12>;
hsync-len = <10>;
vsync-len = <1>;
};
};
Примечание
Здесь должны быть указаны параметры дисплея, которые использовались для расчета частоты pixel_clk
Добавление в dts файл
Добавьте .dtsi файл с настройками дисплея в общий dts файл устройства
bsp/kernel/kernel4.14/arch/arm/boot/dts/sl8541e-1h10wifi5g_32b.dts, как показано ниже:
#include <dt-bindings/gpio/gpio.h>
#include "sl8541e.dtsi"
#include "sp9832e-go-mach.dtsi"
#include "sc9832e-wcn.dtsi"
#include "sc2721.dtsi"
#include "sprd-sound-sharkl.dtsi"
#include "lcd/lcd_ek79007_1024x600_mipi.dtsi"
#include "lcd/lcd_ili9881d_truly_mipi_hd.dtsi"
Укажите канал GPIO, который будет использоваться драйвером в качестве линии сброса дисплея.
&dsi {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
panel: panel {
compatible = "sprd,generic-mipi-panel";
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
reset-gpio = <&ap_gpio 50 GPIO_ACTIVE_HIGH>;
port {
reg = <1>;
panel_in: endpoint {
remote-endpoint = <&dphy_out>;
};
};
};
};
Драйвер MIPI DSI ядра Linux настраивается только здесь. Обычно не требуется его модификация в коде драйвера.
3.2. Настройка дисплея в Uboot¶
Создайте новый файл lcd_ek79007_1024x600_mipi.c в папке bsp/bootloader/u-boot15/drivers/video/sprd/lcd/, Этот файл - это файл драйвера дисплея на контроллере ek79007 в Uboot. Массив init_data[] - это массив параметров инициализации дисплея.
bsp/bootloader/u-boot15/drivers/video/sprd/lcd/lcd_ek79007_1024x600_mipi.c.
Параметры инициализации для дисплея hx8934f следующие:
static uint8_t init_data[] = {
0x39, 0x00, 0x00, 0x02, 0x80, 0x8B,
0x39, 0x00, 0x00, 0x02, 0x81, 0x78,
0x39, 0x00, 0x00, 0x02, 0x82, 0x84,
0x39, 0x00, 0x00, 0x02, 0x83, 0x88,
0x39, 0x00, 0x00, 0x02, 0x84, 0xA8,
0x39, 0x00, 0x00, 0x02, 0x85, 0xE3,
0x39, 0x00, 0x00, 0x02, 0x86, 0x88,
0x39, 0x78, 0x00, 0x02, 0x29, 0x00,
0x39, 0x78, 0x00, 0x02, 0x11, 0x00,
CMD_END
};
При подключении пользовательского дисплея, необходимо внести в этот массив последовательность инициализации подключаемого дисплея.
Массив представляет из себя набор строк с командами MIPI. Каждая строка имеет следующий формат:
0x39, 0x00, 0x00, 0x02, 0x80, 0x8B,
где:
0x39 - команда MIPI интерфейса.
0x00 - время ожидания после выполнениея команды в мс.
0x00, 0x02 - длина команды MIPI, которая включает команду дисплея и ее параметры.
0x80 - команда дисплея, передаваемая в дисплей внутри команды MIPI.
0x8B - парематр команды дисплея.
Функция ek79007_mipi_init()
Эта функция инициализирует дисплей.
static int ek79007_mipi_init()
{
struct sprd_dsi *dsi = &dsi_device;
struct sprd_dphy *dphy = &dphy_device;
mipi_dsi_lp_cmd_enable(dsi, true);
mipi_dsi_send_cmds(dsi, init_data);
mipi_dsi_set_work_mode(dsi, SPRD_MIPI_MODE_VIDEO);
mipi_dsi_state_reset(dsi);
mipi_dphy_hs_clk_en(dphy, true);
pr_info("ek79007 mipi init success!\n");
return 0;
}
Функция использует данные из массива init_data[] и передает их в дисплей по MIPI интерфейсу. Обычно модификация ее кода не требуется.
Функция ek79007_readid(void).
Эта функция читает ID код дисплея, который используется для определения того, какой дисплей подключен к системе в данный момент.
static int ek79007_readid(void)
{
struct sprd_dsi *dsi = &dsi_device;
uint8_t cmd[] = {0x03, 0x00};
uint8_t read_buf[4] = {0};
mipi_dsi_lp_cmd_enable(dsi, true);
mipi_dsi_gen_write(dsi, cmd, ARRAY_SIZE(cmd));
mipi_dsi_set_max_return_size(dsi, 3);
mipi_dsi_dcs_read(dsi, 0x04, &read_buf, 3);
// if ((read_buf[0] == 0x83) && (read_buf[1] == 0x94)) {
// pr_info("ek79007 read id success!\n");
// return 0;
// }
pr_err("ek79007 read id %X,%X\n",read_buf[0],read_buf[1]);
// return -1;
return 0;
}
Функция передает в дисплей команду 0x03, 0x00 и читает обратно 3 байта данных. В случае совпадения принятых данных с ожидаемым значением, функция возвращает 0, что говорит об успешной детекции данного дисплея, иначе возвращается -1.
При подключении пользовательского дисплея, необходимо модифицировать эту функцию соответствующим образом.
В данном случае принятые данные игнорируются, функция возвращает 0 в любом случае.
Функция сброса ek79007_power()
Данная функция выполняет сброс дисплея при включении устройства.
static int ek79007_power(int on)
{
if (on) {
sprd_gpio_request(NULL, CONFIG_LCM_GPIO_RSTN);
sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 1);
mdelay(5);
sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 0);
mdelay(5);
sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 1);
mdelay(20);
} else {
sprd_gpio_direction_output(NULL, CONFIG_LCM_GPIO_RSTN, 0);
mdelay(5);
}
return 0;
}
Функция использует линию GPIO (CONFIG_LCM_GPIO_RSTN), номер которой указывается в заголовочном файле конфигурации модуля.
bsp/bootloader/u-boot15/include/configs/sl8541e_1h10wifi5g_32b.h
При подключении пользовательского дисплея, необходимо модифицировать эту функцию в соответствии с используемым GPIO, уровнями и длительностями импульса сброса.
Структура lcd_ek79007_mipi_operations
Все вышеописанные функции включаются в структуру lcd_ek79007_mipi_operations, которая используется для вызова функций драйвера из кода инициализации модуля.
static struct panel_ops lcd_ek79007_mipi_operations = {
.init = ek79007_mipi_init,
.read_id = ek79007_readid,
.power = ek79007_power,
};
Модификация этой структуры обычно не требуется.
Структура lcd_ek79007_mipi_info.
Основные параметры дисплея содержатся в структуде данных lcd_ek79007_mipi_info:
static struct panel_info lcd_ek79007_mipi_info = {
/* common parameters */
.lcd_name = "lcd_ek79007_1024x600_mipi",
.type = SPRD_PANEL_TYPE_MIPI,
.bpp = 24,
// .fps = 3,
.width = 1024,
.height = 600,
/* DPI specific parameters */
.pixel_clk = 64000000,
.rgb_timing = {
.hfp = 160, /* unit: pixel */
.hbp = 160,
.hsync = 10,
.vfp = 12, /*unit: line*/
.vbp = 23,
.vsync = 1,
},
/* MIPI DSI specific parameters */
.phy_freq = 500000,
.lane_num = 4,
.work_mode = SPRD_MIPI_MODE_VIDEO,
.burst_mode = PANEL_VIDEO_BURST_MODE,
.nc_clk_en = false,
};
При подключении пользовательского дисплея, необходимо внести в эту структуру параметры подключаемого дисплея.
Структура lcd_ek79007_1024x600_mipi_driver
Данная структура данных является корневой структурой драйвера и содержит указатель на структуру параметров и структуру функций конкретного драйвера.
struct panel_driver lcd_ek79007_1024x600_mipi_driver = {
.info = &lcd_ek79007_mipi_info,
.ops = &lcd_ek79007_mipi_operations,
};
При подключении пользовательского дисплея, необходимо внести в эту структуру имена соответствующих структур, описанных выше.
Makefile
Добавьте соответствующую строку в Makefile по указанному пути, чтобы драйвер был скомпилирован при сборке UBoot
bsp/bootloader/u-boot15/drivers/video/sprd/lcd/Makefile.
obj-$(CONFIG_LCD_ILI9881D_TRULY_MIPI_HD) += lcd_ili9881d_truly_mipi_hd.o
obj-$(CONFIG_LCD_EK79007_1024x600_MIPI) += lcd_ek79007_1024x600_mipi.o
Добавление в panel_cfg.h
Необходимо добавить ссылку на структуру драйвера в общий заголовочный файл LCD панелей в массив поддерживаемых дисплеев supported_panel[]
bsp/bootloader/u-boot15/drivers/video/sprd/lcd/panel_cfg.h
extern struct panel_driver ili9881d_truly_driver;
extern struct panel_driver lcd_ek79007_1024x600_mipi_driver;
extern struct panel_driver lcd_hx8394f_mipi_driver;
static struct panel_cfg supported_panel[] = {
#if defined (CONFIG_LCD_EK79007_1024x600_MIPI)
{
.lcd_id = 0x94,
.drv = &lcd_ek79007_1024x600_mipi_driver,
},
#endif
#if defined (CONFIG_FB_LCD_HX8394F_MIPI)
{
.lcd_id = 0x8394,
.drv = &lcd_hx8394f_mipi_driver,
},
#endif
#ifdef CONFIG_LCD_FT8006P_HLT_MIPI_HDP
{
.lcd_id = 0xf0,
Добавление в главный заголовочный файл проекта
Необходимо добавить имя используемого LCD в файл конфигурации проекта
bsp/bootloader/u-boot15/include/configs/sl8541e_1h10wifi5g_32b.h
/*lcd config*/
#define CONFIG_LCD
#define CONFIG_CMD_BMP
#define CONFIG_SPLASH_SCREEN
#define CONFIG_VIDEO_SPRD
#define CONFIG_DPU_LITE_R1P0
#define CONFIG_DSIH_SPRD_CTRL_RXP0
#define CONFIG_DPHY_SPRD_SHARKLE
//#define CONFIG_LCD_ILI9881C_TRULY_MIPI_HD
//#define CONFIG_LCD_ST7703I_YSKI_MIPI_HD
//#define CONFIG_LCD_ILI9881P_MIPI
#define CONFIG_LCD_EK79007_1024x600_MIPI
#define CONFIG_LCM_GPIO_RSTN 50
#define CONFIG_SYS_WHITE_ON_BLACK
Примечание
Также здесь указывается номер GPIO (CONFIG_LCM_GPIO_RSTN), который используется в качестве линии reset LCD
Включение питания дисплея
В файле инициализации системы
bsp/bootloader/u-boot15/board/spreadtrum/sl8541e_1h10wifi5g_32b/sl8541e_1h10wifi5g_32b.c
Включите линию питания LCD в соответствии со схематехникой вашего устройства:
int board_init(void)
{
int i;
char ch;
setup_chipram_env();
#ifndef CONFIG_FPGA
gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
ADI_init();
/*FPGA forbiden*/
//misc_init();
regulator_init();
regulator_enable("vddcamio");
pmic_adc_Init();
/*FPGA forbiden*/
pin_init();
sprd_gpio_init();
misc_init();
sprd_eic_init();
sprd_led_init();
/*FPGA forbiden*/
sprd_pmu_lowpower_init();
Настройка канала управления подсветкой
В соответствии со схематехникой устройства, настройте канал PWM для управления яркостью подсветки дисплея в файле
bsp/bootloader/u-boot15/board/spreadtrum/sl8541e_1h10wifi5g_32b/sprd_bl.c
#include <common.h>
#include <asm/arch/hardware.h>
#include <asm/io.h>
#include <asm/arch/sprd_reg.h>
#define PWM_INDEX 1
/*r3p0*/
#define PWM_PRESCALE (0x0000)
#define PWM_MOD (0x0004)
#define PWM_DUTY (0x0008)
#define PWM_DIV (0x000c)
#define PWM_PAT_LOW (0x0010)
#define PWM_PAT_HIGH (0x0014)
#define PWM_ENABLE (0x0018)
#define PWM_VERSION (0x001c)
#define PWM2_SCALE 0x0
#define PWM_MOD_MAX 0xff
#define PWM_REG_MSK 0xffff
Значение PWM_INDEX 0 PWMA, значение 1 - PWMB
Настройка разрешения экрана
Система Андроид оперирует понятием плотности (density) изображения на экране. Это связано с тем, что большинство программ используют в визуальном интерфейсе предопределенные иконки, картинки, фоновые изображения в растровом формате. Масштабирование (увеличение в соответствии с разрешением экрана) этих картинок возможно только на определенное значение, как правило на целое число по X и Y. На экране с высоким разрешением обычные иконки будут слишком маленькими, если их не увеличить. И наоборот, если разрешение небольшое, а физические размеры экрана велики, то иконки будут слишком большие. Значение плотности показывает, какие иконки необходимо применять и как их масштабировать, чтобы изображение было удобным к восприятию и для высокого и для низкого разрешения экрана. Следующие значения плотностей являются стандартными: 120 - low density (ldpi), 160 - medium density (mdpi), 240 - high density (hdpi), 320 - extra high density (xhdpi), 480 - extra extra high density (xxhdpi) и т.д.
У используемого дисплея ширина видимой области составляет 152мм (или ~6 дюймов), а число точек по горизонтали равно 1024, что соответствует 170 dpi. Выбираем ближайшее стандартное значение 160 dpi, соответствующее плотности mdpi.
Настройка производится в файле device/sprd/sharkle/sl8541e_1h10wifi5g_32b/sl8541e_1h10wifi5g_32b_Natv.mk
PRODUCT_COPY_FILES += \
$(BOARDDIR)/sl8541e_1h10wifi5g_32b.xml:$(PRODUCT_OUT)/sl8541e_1h10wifi5g_32b.xml
PRODUCT_AAPT_CONFIG := normal large xlarge hdpi mdpi
PRODUCT_AAPT_PREF_CONFIG := mpdi
PRODUCT_AAPT_PREBUILT_DPI := mdpi
TARGET_SYSTEM_PROP += $(wildcard $(TARGET_DEVICE_DIR)/system.prop)
$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)
#Bringup use 1G
CHIPRAM_DDR_1G_LIMITED := true
CHIPRAM_DDR_CUSTOMIZE_LIMITED := true
CHIPRAM_DDR_CUSTOMIZE_SIZE := 0x40000000
#Display/Graphic config
PRODUCT_PROPERTY_OVERRIDES += \
ro.sf.lcd_density=160 \
ro.vendor.sf.lcd_width=152 \
ro.vendor.sf.lcd_height=85 \
ro.opengles.version=196610
#enable blur mode
PRODUCT_PROPERTY_OVERRIDES += \
persist.vendor.cam.ba.blur.version=1 \
Примечание
PRODUCT_AAPT_PREF_CONFIG - это предпочтительное значение. Оно должно быть одним из списка PRODUCT_AAPT_CONFIG. PRODUCT_AAPT_CONFIG - это список возможных к применению плотностей для устройства. Он работает, как список значений в обратном порядке, если предпочтительное значение невозможно применить.
На этом этапе все необходимые настройки выполнены. Для использования дисплея требуется перекомпиляция проекта.
3.3. Сборка¶
После того, как дисплей портирован и настроен в Uboot и ядре Linux, используйте следующие команды для сборки boot, dtbo и Uboot соответственно:
Команда для сборки uboot, ядра Линукса и Device Tree. После ее выполнения будет создан образ u-boot-sign.bin, boot.img и dtbo.img:
./make_super.sh
Команда для сборки только UBoot. После ее выполнения будет создан :
./make_uboot.sh
Далее используйте следующие командв fastboot для загрузки и проверки файлов образов в устройство:
fastboot flash boot boot.img
fastboot flash uboot u-boot-sign.bin
fastboot flash dtbo dtbo.img