Проанализируйте процесс упаковки Tina для Allwinner и внедрите упаковку для создания образов Tina в корне сборки, поддерживая программирование PhoenixSuit.
Проанализируйте процесс упаковки Tina для Allwinner и внедрите упаковку для создания образов Tina в корне сборки, поддерживая программирование PhoenixSuit.

Краткое описание шагов

Сначала запишите вывод журнала официального пакета tina-sdk.

Язык кода:javascript
копировать
book@virtual-machine:~/D1s-Core/tina-d1-h$ pack
--==========--
PACK_CHIP         sun20iw1p1
PACK_PLATFORM     tina
PACK_BOARD        d1-h-nezha
PACK_KERN
PACK_DEBUG        uart0
PACK_SIG          none
PACK_SECURE       none
PACK_MODE         normal
PACK_FUNC         android
PACK_PROGRAMMER   none
PACK_TAR_IMAGE    none
PACK_TOPDIR       /home/book/D1s-Core/tina-d1-h
--==========--
No kernel param, parse it from d1-h
copying tools file
copying configs file
storage_type value is 5
rm /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition_nor.fex
rm /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/image_nor.cfg
copying boot resource

LZMA 4.65 : Igor Pavlov : Public domain : 2009-02-03
copying boot file
make user resource for : /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
handle partition user-res
no user resource partitions
APP_PART_DOWNLOAD_FILE = /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/app.fex
Need size of filesystem
no data resource partitions
don't build dtbo ...

create sys_partiton.fex +++++++++++++++++++++++++++++++++++++++++++++++++++++4
argc = 2
input name sys_partition.fex
Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
update_fdt: num 1752 randto1k
parser 1 file ok
create sys_partiton.fex+++++++++++++++++++++++++++++++++++++++++++++++++++++5
update_chip
pack boot package
GetPrivateProfileSection read to end
content_count=3
LICHEE_REDUNDANT_ENV_SIZE config in BoardConfig.mk
--mkenvimage create redundant env data!--
---redundant env data size 0x20000---
packing for tina linux
normal
update mbr use 4++++++++++++++++++++++
mbr count = 4
partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex

mbr size = 252
mbr magic softw411
disk name=boot-resource
disk name=env
disk name=env-redund
disk name=boot
disk name=rootfs
disk name=dsp0
disk name=recovery
this is not a partition key
update_for_part_info 0
crc 0 = 4c7bc2df
crc 1 = d9c69382
crc 2 = bc706624
crc 3 = 29cd3779
gpt_head->header_crc32 = 0x892c53ba
GPT----part num 8---
gpt_entry: 128
gpt_header: 92
GPT:boot-resource: a1f8          c177
GPT:env         : c178          c36f
GPT:env-redund  : c370          c567
GPT:boot        : c568          1161f
GPT:rootfs      : 11620         1b597
GPT:dsp0        : 1b598         1b987
GPT:recovery    : 1b988         227c7
GPT:UDISK       : 227c8         ffffffde
update gpt file ok
update mbr file ok
temp = 20
mbr count = 4 total_sectors = 15269888 logic_offset = 40960

partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex

mbr size = 252
mbr magic softw411
disk name=boot-resource
disk name=env
disk name=env-redund
disk name=boot
disk name=rootfs
disk name=dsp0
disk name=recovery
this is not a partition key
update_for_part_info 0
crc 0 = 4c7bc2df
crc 1 = d9c69382
crc 2 = bc706624
crc 3 = 29cd3779
gpt_head->header_crc32 = 0x1328fa28
GPT----part num 8---
gpt_entry: 128
gpt_header: 92
GPT:boot-resource: a1f8          c177
GPT:env         : c178          c36f
GPT:env-redund  : c370          c567
GPT:boot        : c568          1161f
GPT:rootfs      : 11620         1b597
GPT:dsp0        : 1b598         1b987
GPT:recovery    : 1b988         227c7
GPT:UDISK       : 227c8         e8ffde
update gpt file ok
update mbr file ok
cp sys parttion.fex  for dragon.fex ++++++++++++++++++++++++++++
====================================
show "sys_partition_for_dragon.fex" message
------------------------------------
  [mbr]
  mbr_size  : 252 Kbyte
------------------------------------
  partition_name  : boot-resource
  partition_size  : 8064
  downloadfile  : boot-resource.fex
  boot-resource.fex size : 3.0M byte
------------------------------------
  partition_name  : env
  partition_size  : 504
  downloadfile  : env.fex
  env.fex size : 128K byte
------------------------------------
  partition_name  : env-redund
  partition_size  : 504
  downloadfile  : env.fex
  env.fex size : 128K byte
------------------------------------
  partition_name  : boot
  partition_size  : 20664
  downloadfile  : boot.fex
  boot.fex -> /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/boot.img
  boot.img size : 5.0M byte
------------------------------------
  partition_name  : rootfs
  partition_size  : 40824
  downloadfile  : rootfs.fex
  rootfs.fex -> /home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/rootfs.img
  rootfs.img size : 5.9M byte
------------------------------------
  partition_name  : dsp0
  partition_size  : 1008
  downloadfile  : dsp0.fex
  dsp0.fex size : 249K byte
------------------------------------
  partition_name  : recovery
  partition_size  : 28224
------------------------------------
/home/book/D1s-Core/tina-d1-h/out/host/bin/
/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
Begin Parse sys_partion.fex
Add partion boot-resource.fex BOOT-RESOURCE_FEX
Add partion very boot-resource.fex BOOT-RESOURCE_FEX
FilePath: boot-resource.fex
FileLength=2f8c00Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion boot.fex BOOT_FEX00000000
Add partion very boot.fex BOOT_FEX00000000
FilePath: boot.fex
FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
Add partion very rootfs.fex ROOTFS_FEX000000
FilePath: rootfs.fex
FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
Add partion very dsp0.fex DSP0_FEX00000000
FilePath: dsp0.fex
FileLength=3e38cBuildImg 0
Dragon execute image.cfg SUCCESS !
----------image is for nand/emmc----------
----------image is at----------

/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/tina_d1-h-nezha_uart0.img

pack finish
Анализ процесса упаковки

Из приведенного выше журнала мы видим, что весь процесс упаковки условно разделен на несколько этапов:

  1. Укажите некоторые переменные среды сравнения, например выходной каталог зеркала. Некоторая информация о конфигурации зеркала.
  2. Затем скопируйте зеркало в каталог, где нужен Пакет, и запустите унифицированную обработку.
  3. в соответствии сфайловая информацию о разделах системы, преобразуйте ее в Формат, подходящий для использования последующими программами.
  4. Преобразуйте информацию о разделах в специализированные заголовки разделов GPT/MBR.
  5. Используйте дракон Пакет,Все файлы, указанные в файле конфигурации,Подвести итог,Вывод пакета.

Использование командной операции в основном разделено на 4 этапа.

Язык кода:javascript
копировать
busybox unix2dos sys_partition.fex
tina-d1-h/tools/pack-bintools/src/script  sys_partition.fex
tina-d1-h/tools/pack-bintools/src/update_mbr  sys_partition.bin 4
tina-d1-h/tools/pack-bintools/src/dragon  image.cfg sys_partition.fex
анализ дракона

внутри Самое главное это sys_partition.fex файл, который определяет информацию о разделах И размер и т. д. может войти скомпилировано tina-d1-h/out/d1-h-nezha/image Посмотреть в каталоге.

Мы можем напрямую просмотреть файл sys_partition.fex.

Язык кода:javascript
копировать
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ cat sys_partition_for_dragon.fex
;---------------------------------------------------------------------------------------------------
; проиллюстрировать: Строки в скрипте чувствительны к регистру. Пользователи могут указать значение после Исправлять"=", но не строку перед Исправлять.
;---------------------------------------------------------------------------------------------------


;---------------------------------------------------------------------------------------------------
;                                   Конфигурация параметров загрузки прошивки
;---------------------------------------------------------------------------------------------------
;***************************************************************************************************
;    размер МБР, в Кбайтах
;***************************************************************************************************
[mbr]
size = 252

;***************************************************************************************************
;                                              Конфигурация раздела
;
;
;  partition Пример определения:
;    [partition]                ;  //Указывает раздел
;    name        = USERFS2      ; //Имя раздела
;    size        = 16384        ; //Размер раздела единица: Максимальное количество представленных секторов и разделов — 2^31. * 512 = 2T
;    downloadfile = "123.fex"   ; //Путь и имя загруженного файла могут быть относительными — это относительно раздела, в котором находится файл image.cfg. Вы также можете использовать абсолютные пути
;    keydata     = 1            ; //Раздел частных данных, данные не будут потеряны при возобновлении массового производства
;    encrypt     = 1            ; //Использование метода шифрования для записи обеспечит шифрование данных, но потеряет скорость записи.
;    user_type   = ?            ; //Частное использование
;    verify      = 1            ; //Требуется проверить правильность после завершения массового производства
;
; Примечание: 1. Имя уникально. Одно и то же имя не разрешено
;     2. Максимальная длина имени — 12 символов.
;     3、size = 0, создаст пустой раздел без размера
;     4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size)
;***************************************************************************************************
[partition_start]

[partition]
    name         = boot-resource
    size         = 8064
    downloadfile = "boot-resource.fex"
    user_type    = 0x8000


[partition]
    name         = env
    size         = 504
    downloadfile = "env.fex"
    user_type    = 0x8000

[partition]
    name         = env-redund
    size         = 504
    downloadfile = "env.fex"
    user_type    = 0x8000

[partition]
    name         = boot
    size         = 20664
    downloadfile = "boot.fex"
    user_type    = 0x8000

[partition]
    name         = rootfs
    size         = 40824
    downloadfile = "rootfs.fex"
    user_type    = 0x8000

[partition]
    name         = dsp0
    size         = 1008
    downloadfile = "dsp0.fex"
    user_type    = 0x8000

[partition]
    name         = recovery
    size         = 28224
    ;downloadfile = "recovery.fex"
    user_type    = 0x8000

внутри всего скачать файл Это все файлы, которые мы скомпилировали для записи. Поэтому вам нужно только поместить соответствующие файлы в этот каталог для выполнения операции упаковки. если ты не изменишься Судя по размеру файла,Может быть выполнено напрямуюtina-d1-h/tools/pack-bintools/src/dragon image.cfg sys_partition.fex команда, вы обнаружите, что она генерирует tina_d1-h-nezha_uart0.img, изображение, это изображение такое же, как и созданное с помощью команды Pack.

Таквнутри Есть еще один файл img.cfg. Этот файл содержит множество fex. В настоящее время я думаю, что эти файлы привязаны к официальным инструментам программирования Allwinner, поэтому вам не нужно о них беспокоиться, пока они создаются. Просто поместите эти инструменты в текущий каталог.

С помощью этих двух файлов вы можете напрямую использовать упаковку Dragon для создания образа системы, который можно запрограммировать с помощью Phoenix Programmer.

анализ sys_partiton

Если формат образа вашей системы остается неизменным по размеру, то всегда можно использовать приведенную выше команду. Но в это время я хочу сам скомпилировать ядро, добавить модули драйверов, скомпилировать файловые системы и в результате добавить компоненты. изображение становится больше. Что делать?

Проще говоря, не достаточно ли напрямую изменить размер файла sys_partition.fex? Но вы обнаружите, что это не работает, выдаст ошибку. В настоящее время мы продолжим анализировать выходные данные журнала. Мы обнаружим, что при выполнении упаковки Dragon у нас есть только следующая выходная информация, а выше нет информации о разделах GPT/MBR.

Язык кода:javascript
копировать
/home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/
/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
Begin Parse sys_partion.fex
Add partion boot-resource.fex BOOT-RESOURCE_FEX
Add partion very boot-resource.fex BOOT-RESOURCE_FEX
FilePath: boot-resource.fex
FileLength=2f8c00Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion boot.fex BOOT_FEX00000000
Add partion very boot.fex BOOT_FEX00000000
FilePath: boot.fex
FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
Add partion very rootfs.fex ROOTFS_FEX000000
FilePath: rootfs.fex
FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
Add partion very dsp0.fex DSP0_FEX00000000
FilePath: dsp0.fex
FileLength=3e38cBuildImg 0
Dragon execute image.cfg SUCCESS !

Итак, сейчас вам нужно оглянуться назад. Откуда взялся этот файл и как он был создан? Путем поиска и анализа выясняется, что он происходит из файла sys_partiton.bin, но этот файл является двоичным, а также упаковывается и генерируется позже, поэтому нам еще придется вернуться и узнать, как работает файл sys_partition.bin. был создан.

То же самое сочетается с журналом и печатью.

Нашел следующие две команды. занятая коробка unix2dos sys_partition.fex скрипт sys_partition.fex

Сначала я подумал, что этот скрипт представляет собой некий пакет Ubuntu, но позже я узнал, что это также инструмент, предоставленный Allwinner. Теперь, когда мы нашли все инструменты, можем попробовать его модифицировать.

Измените sys_partition.fex, чтобы изменить его размер до 70824.

Затем сохраните и выйдите и выполните следующую команду с самого начала, чтобы подтвердить правильность предположения.

Язык кода:javascript
копировать
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ busybox unix2dos sys_partition.fex
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/script  sys_partition.fex
argc = 2
input name sys_partition.fex
Script 1 source file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.fex
Script 1 bin file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
update_fdt: num 1752 randto1k
parser 1 file ok
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/update_mbr  sys_partition.bin 4
mbr count = 4

partitation file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sys_partition.bin
mbr_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/sunxi_mbr.fex
download_name file Path=/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image/dlinfo.fex

mbr size = 252
mbr magic softw411
disk name=boot-resource
disk name=env
disk name=env-redund
disk name=boot
disk name=rootfs
disk name=dsp0
disk name=recovery
this is not a partition key
update_for_part_info 0
crc 0 = ea84dacc
crc 1 = 7f398b91
crc 2 = 1a8f7e37
crc 3 = 8f322f6a
gpt_head->header_crc32 = 0x53fc3a66
GPT----part num 8---
gpt_entry: 128
gpt_header: 92
GPT:boot-resource: a1f8          c177
GPT:env         : c178          c36f
GPT:env-redund  : c370          c567
GPT:boot        : c568          1161f
GPT:rootfs      : 11620         22ac7
GPT:dsp0        : 22ac8         22eb7
GPT:recovery    : 22eb8         29cf7
GPT:UDISK       : 29cf8         ffffffde
update gpt file ok
update mbr file ok
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$ ~/D1s-Core/tina-d1-h/tools/pack-bintools/src/dragon  image.cfg sys_partition.fex
/home/book/D1s-Core/tina-d1-h/tools/pack-bintools/src/
/home/book/D1s-Core/tina-d1-h/out/d1-h-nezha/image
Begin Parse sys_partion.fex
Add partion boot-resource.fex BOOT-RESOURCE_FEX
Add partion very boot-resource.fex BOOT-RESOURCE_FEX
FilePath: boot-resource.fex
FileLength=2f8c00Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion env.fex ENV_FEX000000000
Add partion very env.fex ENV_FEX000000000
FilePath: env.fex
FileLength=20000Add partion boot.fex BOOT_FEX00000000
Add partion very boot.fex BOOT_FEX00000000
FilePath: boot.fex
FileLength=4f4000Add partion rootfs.fex ROOTFS_FEX000000
Add partion very rootfs.fex ROOTFS_FEX000000
FilePath: rootfs.fex
FileLength=5e0000Add partion dsp0.fex DSP0_FEX00000000
Add partion very dsp0.fex DSP0_FEX00000000
FilePath: dsp0.fex
FileLength=3e38cBuildImg 0
Dragon execute image.cfg SUCCESS !
book@virtual-machine:~/D1s-Core/tina-d1-h/out/d1-h-nezha/image$

Наконец, в текущем каталоге был создан файл с именем tina_d1-h-nezha_uart0.img и записан в него с помощью инструмента Phoenix Burning. Вы обнаружите, что можете записать раздел, в который вы добавили файлы, и запустить его.

Итак, на данный момент проблема все еще существует: D1 использует файловую систему типа sqashfs. В настоящее время вам также необходимо проанализировать метод создания их файловой системы. Для этого вы можете использовать команду grep, см. следующее.

Анализ метода создания файловой системы

Наконец получил этот rootfs.squashfs -noappend -processors 9 -nopad -noappend -root-owned -comp xz -b 256k -p ‘’‘/dev d 755 0 0’‘’ -p ‘’‘/dev/console c 600 0 0 5 1’‘’ -processors 4\n’ >> /home/book/buildroot_dshannezhastu/buildroot-awol/output/build/buildroot-fs/squashfs/fakeroot

Потом закинуть в buildroot, чтобы сделать систему, которую сможет использовать ядро ​​D1, Обратите внимание, что местоположение процесса init в переменной среды tina отличается от buildroot и его необходимо изменить. Обратите внимание, что местоположение процесса init в переменной среды tina отличается от buildroot и его необходимо изменить. Обратите внимание, что местоположение процесса init в переменной среды tina отличается от buildroot и его необходимо изменить.

Наконец, позвольте мне сообщить вам, что мы поддержали исходный код полного образа системы buildroot NEZHA D1. https://github.com/DongshanPI/buildroot_dshannezhastu

После клонирования вам необходимо обновить подмодуль git и выполнить следующую команду, чтобы получить исходный код подмодуля.

git submodule update --init --recursive git submodule update --recursive --remote git pull --recurse-submodules

Затем войдите в каталог buildroot-awol и подождите некоторое время, чтобы сгенерировать образ флэш-памяти для программирования Spinand. Конечно, для начала вы также можете записать на tf-карту. . buildroot_dshannezhastu/buildroot-awol$ make BR2_DL_DIR=…/Download BR2_EXTERNAL=…/br2nezhastu/ dshannezhastu_spinand_core_defconfig

Вывод информации после завершения компиляции.

Вывод изображения находится в каталоге output/images/.

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.