| Автор |
Съобщение |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 API Kernel <- -> Application
случая е малко хакерски... имам комуникационен модул (LTE NB/CAT) с работещо API за user applications, обаче е много бедно на функции (писано-недописано) реверснах кърнела и му изкарах над 3000 функции (име, адрес, С структури...) от които реално ~200 ми трябват (HAL, OS, SSL, мрежа и разни екстри) тръгнах да пиша разширено API и вече се чудя кой път да поема... спрял съм се на това, което е зависимо от компилацията на кърнела: може и така, а и има нищожна възможност джикитайците да ми напълнят структурата с адресите при инициализация идеята е да интегрирам новите неща в Arduino ядро, което е почи готово - трябва ми мрежовите фунции и екстрите
_________________ main[-1u]={1};
|
| Вто Юли 24, 2018 2:25 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: API Kernel <- -> Application
Можеш да оставиш прототипите "extern", а адресите да ги закачиш през линкер скрипт или асемблерски файл, като последните и двете машинно генерирани.
|
| Вто Юли 24, 2018 5:13 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
и така го правих, ама май го омазах... и реших да бутна API-то в static library оригиналното апи - има една информационна структура в първата ROM секция по която се ориентира кърнела за апликацията и нейната entry point a функциите се викат с hash стринг на функцията, кърнела връща адреса (за секюрити уж, да не се вижда адреса)... стил Mediatek Qualcomm са с Dispatcher функция ID... ма не мисля да го усложнявам и поне малко да "скрия" адресите
_________________ main[-1u]={1};
|
| Сря Юли 25, 2018 8:45 am |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
с АСМ файл май изглежда по-добре:  |  |  |  | Код: .global api_magic .global foo_1 .global foo_2 .global foo_3
.data .align 4 api_magic: .word 0xCAFE0001 foo_1: .word 0x22222222 foo_2: .word 0x44444444 foo_3: .word 0x66666666
............................................................
extern void (*foo_1)(void); extern int (*foo_2)(int); extern int (*foo_3)(int, int);
void test(void) { foo_1(); foo_2(7); foo_3(8, 9);
text:082926F6 LDR R3, =foo_1 text:082926F8 LDR R3, [R3] text:082926FA BLX R3 text:082926FC LDR R3, =foo_2 text:082926FE MOVS R0, #7 text:08292700 LDR R3, [R3] text:08292702 BLX R3 text:08292704 LDR R3, =foo_3 text:08292706 MOVS R1, #9 text:08292708 LDR R3, [R3] text:0829270A MOVS R0, #8 text:0829270C BLX R3
.......................................................................
.data:001E7060 EXPORT api_magic .data:001E7060 api_magic DCD 0xCAFE0001 .data:001E7064 EXPORT foo_1 .data:001E7064 foo_1 DCD 0x22222222 .data:001E7068 EXPORT foo_2 .data:001E7068 foo_2 DCD 0x44444444 .data:001E706C EXPORT foo_3 .data:001E706C foo_3 DCD 0x66666666
|  |  |  |  |
_________________ main[-1u]={1};
|
| Сря Юли 25, 2018 9:14 am |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: API Kernel <- -> Application
Можеш да се опиташ да спестиш указателите и дереференцията като ги направиш абсолютни символи, т.е. прототипът да е: Естествено, ако може всичкото това да се генерира от програма/скрипт. Билдваш с GCC и после дизасемблираш с ADS/Keil?
|
| Сря Юли 25, 2018 10:40 am |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
GCC да IDA ползвам за деасем... генерирам сорса със скрипт - автоматично търся функциите във firmware-то и форматирам "сорса" 10% не ги намирам но на ръка ги оправям ако ми трябват
Бях ги форматирал като пойнтери void* ама не ми хареса дезасемблера или ида-та се лъжеше
_________________ main[-1u]={1};
|
| Сря Юли 25, 2018 11:02 am |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: API Kernel <- -> Application
Странно че IDA са решили да ползват ADS синтаксис. Ама исторически може и да не е толкова странно. Ако успееш да го направиш да не е през указатели, а с директно викане на функция (през абсолютни символи), може евентуално трите инструкции да се сведат до една B/BL/BLX ако e наблизо на +/-32MB или до LDR/BLX за по-далечни.
|
| Сря Юли 25, 2018 12:19 pm |
|
 |
|
palavrov
Ранг: Форумен бог
Регистриран на: Вто Окт 11, 2011 11:53 pm Мнения: 4582 Местоположение: Brussels / Пловдив
|
 Re: API Kernel <- -> Application
Отдавна не съм дизасемблирал с ИДА-та но поне навремето можеше да я конфигурираш за различен формат на дизасемблера - intel, gcc, и т.н. примерно за x86
_________________ Мразя да мразя ...
|
| Сря Юли 25, 2018 5:18 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
аз GCC "стил" не намерих в опциите на ида-та открих "топлата вода" - скриптове - така експортнах всички имена на процедури трите инструкции са ми достатъчни - не гоня скорост, спрямо оригиналното апи е в пъти по-бързо... модула е комуникационен(NB/CAT), не се гони завидна скорост... по-нататък ще взема един борд за хардуерни проби, лошото е че в БГ няма все още мрежа (NB) иначе става въпрос за Quectel BC66 - чипсет Mediatek MT2625 апликационен процесор ARM Cortex-M на 104 MHz, модема е някво неизвестно DSP на кристала, RAM,FLASH по 4 меги (за усера към 300к апликация) няма GSM само NB/CAT модем IO: GPIO, I2C, I2S, PCM, SDIO, UART, USB... OS: FreeRTOS (директно недостъпен за усера) NET: LwIP & mbedssl (директно недостъпен) Clinets: HTTP/S, MQTT, COAP, LWM2M (първите две са RIL достъпни) достъпа до всичко горе е само по RIL (AT команди).... за сега ако му изкарам разширеното апи си става супер подкарах го на GCC Linaro last + Eclipse за Windows мисля че няма да му е проблем да носи едно Arduino ядро като апликация
_________________ main[-1u]={1};
|
| Сря Юли 25, 2018 10:58 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
с ASM ще го правя и ще разкарам ненужните процедури очертава се да стане мноо яко  поне така си мисля за сега
_________________ main[-1u]={1};
|
| Чет Юли 26, 2018 9:55 am |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: API Kernel <- -> Application
Успехи. 
|
| Чет Юли 26, 2018 10:18 am |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
 Re: API Kernel <- -> Application
метнах го в static lib и се компилна така 
_________________ main[-1u]={1};
|
| Чет Юли 26, 2018 1:02 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: API Kernel <- -> Application
Мда, самата константа е в literal pool.
|
| Чет Юли 26, 2018 3:24 pm |
|
|