- Создаем прошивку для Android своими руками. Загрузка операционной системы.
- Как создать свою операционную систему для телефона самостоятельно?
- Как создать свою операционную систему для телефона
- Из чего состоит ОС телефона
- Что необходимо знать, чтобы создать свою операционную систему для телефона
- Разработка операционной системы для телефона
- Заключение
- Строим Android x86
- Установка окружения для сборки
- Загрузка дерева исходных кодов
- Загрузка файлов
- Сборка ядра
- Построение Android
- Настройка VirtualBox
- Эмулятор Jelly Bean
Создаем прошивку для Android своими руками. Загрузка операционной системы.
Как загружается система на ARM на примере android.
Начнем с простого упоминания, о том, что чип выполненный по архитектуре ARM — это система на чипе (SoC). То есть это полный компьютер, реализован- ный на одной микросхеме. На процессорах данной архитектуры изготавли- вается множество устройств (рутеры, свичи, встроенные компьютеры в телевизорах, игровые портативные консоли и т.д. и т.п.).
Так же эта архитектура обладает низкими характеристиками энергопотреб- ления и тепловыделения, поэтому довольно эффективно используется в таких устройствах, как смартфоны и планшетные компьютеры.
Точная адресация устройств не является целью этой обзорной статьи. Я просто хочу познакомить потенциальных мододелов с основными принципами, которые дадут более полное понимание что же делается на их устройстве.
Итак, перейдем непосредственно к описанию загрузки данного типа устройств. Практически каждый ARM процессор имеет встроенную на чип flash-память, в которую помещается т.н. загрузчик. В случае отсутствия на чипе такой памяти, или неиспользования ее в качестве пространства для размещения загрузчика, чип обычно обращается для запуска этого загрузчика к NOR-flash по строго определенному адресу.
Самих загрузчиков существует несколько. Ряд из них — коммерческие. Но есть и загрузчик с открытым исходным кодом — u-boot. К сожалению, при открытости кода он содержит процессоро-зависимый код, поэтому без спецификаций процессора не может быть просто портирован (адаптирован) на процессор, который не имеет открытой документации.
Теперь опишем, что же обычно делает загрузчик после его запуска. Довольно прямая аналогия может быть проведена с BIOS компьютеров на базе процессоров х86 (те с основной массой персоналок). Загрузчик ARM при запуске точно так же выполняет рад низкоуровневых инициализаций аппаратной части устройства (оперативная память, хранилища данных, сетевой адаптер и т.д. и т.п.). После инициализации последовательного порта (обычно в формате RS232, но с уровнями 3.2 вольт) появляется возможность работы с ним через консоль инициализированной на этом порту.
Выглядит это так
Посредством этой консоли можно выполнить практически полную настройку или перенастройку нашей железки. Например, чтобы загрузить читый Linux, нам как минимум необходимо будет перенастроить строку параметров передаваемых ядру при загрузке (при умолчальной настройке на загрузку android). Так же там можно полностью работать и с разделами нанда — стирать, разбивать, изменять, защищать от записи и наоборот и т.д. и т.п. (дабы избежать дополнительных вопросов об изменении разделов нанда). Еще в консоли можно загружать и выполнять некоторый софт. Все настройки, выполненные в этой консоли, могут быть сохранены и использоваться как настройки по умолчанию при загрузке устройства.
Сделаем небольшое отступление. Кроме NOR-flash для размещения загрузчика, в ряде случаев, может быть использован NAND-flash или даже SD-card. Кроме того, возможно использование комбинаций этих типов флеш памяти в устройстве. Например загрузчик может быть размещен в NOR, а в качестве внутреннего накопителя (для размещения OS) NAND или SD и т.п.
Итак, мы включили железку. Она загрузила загрузчик. Загрузчик проинициализировал оборудование. По окончанию этой инициализации загрузчик выполняет следующую процедуру:
1 — считывание и размещение в оперативной памяти образа ядра и рамдиска — оба по строго определенным адресам (может быть настроено в командной строке u-boot).
2 — запуск ядра с правильной точки входа, с указанием ему, где брать внешний рамдиск (initrd) с корневой файловой системой и что использовать в качестве init.
Еще часть оперативной памяти отводится для устройств, требующих своей памяти, например для видеоядра. Теперь вы понимаете, куда девается некоторая часть заявленной производителем оперативной памяти устройства.
Дальнейшая загрузка мало отличается от загрузки Linux на обычном компьютере. Загрузившись, ядро выполняет указанный ему init (это просто еще одна программа). Настройка init осуществляется в файле init.rc, который расположен в рамдиске. В нем производится настройка переменных среды, монтирование дисковых устройств, запуск необходимых служб и т.д и т.п. По окончанию выполнения инструкций предзапуска из init.rc запускается собственно сам андроид. Вид запуска андроида обусловен параметром запуска ядра androidboot. Стандартный запуск андроид выполняется в целом посредством передачи параметров использования нужного рамдиска (в ramdisk.img) и параметра androidboot.normal. Для запуска режима восстановления, как правило, используется другой рамдиск, содержащий программу recovery (в recovery.img) и параметр ядра androidboot.recovery.
Как вариация ядра Linux для андроида могут быть собраны не с поддержкой initrd (корневая система на рамдиске), а с т.н. initramfs. В этом случае вся корневая файловая система будет расположена просто внутри ядра. В этом случае для режима восстановления нужно, как правило, второе ядро с корневой файловой системой содержащей программу recovery. И настройка загрузчика просто на загрузку и выполнение recovery ядра.
И как итог, простая схема:
Запуск процессора -> запуск загрузчика -> инициализация железа -> считывание из нанда ядра и рамдиска -> запуск ядра с использованием этого рамдиска -> выполнение программы init -> запуск собственно android.
Источник
Как создать свою операционную систему для телефона самостоятельно?
Чтобы понять, как создать свою операционную систему для телефона, нужно быть основательно подготовленным. Ведь операционная система для смартфона входит в область сложнейших задач по программированию, так как требует довольно обширных знаний, связанных не только с конкретным языком программирования.
Как создать свою операционную систему для телефона
Операционная система для телефона — это комплексное программное обеспечение, работающее непосредственно с системными ресурсами телефона, плю с является связующим звеном между телефоном и его пользователем. ОС полностью контролирует работу устройства, поэтому любая написанная программа пишется не под конкретное устройство, а под конкретную ОС.
Из чего состоит ОС телефона
Операционная система телефона, как и любая друга я, состоит их двух основных компонентов:
Ядро — это «сердечная мышца» любой ОС, которая всегда запускается первой при включении устройства. Именно ядро манипулирует системными ресурсами телефона.
Системный софт — это программы, которые работают «над ядром». Они очень важны для самого ядра, потому что обеспечивают эффективную связь между ядром и приложениями пользователя. В такой софт входят драйвер, файловая система, программы для работы с сетью, системные утилиты и др.
Отдельной составляющей любого телефона являются пользовательские программы, которые не входят в состав операционной системы, но непосредственно с ними работает пользователь устройства, это:
Именно такие программы находятся под контролем ядра, которое выделяет на их запуск необходимое количество ресурсов системы.
Что необходимо знать, чтобы создать свою операционную систему для телефона
Хочется еще раз подчеркнуть, что создание собственной операционной системы — это задача не для новичков, навыки программирования должны быть выше среднего.
Список вещей, которые нужно понимать, чтобы создать свою операционную систему для телефон а, достаточно длинный, вот несколько основных пунктов:
Основы информатики. Сюда входит понимание таких вещей , как: алгоритмы, структуры данных, сортировка, манипулирование данными, абстрактное программировани е и мн. др.
Английский язык на хорошем уровне. На русском языке очень мало технической документации по созданию операционных систем для телефонов — в основном все на английском. Это же касается и сообществ, которые могут вам помочь — все это только на английском. Помимо английского для общени я важен технический английский, чтобы вы могли понимать о чем идет речь в документации, а также правильно формулировать свои вопросы в сообществах.
Язык программирования. Большинство операционных систем используют язык программирования С или С++, поэтому знать эти языки нужно будет в любом случае. Даже если решите создавать свою ОС на другом языке , примеры в документации и большинство готовых фрагментов кода будут именно на этом языке.
Ассемблер. Даже если вы будете писать свою ОС на языке высокого уровня, то местами вам все равно придется применять Ассемблер, поэтому понимание и основы этого языка обязательны.
Опыт в программировании. Если создание своей операционной системы для телефона — это первый ваш проект, то это довольно плохая идея. Вам кроме самого языка программирования нужно еще понимать как осуществляется контроль версий, отладка, оптимизация кода и мн. др.
Много практики на языке, который хотите применять для создания сво е й операционной системы. Язык не должен быть для вас чем-то новым. Необходимо знать его тонкости и особенности, поэтому на этом языке у вас должно быть реализовано несколько успешных проектов.
Понимание UNIX. Начав работу над свое й операционной системой для телефон а, вы очень быстро осознаете, что основной инструмент создания ОС тянется еще с UNIX-систем, а за основу ОС очень часто берется ядро Linux.
Концепция операционных систем. Вы должны в общем понимать, как с технической стороны работают операционные системы на телефонах.
Разработка операционной системы для телефона
Когда за вашими плечами уже есть опыт и практика на Ассемблере и Си (или другой язык) и вы легко разбираетесь в основах информатики, т о, в принцип е, уже можно приступать к созданию своей операционной системы для телефона.
Тут важно понимать, что над действительно стоящей операционной системой для телефонов трудятся десятки программистов даже в таких компаниях как Google или Apple, при этом на эту сферу у них рассчитаны огромные бюджеты. Но ни труд десятков программистов, ни огромные деньги не спасают их ОС от багов, которые то и дело всплывают.
Поэтому тут важно задуматься, а действительно ли вы сможете самостоятельно создать стоящую ОС? И действительно ли она будет лучше существующих, чтобы создать им конкуренцию? Есл и да, и вы действительно планируете создать программный продукт, который будет конкурировать с Android или iOS, тогда вам лучше обзавестись хорошей командой. Duolingo apžvalga ir įvertinimas Для этого можно выложить свой проект на GitHub и совместными усилиями « пилить » вашу операционную систему.
Если все-таки вы хотите сделать ОС «для себя», чтобы попробовать свои силы, то можно воспользоваться уже готовыми решениями из сети и «допиливать» их под свои нужды. А можно пойти еще проще и создать собственную прошивк у для уже существующей операционной системы.
Литература, которая вам пригодится:
« Linux From Scratch ». Это полноценный учебник по сборке операционных систем Linux. Да, там описываются компьютерные операционные системы, но с технической стороны и мобильна я, и компьютерная ОС работают практически одинаково.
«The little book about OS development» . Еще одна книга о разработке операционных систем для компьютера с самого начала — с установки IDE и до самого конца — до запуска ОС.
Заключение
Как разработать свою операционную систему для телефона? Нужно основательно подготовит ь ся и быть готовым к очень продолжительной работе над своим программным продуктом. Разработка собственной ОС для телефона — это очень сложная задача, но даже она посильна, если есть должное желание и упорство для мотивации к работе.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Источник
Строим Android x86
Установка окружения для сборки
Для сборки Android потребуется 64 битная версия Linux. Еще один важный момент: обратите внимание на версию GCC, которая установлена на системе. Google поддерживает версию GCC 4.4 и выше. Так же на системе должна быть установлена реализация Java от Oracle.
Установка дополнительных зависимостей для Ubuntu 12.04:
Установите символьную ссылку для устранения конфликта имен:
Загрузка дерева исходных кодов
Установка Repo
Repo — утилита управления репозиториями, упрощающая работу с Git для Android. Более подробную информацию можно прочесть здесь (http://source.android.com/source/version-control.html)
Для установки, инициализации и настройки Repo выполните следующие шаги:
• Убедитесь, что у вас есть директория bin в вашем домашнем каталоге и она прописана в PATH:
• Загрузите Repo скрипт и выставите права на выполнение:
Инициализация Repo клиента
После установки Repo, настройте доступ к репозиториям исходных кодов Android:
• Создайте пустую директорию для исходных файлов и перейдите в нее. Например, это может выглядеть так:
• Запустите скрипт repo init, чтобы обновить версию самого Repo.
Эта команда подключит ветку master из дерева исходных кодов Android. Вы можете указать любую другую, используя ключ -b:
Для просмотра всех доступных веток введите команду:
Нас интересуют наиболее последние версии Android от Google:
- Jelly Bean: remotes/origin/android-4.1.1_r6
- Ice Cream Sandwich: remotes/origin/android-4.0.4_r2.1
Можно выбрать любую на ваш вкус, дальнейшие шаги не будут отличаться. Для демонстрации процесса сборки под VirtualBox возьмем версию Jelly Bean (JB).
В случае успешной инициализации вы увидите сообщение о том, что Repo инициализирован в вашей директории и в ней появится папка .repo
Загрузка файлов
Чтобы загрузить исходные файлы из репозитория в вашу рабочую директорию выполните команду:
Начальная синхронизация может занять больше часа времени.
Сборка ядра
Android разработан прежде всего для устройств, управляемых жестами и он не поддерживает мышь по умолчанию. Поэтому, в качестве примера, пересоберем ядро из исходников с включенной поддержкой мыши.
Создадим директорию для хранения исходников ядра:
Воспользуемся заранее подготовленной версией ядра от Intel:
Перейдем в директорию ядра:
Теперь у нас есть исходники ядра. Нужно модифицировать конфигурационный файл и пересобрать. Чтобы сократить время на полную настройку ядра, воспользуемся конфигурационным файлом, который подготовили для на разработчики. Важный момент — не забывайте указать архитектуру для которой происходит сборка ядра, в нашем случае это x86.
Через несколько секунд загрузится графическое меню настройки ядра. Стрелками «вверх», «вниз» вы можете передвигаться по пунктам меню, «Enter» чтобы зайти в подменю. Все точно так же как с обычным ядром Linux.
Чтобы включить поддержку мыши:
• Зайдите в «Device Drivers»
• Выберите «Input device Support»
• Отметьте «Mice»
Вы можете зайти в подменю «Mice» и посмотреть дополнительные настройки драйверов.
Затем выйдите из меню конфигурации ядра. Это можно сделать с помощью нескольких нажатий на «Esc». Не забудьте сохранить настройки, когда меню конфигурации предложит это сделать.
Сделав необходимые настройки ядра, соберем его. Это не займет много времени, особенно если вы используете многоядерную машину — можете указать опцию команды make: -j N, где N — число ядер (например, для написания статьи использовалась make -j 32).
При успешной компиляции вы увидите сообщение:
Путь до нового ядра указан в последней строке.
Подмена ядра
Путь к ядру, которое будет использовано в сборке для VirtualBox можно определить следующим образом:
Должно вывестись примерно следующее:
Скопируем bzImage по найденному пути:
Построение Android
Установим окружение для сборки:
Теперь все готово к тому, чтобы начать компиляцию исходников Android. Первым шагом необходимо указать цель для сборки:
После выполнения команды вы увидите информацию о предстоящей сборке:
Затем необходимо запустить сборку исходников командой make. Хорошим тоном считается сохранять лог сборки, это можно сделать с помощью утилиты tee.
Процесс сборки может занять значительное время, конкретные цифры зависят от мощности центрального процессора и объема оперативной памяти машины. На системе, которая использовалась для подготовки статьи это заняло около часа. Рекомендуемое число потоков для сборки можно определить из расчета 2GB оперативной памяти на поток.
При успешной компиляции, последняя строка вывода будет содержать путь и размер образа:
Далее необходимо собрать загрузочный образ для VirtualBox:
Если сборка прошла успешно, в консоли должна появиться запись:
Настройка VirtualBox
Эмулятор Jelly Bean
Сборка эмулятора мало чем отличается от сборки версии для VirtualBox. Если у вас уже есть исходные коды, то приступайте к сборке с шага инициализации окружения. Для чистоты эксперимента, будет процесс постройки эмулятора будет изложен с самого начала. Поэтому создадим отдельную директорию для Jelly Bean Emulator и повторим уже знакомые шаги.
Загрузка исходных кодов
Выбор сборки эмулятора
В случае успеха вы увидите:
Пока идет процесс компиляции, скопируем конфигурационный файл и соберем ядро для эмулятора.
Теперь сборка эмулятора завершена.
Самый простой способ запустить его:
Например, можно запустить с только что собранным ядром, с разрешением 480×800, объемом оперативной памяти 512 мегабайт и включенным аппаратным ускорением графики.
Более подробно о возможностях и настройках эмулятора можно прочитать здесь
Источник