Pull to refresh

От логического элемента до телефона. Введение

Level of difficultyEasy
Reading time7 min
Views2.9K

Добрый день, уважаемые жители хабра!

Смотрел на проекты коллег, и задумался... А можно ли построить смартфон с нуля, или почти с нуля, в одиночку, или небольшим коллективом? Об этом и будет сегодняшняя статья.

Конечно, нет ничего невозможного, скажете Вы и будете правы. Непрофессионалы, заметят: «Посмотри, я уже сделал смартфон на базе Arduino / Raspbery PI и GSM‑модуля», — и будут правы на своем уровне. Однако, профессионалы, занимающиеся подобными разработками, скорее всего, будут читать статьи о проектах, построенных на модулях только в двух случаях: или для развлечения, или для подбора персонала.

Этот абзац, предназначен как раз таки для профессионалов, которые, понимают с чем мне придется столкнуться. Его не стоит читать тем кто не знаком с этой областью науки и техники. Он призван объяснить им, что я понимаю что хочу сделать. Скорее всего, у них возникнет следующий вопрос: «Сколько у тебя имеется ресурсов на реализацию проекта?». Я вынужден буду ответить, что у меня есть только время, знания и опыт, и никто не знает, как дальше будет развиваться ситуация в финансовом отношении. А я уже проходил и взлеты и падения. Я проходил ситуацию, в которой, конкуренты давят на стартапы. Но, мой проект не стоит рассматривать как стартап. Он делается «Jast For Fun», или говоря по‑русски, для собственного удовольствия. С профессиональной точки зрения, я осознаю, что мне, совершенно точно, придется столкнуться с рядом серьезных проблем на этапах проектирования, макетирования, реализации, отладки, и быть может даже производства. Я не о производстве макета, а о производстве изделия. Чтобы телекоммуникационные компании не видели во мне конкурента, я постараюсь ограничить свои амбиции на стеке GSM, а значит не буду представлять угрозы для телеком‑индустрии. Это важно. Замечу, что, даже без серьёзной конкурентной борьбы, попытка реализовать подобный проект, не является тривиальной задачей. У меня возникали ситуации, в которых 90% усилий нужно было тратить на борьбу не техническими проблемами. Меня касались вопросы организационные, вопросы безопасности, и проблемы, возникающие в этом мире, когда Вы планируете сделать что‑то действительно серьезное и стоящее. Нужно признать тот факт, что, мне не нравится бороться с ветряными мельницами. Если говорить о технических сложностях, то, я осознаю что возникнет необходимость решать ряд вопросов, связанных с радио трактом. Мне придется заниматься согласованием антенного тракта, построением и макетированием PA и LNA, развязкой входных и выходных цепей радио тракта. С калибровками, такими как IQ imbalance, DC offset, и другими (я уже делал это, при подготовке к производству базовых станций). А может даже придется вносить предискажения в радио тракт. Я молчу о городской застройке с ее рэлеевскими замираниями и о доплеровском сдвиге, при движении транспортных средств и его компенсации при приеме. В целом, это огромная база знаний в области построения сотовых сетей, и кое‑какими знаниями из этой области я обладаю. Я осознаю, что мне придется столкнуться с серьезной цифровой обработкой сигнала. Я понимаю, что это технические вопросы, касающиеся проектирования под FPGA, и решение компромиссов оптимизации кода на Verilog, которые связаны и с вопросами конвейеризации, и с вопросами оптимизации под конкретную архитектуру FPGA (например LUT4/LUT6; необходимость использования аппаратных умножителей, и т. д.). С другой стороны, существует желание подготовить этот код так, чтобы он был ориентирован на готовые блоки производителей микросхем (ASIC). Я знаю, что мне придется столкнуться с криптографией на уровне выше чем сейчас, а я работал ранее и с библиотекой openssl и AES, и RSA и EC, но на уровне разработки кода для CPU, или, на уровне настроек авторизации на радиус‑сревере. Мне придется разработать и использовать собственное процессорное ядро, или заимствовать что‑то на Open Cores, или подобных ресурсах. Верификация такого кода, это тоже очень трудоемкое занятие. Мне придется столкнуться с разработкой или сборкой toolchain‑ов, компиляторов, и операционной системы. Как небольшой, реального времени в BaseBand‑процессоре, так и чего‑то серьезного, там где речь пойдет об Application‑процессоре. Мне придется собрать Linux, и это не будет buildroot, а необходимо использовать CLFS или просто подобрать пакеты самому. Возникнет необходимость разработать код приложений, и конечно код телефона. Я уже молчу о тестировании кода. Очень хотелось бы в процессе всего этого, хотя бы, избежать проблем, связанных с атаками на машину, на которой будет производиться разработка и сборка проектов. Вероятно у Вас не возникало ситуаций, когда Ваша машина каждый день должна была загружать операционную систему CD‑накопителя (т.к. его нельзя изменить), и проверять контрольные суммы каждого файла, который был сохранен в процессе работы на Ваш накопитель вчера. Быть может, Вам не патчли компилятор через такие вещи как UEFI, или даже Intel Me? Или, не заменяли 25Q128 на другую микросхему, BIOS, которая разрушается при выпаивании? Тогда, Вы даже не знаете с какими проблемами можете столкнуться, работая над серьезными проектами. Полагаю, профессионалы, знают, что обычного инженера, не касаются 90% проблем, которые решают технические руководители и сотрудники службы безопасности. А в этом любительском проекте я один, пока один. Полагаю, профессионалы, которые прочли этот абзац, уже поняли что я знаю многое, начиная от уровня физической реализации транзистора, до того что из себя представляет утилита DrverVerifier или PerFast, и как происходит борьба с атаками в серьезных проектах. Кроме того, у меня нет средств на эту борьбу и меня никто не финансирует. Даже если не затрагивать вопрос безопасности, то о чем я говорю, сложная задача, на несколько лет. В 2006, году, один мой коллега, по имени Александр, на реализацию UART TX на FPGA потратил больше месяца. У меня небольшой опыт в этой части, но я уже знаю как строить синхронные схемы с конвейером, и вижу во что развернется код на Verilog. Я знаю, что мне придется работать сетевыми протоколами, но это не простой 803.3 и вышележащие TCP и UDP, это протоколы управления, такие как LLC, или например RRC (Radio Resource Control), полагаю, доберусь и до SMS (CP, RP).

Итак. Часть людей пропустило вышележащий абзац, и это хорошо, иначе могут испугаться кучи непонятных слов. Что же побудило меня заняться подобными проектом? С одной стороны, это обучающий курс, который я проходил достаточно давно. Он называется: «From N‑AND to tetris». Он в упрощенной форме, описывает, как можно построить процессор из логических элементов, затем как разработать код игры, для этого процессора. С другой стороны, меня побудило изучение языка Verilog, на котором, в наше время, проектируют (не совсем так) цифровые микросхемы. И наконец, мое хобби. А заниматься электроникой и программированием начал в 3–5ом классе школы. В 7 классе, у меня дома, уже был старенький осциллограф. Осциллограф, — это прибор для наблюдения за формой электрических сигналов. А в старших классах школы, я свободно писал код на трех языках программирования: Basic, Pascal и Assembler (x86). Два первых, в настоящее время, практически не используются. На данный момент, мне 39 лет, и оборачиваясь в прошлое, на свою предыдущую жизнь, я осознаю, что мое хобби, не было ориентированно на конкретную цель и не приводило к каким‑либо серьезным проектам. Есть что‑то мелкое, лежащее на github или на старых дисках, но, оно лишь отражает возможности, а не результаты. Наверное, это результат того, что я не умею продавать. Результаты были, но они были в компаниях, на которые я работал. Например, Antilency (antilatency.com). Есть и еще один момент, который является стимулом к реализации подобного проекта. И он связан с безопасностью. Хочется иметь полностью подконтрольный абонентский терминал. Телефон, который работает четко согласно стандарту, но может не отвечать на запросы со стороны сети, если Вы этого не хотите. Это, так называемые paging‑и, например. Хочется, чтобы телефон не вел скрытой записи разговоров. Хочется иметь возможность определять факт того, что (поддельная) базовая станция, передала команду на отключение шифрования. Многие вещи в системе хотелось бы держать под контролем. Кроме того, если Вы начинаете анализировать код проектов, который, находятся в открытом доступе, или код в котором участвовали люди из команды конкурентов, то увидите там непростые, казалось бы случайные вещи. Иногда, там находятся закладки, замаскированные под ошибки. Но они не случайны, это работа на конкурентов. Ее цель проста. Или создать проблемы, и таким образом в глазах общества обрушить рейтинг вашего продукта, или в определенный момент полностью сломать бизнес. Я проходил эту школу, мне не подходит такая стратегия. Мне хотелось бы полностью избежать подобных вещей в моем проекте, на любом уровне. Будь то код приложения на C++, или код процессора на Verilog. И даже в микросхемах, бывают закладки. Так что это сложная и амбициозная задача, для одного человека.

Эта статья, является вводной, к длинному циклу статей, которые я планирую выкладывать по мере реализации проекта. Я помещу ее в раздел пиар, хотя, к пиару, по сути своей, она не относиться. Цикличность статей будет зависеть от имеющихся возможностей. Однако, я питаю надежду, что найдется серьезный работодатель, который готов поощрять сотрудников, у которых, хобби совпадает с работой, и они горят этим хобби. Результат реализации подобных проектов представляет собой серьезную интеллектуальную собственность. Например, как минимум, военные заинтересовались бы телефоном, на который есть полный исходный код, и ни одной библиотеки. Я не хочу и падать, и обладаю желанием развиваться дальше. А на развитие, требуется финансирование. У меня его нет, и полагаю, это результат той схемы, о которой я говорил выше, и в которую не лез.

Tags:
Hubs:
Total votes 6: ↑4 and ↓2+4
Comments7

Articles