Обновить
26
5
Тимур@mrognor

C++ enthusiast and developer

Отправить сообщение

Рад, что оно все еще работает)

Мне не платят за статью) Я написал ее потому что захотел поделиться своим опытом с сообществом. Гайд по установке debian был добавлен для того, чтобы человек, который не имеет четкого представления об устройстве linux смог понять как это все работает. Про PROTODOWN добавил.

Спасибо за совет!

Конфиг ядра Debian подходит к ванильному ядру, я именно его и беру в репозитории. В моем случае изменения были как в драйвере, так и в ядре, поэтому сборка deb-пакета была оптимальным выбором. Я знаю про запуск виртуальной машины с помощью -kernel, но мне нужен был полноценный дистрибутив, и виртуальная машина проще для этого. Про VS Code я писал в тексте, я использую Code OSS, и он не умеет запускаться в контейнере.

Использование Debian обусловлено тем, что мне нужно было связать наш код с ядром и мне нужен был полноценный дистрибутив для этого. Тестировать на железном свиче тоже можно было, но это требует его перезагрузки, что занимает время. А виртуальную машину я могу за 10 секунд перезагрузить.

Обновил статью

Спасибо за комментарий. В тексте я сказал, что контейнер необязателен и можно производить всё на хосте. Что по вашему мнению нужно добавить или изменить, чтобы статья стала хорошей?

А зачем ставить Gbox и AppGallery? У меня на телефоне LineageOS с Aurora Store, и я не испытываю никаких проблем. Aurora Store — это клиент для Play Market, и там есть всё, по крайней мере я нашел там всё, что мне нужно. С помощью Gapps я завел обычный YouTube, NFC через T-Pay. В итоге разницы с Андроидом нет.

Хорошо, добавлю в статью.

Спасибо за информацию!

В том, что некоторые параметры, например вланы, могут идти в виде диапазона.

Изначально я планировал сделать всё на базе кода из iproute, я потратил много времени на его изучение и разбор протокола, и в итоге, в момент, когда я отказался от идеи взять оттуда код, я достаточно разбирался в протоколе и уже было проще сделать самому, чем брать libnl3.

Если кому-то нужен способ с ldaddr, то вот он.

#include <link.h>
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <unistd.h>
#include <execinfo.h>

#include <sstream>
#include <iostream>


#define TRACE_MAX 1024


void print_backtrace()
{
    void* array[TRACE_MAX];
    size_t size;

    size = backtrace(array, TRACE_MAX);

    for (int i = 1; i < size; ++i)
    {
        Dl_info info;
        link_map *extra_info;
        dladdr1(array[i], &info, reinterpret_cast<void**>(&extra_info), RTLD_DL_LINKMAP);
        info.dli_fbase = (void *) extra_info->l_addr;


	    if (info.dli_sname == NULL)
		    info.dli_saddr = info.dli_fbase;

        ptrdiff_t offset = static_cast<char*>(array[i]) - static_cast<char*>(info.dli_saddr) - 1;

        char buf[BUFSIZ];
        std::size_t readed = readlink("/proc/self/exe", buf, BUFSIZ);
        std::stringstream sstream;
        sstream << std::hex << offset;
        std::string command =  "addr2line -e " + std::string(buf) + " " + sstream.str();
        system(command.c_str());
    }
}

void one()
{
    print_backtrace();
}

// Required addr2line
// g++ -g main.cpp
int main(int argc, char **argv) 
{
    one();
}

Для работы нужна утилита addr2line. Собирать с помощью g++ -g main.cpp

С помощью termux и andronix можно установить ubuntu с графической оболочкой и использовать планшет как полноценный арм ноут на линуксе. Я так больше года работал. Pycharm или VsCode запускаются без проблем

Информация

В рейтинге
1 040-й
Откуда
Москва, Москва и Московская обл., Россия
Работает в
Зарегистрирован
Активность