От логического элемента до телефона. Введение
Добрый день, уважаемые жители хабра!
Смотрел на проекты коллег, и задумался… А можно ли построить смартфон с нуля, или почти с нуля, в одиночку, или небольшим коллективом? Об этом и будет сегодняшняя статья.
Конечно, нет ничего невозможного, скажете Вы и будете правы. Непрофессионалы, заметят: «Посмотри, я уже сделал смартфон на базе Arduino / Raspbery PI и GSM-модуля»,- и будут правы на своем уровне. Однако, профессионалы, занимающиеся подобными разработками, скорее всего, будут чтать подобные статьи только в двух случаях. Или для развлечения, или для подбора персонала.
Этот абзац предназанчен как раз таки для профессионалов, которые понимают с чем мне придется столкнуться. Его не стоит читать тем кто не знаком с этой областью науки и техники. Он призван объяснить им, что я понимаю что хочу сделать. Скорее всего у них возникнет следующий вопрос: «Сколько у тебя имеется ресурсов на реализацию проекта?». Я вынужден буду ответить, что у меня есть только время, знания и опыт, и никто не знает как дальше будет развиваться ситуация в финансовом отношении, а я уже проходил и взлеты и падения. Я проходил ситуацию в которой конкуренты давят на стартапы. Но, мой проект не стоит рассматривать как стартап. Он делается «Jast For Fun», или говоря по русски, для собственного удовольствия. С профессиональной точки зрения, я осознаю, что мне, совершенно точно придется столкнутья с рядом серьезных проблем на этапах проектирования, макерирования, реализации, отладки, и быть может даже производства. Чтобы телекоммуникационные компании не видели во мне конкурента, а постараюсь ограничить свои амбиции на стеке GSM, а значит не буду представлять угрозы телеком-индустрии. Замечу, что даже без серьезеной конкурентной борьбы, все прелести которой мне удалось постичь, при реализации одного проекта, все это сложно. У меня возникали ситуации, в которой 90% усилий нужно было бросить на борьбу с проблемами не техническими, а организационными, проблемами безопасности, и другими проблемами возникающими в этом мире, когда Вы планируете сделать что то действительно серьезное и стоящее. Нужно признать факт того, что, мне не нравится бороться с ветряными мельницами. Если говорить о технических сложностях, то, я осознаю что возникнет необходимость решать ряд вопросов, связанных с радиотрактом. Мне придется заниматься согласованием антенного тракта, и проблемами с построением и макетированием усилителя мощности, с развязкой входных и выходных цепей радиотракта. С калибровками, такими как IQ-imbalance, DC-offset, линейности, а может даже придется вносить предискажения в радиотракт. Я молчу о городской застройке с ее релеевскими замираниями и о доплеровском сдвиге, при движении транспортных средств. Это огромная база знаний в области построения сотовых сетей, и кое какими знаниями из этой области я обладаю. Я осознаю, что мне придется столкнуться с серьезной цифровой обработкой сигнала. Я понимаю, что это технические вопросы, касающиеся проектирования под FPGA, и решение компромисов оптимизации кода на Verilog, которые связаны и с вопросами конвейризации, и с вопросами оптимизации под конкретную архитектуру FPGA. А сдругой стороны связаны с желанием подготовить этот код так, чтобы он был ориентирован на готовые блоки производителей микросхем (ASIC). Я знаю что мне придется столкнуться с криптографией на уровне выше чем сейчас, а я работал ранее и с библиотекой openssl и AES, и RSA и EC, но на уровне CPU. Мне придется разработать и использовать собственное процессорное ядро, или заимствовать что то на Open Cores, или подобных ресурсах. Верификация такого кода, это тоже очень трудоемкое занятие. Мне придется столкнуться с разработкой или сборкой toolchain-ов, компиляторов, и операционной системы. Как небольшой, реального времени в BaseBand-процессоре, так и чего то серьезного, там где дело пойдет об Application-процессоре. Мне придется собрать Linux, и это не будет buildroot, а необходимо использовать CLFS или просто подобрать пакеты самому. Мне придется разработать код приложений, и конечно код телефона. А я молчу о тестировании кода. Очень хотелось бы в процессе всего этого, хотябы, избежать проблем, связанных с атаками на машину, на которой будет производиться разработка и сборка проектов. Вероятно у Вас не возникало ситуаций, когда Ваша машина каждый день должна была загружать операционную систему CD-накопителя (т.к. его нельзя изменить), и проверять контрольные суммы каждого файла, который был сохранен в процессе работы на Ваш накопитель вчера. Быть может Вам не патчли компилятор через такие вещи как Intel Me, тогда вы даже не знаете с какими проблемами можете столкнуться, работая с серьезными проектами. Полагаю, профессионалы, знают что обычного инженера, не касаются 90% проблем, которые решают технические руководители и сотрудники службы безопасности. А в этом любительском проекте я один, пока один. Полгагю, профессионалы, которые прочли этот абзац, уже поняли что я знаю многое, начиная от уровня физической реализации транзистора, до того что из себя представляет утилита DrverVerifier или PerFast, и как происходит борьба с атаками в серьезных проектах. Именно по этому, это сложная задача, на несколько лет.
Итак. Что же побудило меня заняться подобными проектом? С одной стороны, это обучающий курс, который я проходил достаточно давно. Он называется: «From N-AND to tetris». Курс в сильно упрощенной форме описывает как можно построить процессор из логических элементов, и разработать код игры, для этого процессора. С другой стороны, это изучение языка Verilog. С третьей, мое хобби. А заниматься электроникой и программированием начал в 3–5 классе школы. В 7 классе, у меня дома уже был старенький осциллограф (прибор за наблюдением за формой сигналов). А в старших классах школы, я программировал на трех языках. Сейчас они звучат смешно и два из них практически не используются. Это Basic, Pascal и Assembler (x86). Сейчес мне 39 лет, я оборачиваюсь на свою предыдущую жизнь, и осознаю что мое хобби не было ориентированно на конкретную цель и не приводило к каким-либо серьезным проектам. Есть что-то мелкое, лежащее на Habr, но оно лишь отражает возможности, а не результаты. Есть и еще один момент, который является стимулом к реализации подобного проекта. Хочется иметь полностью подконтрольный абонентский терминал. Телефон, который работает четко согласно стандарту, но может не отвечать на запросы со стороны сети, если Вы этого не хотите. Это так называемые paging-и. Хочется чтобы телефон не вел скрытой записи разговоров. Хочется иметь возможность определять факт того, что (поддельная) базовая станция, передала команду на отключение шифрования. Многие вещи в системе хочется держать под контролем. Кроме того, если Вы начнете анализировать код проектов, которые находятся в открытом доступе, или код в котором участвовали люди из команды конкурентов, то увидете там непростые, казалось бы случайны вещи, например связанные со сравнением знакового и беззнакового чисел с последующей проверкой условия. Те, кто знает правила, понимают о чем я говорю. Мне хотелось бы избежать подобных вещей в моем проекте, на любом уровне. Будь то код приложения на C++, будь то код процессора на Verilog, или если повезет его закончить по настоящему,- заклада в Asic-е. Это сложная, амбициозная задача, для одного человека.
Эта статья, является вводной, к дилнному циклу статей, которые я планирую выкладывать по мере реализации проекта. Я помещу ее в раздел пиар, хотя, к пиару, по сути своей, она не относиться. Однако, я питаю надежду, что найдется серьезный работодатель, который готов поощерять сотрудников, у которых, хобби совпадает с работой, и они горят этим хобби. Результат реализации подобных проектов представляет из себя серьезную интеллектуальную собственность. Я не хочу и падать, а обладаю желанием развиваться дальше. На развитие, требуется финансирование. А у меня его нет.