Отговори на тема  [ 265 мнения ]  Отиди на страница Предишна  1 ... 13, 14, 15, 16, 17, 18  Следваща
LPWA - Narrow Band, Lora... 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
MT6261 ( ARM926EJ-S ) ... armv5te

_________________
main[-1u]={1};


Съб Яну 22, 2022 11:36 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
ако на някой му е интересно Position Independent Code

от известно време ме тормози "лесно" добавяне на Kернел функции към User API/SDK, така че да бъдат Firmware независими ... колкото е възможно
функциите са на различни адреси в различните Firmware ( GSM модули с User API/SDK )
по принцип SDK-то е сравнително Firmware независимо, но липсват функции ... като пример SSL/TLS или липсват soc_getsockopt/setsockopt ... и тем подобни
също така няма протекция на кернела ... MPU/MMU ... долния пример няма да разботи за MPU

до сега ги правех като пойнт към функция ... а компилатора прави разни гимнастики...
int (*SSL_connect)(void *ssl) = 0x12345678; // адрес в кернела

но попрочетох за fPIC ( Position Independent Code ) - прави динамична библиотека, където всички непознати функции са "организирани" в
PLT ( Procedure Linkage Table ) и GOT ( Global Offset Table )
първото (PLT) е таблица с джъмпове, които взимат адреса от втората таблица (GOT)

обикновено всички компутри работят с fPIC - xxx.DLL, yyy.SO ... динамично свързани библиотеки
тук уловката е че иска много ресурси и най-вече RAM

Изображение

Как работи - ще обяснявам накратко...
Когато Приложението е компилирано, непознатите кернел функции са добавени в PLT таблицата и "белязани" с @plt ... пример: SSL_connect@plt
а в GOT таблицата са добавени евентуалните адреси...
например Linux ще изпълнява Приложение - отваря файла с APP, malloc RAM къде да я разтовари и презаписва всички адреси в GOT таблицата на приложението
приложението вече може да call непознатите функции ... или линукса ще изреве, че не поддъжа някой от тях

и как да се възползвам в случая, при условие, че ползвам "микро-контролерче" и User пространсвото ми е FLASH: 300k, RAM: 100k, a кернела не подържа динамични библиотеки
(по принцип е подържал, но някое джигитайче е орязал тази част и си е реализирал свое API)

Та ... направих един "флашив" ASM файл, с адрес началото (за да знам адресa) на RAM .data секция ( тази RAM e rwx - executable )
този ASM също така не дава на компилатора да реве за непознати фунции, а съответно фунциите са описани в хидър файла
който изглежда така:
Код:
Foo_0: // име на необходимите кернел функции
    .long 0xE51FF004
    .long 0
Foo_1:
    .long 0xE51FF004
    .long 1
...
Foo_N:
    .long 0xE51FF004
    .long N

където 0xE51FF004 е кода на ( ARMv5 ) LDR PC, =<label>
a второто би трябва да бъде адрес за jump, но в случая имитирам индекс, който после ще бъде сменен с истинския адрес в кернела
демек направих имитация на PLT таблица с размер 8 байта RAM за функция

сега остава да имитирам GOT таблица ... за последното Firmware и евентуално ново, абе да кажем ще подържам три ...
Код:
typedef struct
{
    const char *FW_VER;         // "version_01"
    const char *FW_VER_ADDR;    // адреса във Firmware къде има стринга "version_01" ... за определяне на версията
    uint32_t address[50];       // адресите на фунциите
} api_t;


правим масив за всяка версия ( питон скрипт бърника из BIN Firmware и "печата" долното )
Код:
static api_t API_TABLE[3] = {
    { "M66FAR01A12BT", (const char *)0x100200C0, { 0x100E3995,  0x100E3949, ..... },},
    { "M66FAR01A13BT", (const char *)0x100200C0, { 0x10012345,  0x10045678, ..... },},
    { "M66FAR01A14BT", (const char *)0x100200C0, { 0x10022222,  0x10055555, ..... },},
}


в случая им обърнах значенията ROM-PLT RAM-GOT, при мен стана обратното RAM-PLT, ROM-GOT, то на практика аз ще ги ползвам, а кернела не знае какво правя
реално мога да викна фунцкия ( стария вариант ) res = (int (*)(void)) API_TABLE[1].address[43]() ама писането е повече и съм "мързелив" :D
по-по-най изглежда: res = Foo();
Код:
int api_setup(void)
{
    uint32_t GOT_INDEX;
    uint32_t *PLT = (uint32_t *)&__data_start;

    // DETECT FIRMWARE
    for (int i = 0; i < API_FW_COUNT; i++)
    {
        if (0 == memcmp(API_TABLE[i].FW_VER_ADDR, API_TABLE[i].FW_VER, sizeof(API_TABLE[i].FW_VER)))
        {
            api = &API_TABLE[i];
            api_index = i;
            break;
        }
    }

    if (NULL == api) // ABORT API
    {
        printf("[ERROR] Unknown Firmware\n");
        while (0xE51FF004 == *PLT++)      // Test for LDR PC, =<label>
            *PLT++ = (uint32_t)abort + 1; // Set all abort()
        return -1;
    }

    // REPLACE PLT
    while (0xE51FF004 == *PLT++) // Search & Test for LDR PC, =<label>
    {
        GOT_INDEX = *PLT;
        if (GOT_INDEX < API_FUNCTIONS_COUNT)
        {
            printf("[API] GOT[ %02d ] ---> %08X\n", (int)GOT_INDEX, (int)api->address[GOT_INDEX]);
            *PLT++ = api->address[GOT_INDEX]; // replace index with addres
        }
        else
        {
            printf("[ERROR] GOT[ %02d ]\n", (int)GOT_INDEX);
            *PLT++ = (uint32_t)abort + 1; // function problem ?!
        }
    }

    printf("[API] Firmware: %s\n\n", api->FW_VER);
    return 0;
}

void app_main(void)
{
    api_setup();
    // ... и тн
    TEST_MD5();
}

първи тест:

Код:
[API] GOT[ 00 ] ---> 100E3995
[API] GOT[ 01 ] ---> 100E3949
.....
[API] GOT[ 42 ] ---> 100BFC05
[API] GOT[ 43 ] ---> 100BEFBD
[API] Firmware: M66FAR01A12BT

[DMP] 'TEST API-MD5' [F012A5D0] (16 bytes)
0000:  A0 73 59 73 44 A8 6A C3 0D 82 12 0A 88 EA FA 2B 


вероятно е да съм допуснал нещо "тактическо"
ако нещо - критикувайте :axe:

_________________
main[-1u]={1};


Сря Яну 26, 2022 12:29 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
една свежарска статия за старите талафони
има примери за сложната версия ( ELF Loader ) на горния пример
https://habr.com/ru/post/645085/
само не разбрах тоя пич защо използва ELF лоадера като в кернела на телефона има такъв

_________________
main[-1u]={1};


Чет Яну 27, 2022 9:29 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
проба... едно... две... три :D
Arduino ... за HiSilicon Hi2115 LPWA NB-IoT


Прикачени файлове:
Hisilicon Hi2115.jpg
Hisilicon Hi2115.jpg [ 439.62 KiB | Прегледано 2798 пъти ]

_________________
main[-1u]={1};
Сря Фев 02, 2022 3:13 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Окт 25, 2009 12:48 pm
Мнения: 661
Мнение Re: LPWA - Narrow Band, Lora...
Как ги портваш тези работи? На мен ми се струва като фантастика, щото не съм програмист. Знам, че има готови портвания по нета, но не съм опрял още до тях. Но ми се иска малко повече да се просветля. Има ли литература, елементарни примери като за начало как да портвам за Ардуино например друг чип/борд? Малко сламки ще дадеш ли?


Сря Фев 02, 2022 4:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
Цитат:
"...щото не съм програмист..."

как ще го направиш
трябват ти познания за самия контролер както и "make", компилатор, линкер, ASM, C и C++ и разни скриптове като Java и/или Python

литература не съм видял, има тук там кратки докуменатции ... и форуми
Общо взето Ардуино е C++ "библиотека" за работа със String, Strems и други ... и "стандарт" за драйвери
а основните IDE са Arduino IDE и PlatformIO( тва може повече ) и двете имат "собствени" MAKE
на първото, са едни текстови файлове ... пример https://github.com/Wiz-IO/wizio-arduino ... atform.txt
а второто използва Python(SConn) ... пример https://github.com/Wiz-IO/wizio-pico/bl ... -RP2040.py
и двата примера "правят" едни също

Arduino IDE е "шибано" за развой на платформи
а ако разбареш как работи PlatformIO ... после лесно може прехвърлиш кода за Arduino IDE

_________________
main[-1u]={1};


Сря Фев 02, 2022 4:39 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
BTW; горното сигурно няма да го завърша - липсва ми доста информация, просто ми попадна частичен SDK за чипа, който се оказва доста интересна "пляска"
3 куров М0 ( секюрити, модем и апликация ) за апликацията са отделени FLASH: 256k, RAM:64k, които са напълно достатъчни за Arduino,
което от своя страна е най-доброто решение за LPWA NB/CAT ... в смисъл: чипа работи има няма 30 секунди, праща нещо някъде и заспива за "дни"
и като се вземе в предвид, че в мрежата има хиляди OpenSource решения за протоколи, сензори и примери ... едно приложение се прави за "часове"

_________________
main[-1u]={1};


Сря Фев 02, 2022 4:56 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Окт 25, 2009 12:48 pm
Мнения: 661
Мнение Re: LPWA - Narrow Band, Lora...
При теб - да. Ще се пробвам, да видя аз докъде ще я докарам, дано не отнеме години :)
Благодаря още веднъж за сламките!


Сря Фев 02, 2022 5:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
кратко обяснение:

за Adruino IDE ( старото/класическо, новото трябва да е "почти" като класическото )

1. не знам как се прави нов порт офлайн ... всеки път ми реве за глупости

всичко започва с един JSON ... xxx_index.json (дето се пасва в Arduino -> File -> Preferences -> Additional Boards Manager -> URL ),
който е описание за порта .... пример
https://github.com/Wiz-IO/wizio-arduino ... index.json

2. онлайн го правя така
правя празни папки ( както ги иска Arduino ) със файловете

platform.txt
boards.txt
programmers.txt

ала бала попълнени...

оправям пътя за download в xxx_index.json
зипвам ги и ги качвам за download

пасвам JSON-на в ардуиното - той ги сваля и инсталира "правилно"
и после EDIT на всичко по "папките" ... и га стане всчико готово - зипва се както в началото и се качва за download


за PlatformIO ( AKO - по-добре него учете - има много възможности )
това е плъгин за VSCODE ( IDE редактор ) който използва Python ( SConn - библиотека, която е "еквивалент" на make, cmake... ) и подържа GitHUB, та дори и DEBUG като open-ocd
и предоставя редиктеруема логика за "MAKE" и разни екстри например като boot-uploader написан на Python(демек става мулти-платформен:Win,Lin,Mac...etc)

порта е разделен на няколко папки: ( в директорията C:\Users\USER-NAME\.platformio ... при линукса, мак-а и разни други са в home папката )

platforms/MY-PORT ( билдер ) пример https://github.com/Wiz-IO/wizio-pico
packages/framework-MY-PORT ( сорс-кодове ) пример https://github.com/Wiz-IO/framework-wizio-pico
packages/toolchain-arm-compiler ( компилатора ) пример: тук използвам GCC който го предоставя PlatformIO за Win, Linux и Mac .... сваля си го "автоматично"
packages/tool-MY-PORT ( разни инструменти, ако са необходими )

всяка папка има "задължителен" съответен JSON с описание кое какво е ... пример: https://github.com/Wiz-IO/wizio-pico/bl ... tform.json
после изграждаме билдера ... platforms/MY-PORT ... няколко "задължителни" Python скрипта с определена логика
като попълваме и packages/framework-MY-PORT ( сорс-кодовете, SDK, API ... )
в този "билдер" може да съдържа различни "билдери" ... например: baremetal, накаква RTOS платформа ... или Arduino
там има и папка boards ... или определен чип ... с описание ... пример https://github.com/Wiz-IO/wizio-pico/tree/main/boards
тази boardс или чип се избира чрез един INI файл в самия ПРОЕКТ и дава възможност за "проста" редакция на порта например искаме да добавим -D/-I/-L ALA-BALA за проекта

по принцип документацията е тук https://docs.platformio.org/en/latest/p ... build.html

аз използвам PlatformIO ... някак си ми е по лесен и удобен, а и онези папки като ги кача в GITHUB всяка редакция достига до потребителя
и те така...

_________________
main[-1u]={1};


Сря Фев 02, 2022 6:37 pm
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Окт 25, 2009 12:48 pm
Мнения: 661
Мнение Re: LPWA - Narrow Band, Lora...
Благодаря още веднъж!
:prayer: :prayer: :prayer:


Сря Фев 02, 2022 11:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
би било чудесно да тръгне :D ... теоретически се компилира ... бина за сега е 74к от 256к ...
AT командите (технология от 19 век и заемат твърде много място) съм ги разкарал - има RPC (mailbox) между cores

ама бут-лоадера на HiSilicon е твърде "смотан"
от ELF правят BIN ... HASH SHA256 на BIN-a .... вероятно replace някво инфо в началото на BIN-а,
после правят от BIN-a некакъв файл с разширение application..fwpkg
и накрая upload тва fwpkg ... някакси го качват в модула ( вероятно с АТ команди )
най-вероятно M0 Core Security e нещо като бут и прави проверки за оня HASH

по принцип имам туловете и мога да питам - но не ми се занимава с джигитайци...

стартъпа на SoC е нящо такова https://github.com/Wiz-IO/TEST/blob/mai ... o_main.cpp


Прикачени файлове:
main.jpg
main.jpg [ 375.89 KiB | Прегледано 2686 пъти ]

_________________
main[-1u]={1};
Пет Фев 04, 2022 2:36 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
малко SRC ... няма смисъл да публикувам цялата платформа - нямам модул за проби и не знам как да upload RAW BIN @ Application core

https://github.com/Wiz-IO/TEST/tree/main/Hi2115

на "теория" е възможно ... а на този етап на джигитайция им е "в другия крачол" ( липсва ми инфо )

_________________
main[-1u]={1};


Пон Фев 07, 2022 2:06 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
някога може да го пробвам с модул :D
https://www.youtube.com/watch?v=2sYov6i-YAU

резултата е:
https://github.com/Wiz-IO/TEST/blob/mai ... in.cpp#L44

_________________
main[-1u]={1};


Пет Фев 11, 2022 11:14 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: LPWA - Narrow Band, Lora...
някой "чувал" ли е за FWPKG ( пакетиран( архив ) Firmware )
освен, че го палзват за пакетиране на PC BIOS-и не намирам инфо ... или е неква джигитайска пляска

попаднах на джигитайско GSM Firmware - архивиран ( LZMA ) JSON файл ... секции с информация и бинарни партишъни .... кой BIN къде да иде във флаша

_________________
main[-1u]={1};


Съб Фев 12, 2022 5:27 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: LPWA - Narrow Band, Lora...
Пробвал ли си да видиш дали binwalk няма да помогне с някой hint?
https://github.com/ReFirmLabs/binwalk


Вто Фев 15, 2022 9:34 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 265 мнения ]  Отиди на страница Предишна  1 ... 13, 14, 15, 16, 17, 18  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни