Пару недель назад анонимус поделился со мною полными исходниками Qualcomm для SoC msm8626, которые доступны производителям смартфонов. Причём данные исходники предназначены для сборки Android прошивок версии 5.1 (сами исходники датируются апрелем 2015 года).
Сразу после скачивания архива с этими исходниками у меня возникла мысль о сборке модема для моего телефона Highscreen Boost 2 SE из данных исходников.
До сего момента я уже пробовал собирать из исходников 2013 года модем для SoC msm8974 (тоже пренадлежит к Badger семейству), но я бросил это дело сразу, как только столкнулся с очень значительной проблемой. А всё потому, что у меня нет ни одного телефона с чипом msm8974. Теперь же у меня оказались в руках исходники модема для моего телефона и значит теперь со сборкой допустимо промучиться значительно дольшее время. Но всё оказалось значительно проще, т.к. со сборкой мне помог товарищ, который сумел довольно быстро найти хитрое решение проблемы, с которой я столкнулся ещё при попытках сборки модема для msm8974.
Ну да ладно. Хватит уже лирики, приступим к сборочному процессу. Но перед дальнейшем чтением всё же советую ознакомиться с моей предыдущей статьёй «Сборка Qualcomm модема из исходников (msm8916)» , которая посвящена аналогичной тематике.
Если собираете модем впервые, то следует установить некоторые зависимости:
Скачиваем все исходники модема для msm8x26:
После скачивания HEXAGON Tools их следует установить (устанавливаем из директории ~/Downloads):
После того как все исходники и утилиты скачались можно приступить непосредственно к сборке.
Запускаем сборку модема:
Через некоторое время процесс сборки должен завершиться и при успехе вы в консоли должны увидить следующие строки:
Хочу сразу отметить, что если вам понадобиться начать сборку с самого начала, то перед этим нужно выполнить "clean". Для этого нужно в консоли выполнить следующее:
Если сборка завершилась успешно, то результаты следует искать в директории "~/dev/qcom/msm8626/modem_proc/build/ms/":
Оба файла mba.mbn и qdsp6sw.mbn не имеют цифровой подписи. Поэтому их можно использовать только в тех случаях, когда в стоковом образе NON-HLOS.bin модуль модема так же не имеет цифровой подписи. В моём телефоне как раз таки все MBN образы не имеют цифровой подписи.
После удачной сборки основного модуля модема можно приступить к сборке ADSP модуля:
Модуль WCNSS собрать из исходников не получиться, т.к. данный модуль поставляется уже в собранном виде. Поэтому можно сразу приступить к внедрению полученных образов в образ NON-HLOS.bin (его следует взять из стоковой прошивки).
Для начала скачаем специальный Python скрипт, служащий для разбивки MBN-образов на отдельные кодосекции:
После этого скопируйте в директорию ROOTDIR образ модема NON-HLOS.bin (возьмите его из стоковой прошивки) и переименуйте этот файл в NON-HLOS-BASE.bin.
Создайте в директории ROOTDIR файл makeimg.sh со следующим содержимым:
Полученный образ NON-HLOS.bin следует залить в eMMC в соответствующий раздел.
Результаты тестирования полученного модема в программе ookla SpeedTest:
Сразу после скачивания архива с этими исходниками у меня возникла мысль о сборке модема для моего телефона Highscreen Boost 2 SE из данных исходников.
До сего момента я уже пробовал собирать из исходников 2013 года модем для SoC msm8974 (тоже пренадлежит к Badger семейству), но я бросил это дело сразу, как только столкнулся с очень значительной проблемой. А всё потому, что у меня нет ни одного телефона с чипом msm8974. Теперь же у меня оказались в руках исходники модема для моего телефона и значит теперь со сборкой допустимо промучиться значительно дольшее время. Но всё оказалось значительно проще, т.к. со сборкой мне помог товарищ, который сумел довольно быстро найти хитрое решение проблемы, с которой я столкнулся ещё при попытках сборки модема для msm8974.
Ну да ладно. Хватит уже лирики, приступим к сборочному процессу. Но перед дальнейшем чтением всё же советую ознакомиться с моей предыдущей статьёй «Сборка Qualcomm модема из исходников (msm8916)» , которая посвящена аналогичной тематике.
Если собираете модем впервые, то следует установить некоторые зависимости:
sudo apt-get install p7zip-full sudo apt-get install lib32z1 lib32ncurses5 sudo apt-get install scons sudo apt-get install libxml-parser-perl
Скачиваем все исходники модема для msm8x26:
ROOTDIR=$HOME/dev/qcom/msm8626 mkdir -p $ROOTDIR cd $ROOTDIR git clone --branch "master" --progress -v "https://v2.pikacode.com/jsr-d10/qcom_msm8626_modem_proc.git" modem_proc git clone --branch "master" --progress -v "https://v2.pikacode.com/jsr-d10/qcom_msm8626_adsp_proc.git" adsp_proc git clone --branch "master" --progress -v "https://v2.pikacode.com/jsr-d10/qcom_msm8626_wcnss_proc.git" wcnss_proc
Примечание: На текущий момент времени репозиторий "qcom_msm8626_modem_proc" был заблокирован (у QCOM длинные руки). Используйте зеркало: magnet:?xt=urn:btih:61e8b8a520181ade801c251e5ec9352e33a7bb8cДля сборки нам понадобится специальная версия HEXAGON Tools, которую можно использовать для сборки модемов для чипов Badger семейства: HEXAGON Tools 6.4.06.a (170 MB).
После скачивания HEXAGON Tools их следует установить (устанавливаем из директории ~/Downloads):
HEXAGON_ROOT=$HOME/Qualcomm/HEXAGON_Tools 7za x -y -o$HEXAGON_ROOT $HOME/Downloads/hexagon_tools_6.4.06.a.7z
После того как все исходники и утилиты скачались можно приступить непосредственно к сборке.
Запускаем сборку модема:
ROOTDIR=$HOME/dev/qcom/msm8626 cd $ROOTDIR/modem_proc/build/ms/ ./build.sh 8626.gen.prod BUILD_ID=AAAAANAZ -k
Через некоторое время процесс сборки должен завершиться и при успехе вы в консоли должны увидить следующие строки:
scons: done building targets. ============================================================================== SCons build summary ============================================================================== ** Build time... Build start : Fri Oct 14 09:50:27 2016 Build end : Fri Oct 14 10:00:56 2016 Elapsed time : 0:10:30 #------------------------------------------------------------------------------- # BUILD END: AAAAANAZ #-------------------------------------------------------------------------------
Хочу сразу отметить, что если вам понадобиться начать сборку с самого начала, то перед этим нужно выполнить "clean". Для этого нужно в консоли выполнить следующее:
ROOTDIR=$HOME/dev/qcom/msm8626 cd $ROOTDIR/modem_proc/build/ms/ ./build.sh 8626.gen.prod BUILD_ID=AAAAANAZ --clean
Если сборка завершилась успешно, то результаты следует искать в директории "~/dev/qcom/msm8626/modem_proc/build/ms/":
./build.log ./bin/AAAAANAZ/mba.mbn ./bin/AAAAANAZ/qdsp6sw.mbn
Оба файла mba.mbn и qdsp6sw.mbn не имеют цифровой подписи. Поэтому их можно использовать только в тех случаях, когда в стоковом образе NON-HLOS.bin модуль модема так же не имеет цифровой подписи. В моём телефоне как раз таки все MBN образы не имеют цифровой подписи.
После удачной сборки основного модуля модема можно приступить к сборке ADSP модуля:
ROOTDIR=$HOME/dev/qcom/msm8626 cd $ROOTDIR/adsp_proc/build/ms/ ./build.sh msm8x26 msm8x26_MPD BUILD_VER=1234 -k
Модуль WCNSS собрать из исходников не получиться, т.к. данный модуль поставляется уже в собранном виде. Поэтому можно сразу приступить к внедрению полученных образов в образ NON-HLOS.bin (его следует взять из стоковой прошивки).
Для начала скачаем специальный Python скрипт, служащий для разбивки MBN-образов на отдельные кодосекции:
ROOTDIR=$HOME/dev/qcom/msm8626 cd $ROOTDIR wget http://github.com/remittor/qcom-mbn-tools/raw/master/pil-splitter.py
После этого скопируйте в директорию ROOTDIR образ модема NON-HLOS.bin (возьмите его из стоковой прошивки) и переименуйте этот файл в NON-HLOS-BASE.bin.
Создайте в директории ROOTDIR файл makeimg.sh со следующим содержимым:
cd `dirname $0` ROOTDIR=$(pwd) TMPDIR=mbn_images rm -rf $ROOTDIR/$TMPDIR mkdir -p $ROOTDIR/$TMPDIR cd $ROOTDIR/$TMPDIR MODEM_STK=$ROOTDIR/NON-HLOS-BASE.bin MODEM_NEW=$ROOTDIR/NON-HLOS.bin BUILD_ID=AAAAANAZ IMAGE_DIR=$ROOTDIR/modem_proc/build/ms/bin/$BUILD_ID python $ROOTDIR/pil-splitter.py $IMAGE_DIR/qdsp6sw.mbn modem python $ROOTDIR/pil-splitter.py $IMAGE_DIR/mba.mbn mba BUILD_ID=AAAAAAAA IMAGE_DIR=$ROOTDIR/adsp_proc/build/ms/bin/$BUILD_ID python $ROOTDIR/pil-splitter.py $IMAGE_DIR/dsp2.mbn adsp BUILD_ID=8x26 IMAGE_DIR=$ROOTDIR/wcnss_proc/build/ms/bin/$BUILD_ID python $ROOTDIR/pil-splitter.py $IMAGE_DIR/wcnss.mbn wcnss MODEMVERSTR=`grep -aohPz "QC_IMAGE_VERSION_STRING=.*" ./modem.*` MODEMVER=`echo $MODEMVERSTR | cut -d "=" -f 2` echo $MODEMVER > $ROOTDIR/ver_info.txt MODEM_VDISK=/media/vdisk cp -f $MODEM_STK $MODEM_NEW sudo mkdir -p $MODEM_VDISK sudo mount -t vfat $MODEM_NEW -o rw,umask=0000,shortname=lower $MODEM_VDISK rm -f $MODEM_VDISK/image/modem.* rm -f $MODEM_VDISK/image/mba.* rm -f $MODEM_VDISK/image/adsp.* rm -f $MODEM_VDISK/image/wcnss.* cp -f ./* $MODEM_VDISK/image/ rm -f $MODEM_VDISK/verinfo/ver_info.txt mkdir -p $MODEM_VDISK/verinfo cp -f $ROOTDIR/ver_info.txt $MODEM_VDISK/verinfo/ sudo umount $MODEM_NEW cd $ROOTDIRТеперь, запустив на выполнение скрипт makeimg.sh , вы получите на выходе новый файл NON-HLOS.bin , содержащий все ранее собранные MBN-файлы (точнее их кодосекции).
Полученный образ NON-HLOS.bin следует залить в eMMC в соответствующий раздел.
Результаты тестирования полученного модема в программе ookla SpeedTest:
Этот комментарий был удален автором.
ОтветитьУдалитьСпасибо за интересные статьи. Информации по сборке радиомодулей для Qualcomm в интернете действительно мало, в свое время мне удалось найти только один китайский блог (здесь и здесь) в котором рассматривались эти вопросы.
ОтветитьУдалитьp.s. Кстати, а вы случайно не богаты Hexagon Tools 5.0.08? Интересует именно эта версия, т.к. 6.4.06 не собирает мой modem для 9x25 чипа. Если в двух словах, то ковырялся с ним около недели, удалось победить все ошибки, но на этапе линковки получаю что-то вроде:
In function `tplt_task':
tplt_cntrl.c:(.text.tplt_task+0xc4): relocation truncated to fit: R_HEX_GPREL16_2 against symbol `dog_plt_rpt_time' defined in .rodata.dog_plt_rpt_time section in __local.dir/dog.o
в нескольких местах. И как это победить я пока не придумал. Штатно, исходники предназначены для сборки с помощью Hexagon Tools 5.0.08, которая, к сожалению, у меня отсутствует.
Здравствуйте, сам я в программировании не разбираюсь, но имею такую проблему:есть телефон Samsung Note 4 Sprint(n910p) на квалкоме, он не поддерживает Российские band сетей 4G. Есть подозрения, что это дело можно исправить поковырявшись в модеме. Это можно как то проверить? Спасибо
ОтветитьУдалитьЭто больше похоже на OEM пакет. Там куча бинарных библиотек используется. Вот если бы реальные сырцы нарыть.
ОтветитьУдалитьНа какой версии Android вы установили файлы?
ОтветитьУдалить"как только столкнулся с очень значительной проблемой"
ОтветитьУдалить"со сборкой мне помог товарищ, который сумел довольно быстро найти хитрое решение проблемы, с которой я столкнулся ещё при попытках сборки модема для msm8974."
А с какой первоначально проблемой столкнулись? из статьи не понятно, все вроде довольно просто выглядит.
Добрый день! Репозиторий и зеркало закрыли. В qcom_leaked_sources_zip? который нашёлся по magnet ссылке, нету 8626. Поделитесь, пожалуйста, исходниками. Как я понимаю, было 3 каталога: modem_proc, adsp_proc, wcnss_proc. Но буду рад и прочим дополнительным. Спасибо!
ОтветитьУдалить