Семантическое ядро — как составить правильно? Давай напишем ядро! Создаем простейшее рабочее ядро операционной системы Seo составление семантического ядра

Помимо того, сайта, важно знать, как правильно его применить с максимальной пользой для внутренней и внешней оптимизации сайта.

Уже очень много статей написано на тему того как сделать семантическое ядро, поэтому, в рамках данной статьи, я хочу обратить Ваше внимание на некоторые особенности и детали, которые помогут Вам правильно использовать семантическое ядро, и тем самым, помочь раскрутить интернет-магазин или сайт. Но сперва, вкратце дам свое определение семантическому ядру сайта.

Что такое семантическое ядро сайта?

Семантическое ядро сайта - это список, набор, массив, совокупность ключевых слов и фраз, которые запрашиваются пользователями (Вашими потенциальными посетителями) в браузерах поисковых систем, чтобы найти интересующую информацию.

Зачем нужно веб-мастеру составлять семантическое ядро?

Исходя из определения семантического ядра, возникает масса очевидных ответов на этот вопрос.

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

Для блоггеров, которые активно занимаются монетизацией своих блогов (манимейкингом), также важно быть в ТОПе поисковой выдачи по тематике релевантной содержанию блога. Увеличение поискового трафика несет больше прибыли от показов и кликов из контекстной рекламы на сайте, показов и кликов по рекламным блокам партнёрских программ и рост прибыли по другим видам заработка.

Чем больше на сайте оригинального и полезного контента - тем ближе сайт к ТОПу. Жизнь существует преимущественно на первой странице выдачи поисковых систем. Поэтому, знание того как сделать семантическое ядро является необходимым для SEO любого сайта, интернет-магазина.

Иногда веб-мастера и владельцы интернет-магазинов задаются вопросом - где брать качественный и релевантный контент? Ответ исходит из вопроса - нужно создавать контент в соответствии с ключевыми запросами пользователей. Чем больше поисковые системы будут считать контент Вашего сайта релевантным (подходящим) ключевым словам пользователей - тем лучше для Вас. Кстати, отсюда возникает ответ на вопрос - где брать разнообразие тематики контента? Всё просто - анализируя поисковые запросы пользователей, можно узнать чем они интересуются и в какой форме. Таким образом, сделав семантическое ядро сайта, можно написать ряд статей и/или описаний для товаров интернет-магазина, оптимизируя каждую страницу для определенного ключевого слова (поискового запроса).

К примеру, данную статью я решил оптимизировать по ключевому запросу "как сделать семантическое ядро", потому что конкуренция по данному запросу ниже, чем по запросу "как создать семантическое ядро" или "как составить семантическое ядро". Таким образом, мне гораздо легче пробиться к ТОПу выдачи поисковых систем по этому запросу абсолютно бесплатными методами раскрутки.

Как сделать семантическое ядро, с чего начать?

Для составления семантического ядра существует ряд популярных он-лайн сервисов.

Самым популярным сервисом, на мой взгляд, является статистика ключевых слов Яндекса - http://wordstat.yandex.ru/

При помощи данного сервиса можно собрать подавляющее большинство поисковых запросов в различных словоформах и комбинациях для любой тематики. Например, в левой колонке мы видим статистику количества запросов не только по ключевой фразе "семантическое ядро", но и статистику по различным комбинациям данной ключевой фразы в разных спряжениях и с разбавочными и дополнительными словами. В левой колонке мы видим статистику поисковых фраз, которые искали вместе с ключевой фразой "семантическое ядро". Эта информация может быть ценной, хотя бы в качестве источника тем для создания нового, релевантного Вашему сайту, контента. Ещё хочу упомянуть одну особенность этого сервиса - Вы можете уточнить регион. Благодаря этой опции Вы можете более точно узнать количество и характер нужных Вам поисковых запросов по нужному региону.


Ещё одним сервисом для составления семантического ядра является статистика поисковых запросов рамблера - http://adstat.rambler.ru/


На мой субъективный взгляд, данным сервисом можно пользоваться в том случае, когда идёт битва за привлечение на свой сайт каждого единичного пользователя. Здесь можно уточнить некоторые низкочастотные и long tail запросы, обращение пользователей по ним составляет приблизительно от 1 до 5-10 в месяц, т.е. очень мало. Сразу же оговорюсь, что в дальнейшем мы рассмотрим тему классификации ключевых слов и особенности каждой группы с точки зрения их применения. Поэтому, лично я крайне редко пользуюсь данной статистикой, как правило в тех случаях, если я занимаюсь или узкоспециализированного сайта.

Для формирования семантического ядра сайта также можно пользоваться подсказками, которые выпадают при вводе поискового запроса в браузере поисковика.



И ещё один вариант для жителей Украины пополнить список ключевых слов для семантического ядра сайта - просмотреть статистику сайтов на - http://top.bigmir.net/


Выбрав нужную тематику раздела, ищем открытую статистику наиболее посещаемого и подходящего по тематике сайта


Как видите, интересующая статистика не всегда может быть открытой, как правило, веб-мастера скрывают её. Тем не менее, в качестве дополнительного источника ключевых слов тоже может сгодиться.

Кстати, о том как оформить красиво в табличном виде в Excel весь список ключевых слов Вас научит замечательная статья Глобатора (Михаила Шакина) - http://shakin.ru/seo/keyword-suggestion.html Там же можно прочесть о том как сделать семантическое ядро для англоязычных проектов.

Что делать дальше со списком ключевых слов?

В первую очередь чтобы сделать семантическое ядро, я рекомендую структурировать список ключевых слов - разбить его на условные группы: на высокочастотные (ВЧ), среднечастотные (СЧ) и назкочастотные (НЧ) ключевые слова. Важно, чтобы в данные группы попадали ключевые слова очень близкие по морфологии и тематике. Сделать это удобнее всего в виде таблицы. Я это делаю приблизительно так:


Верхняя строка таблицы - это высокочастотные (ВЧ) поисковые запросы (написаны красным). Их я поставил во главе тематических колонок, в каждую ячейку которых я отсортировал среднечастотные (СЧ) и низкочастотные (НЧ) поисковые запросы максимально однородно по тематике. Т.е. к каждому ВЧ запросу я привязал наиболее подходящие группы СЧ и НЧ запросов. Каждая ячейка СЧ и НЧ запросов - это будущая статья, которую я пишу и оптимизирую строго под набор ключевых слов в ячейке. В идеале, одна статья должна соответствовать одному ключевому слову (поисковому запросу), но это очень рутинная и затратная по времени работа, ведь таких ключевых слов могут быть тысячи! Поэтому, если их очень много, нужно выделить для себя самые значимые, а остальные отсеять. Также, можно оптимизировать будущую статью под 2 - 4 СЧ и НЧ ключевых слова.

Для интернет-магазинов, СЧ и НЧ поисковые запросы как правило, являются названиями товаров. Поэтому, здесь не возникает особых трудностей внутренняя оптимизация каждой страницы интернет-магазина, просто это длительный процесс. Он тем дольше, чем больше товаров в интернет-магазине.

Зеленым цветом я выделил те ячейки, на которые у меня уже готовы статьи, т.о. я в дальнейшем не запутаюсь со списком готовых статей.

О том как нужно оптимизировать и писать статьи для сайта я расскажу в одной из будущих статей.

Итак, сделав такую таблицу, Вы можете иметь весьма четкое представление о том, как можно сделать семантическое ядро сайта.

В итоге данной статьи, хочу сказать, что здесь мы в какой-то степени коснулись детализации вопроса о раскрутке интернет-магазина . Наверняка, прочитав некоторые мои статьи о раскрутке интернет-магазина Вам пришла мысль о том, что составление семантического ядра сайта и внутренняя оптимизация являются взаимосвязанными и взаимозависящими мероприятиями. Я надеюсь, что смог аргументировать важность и первоочередность вопроса - как сделать семантическое ядро сайта.

Сами запросы можно разделить на три группы:

  1. Первичные запросы характеризуют сайт в общем. К примеру, для моего сайта: заработок на дому, заработок в интернете, работа в интернете.
  2. Основные запросы входят в семантическое ядро и по ним стоит продвигать сайт. К примеру: заработок в интернете без вложений, работа в интернете для мам.
  3. Вспомогательные запросы или ассоциативные, т.е. схожие по смыслу с основными. Например, кем работать в декрете, подработка для мамы в декрете.

Составляем семантическое ядро своими руками онлайн

wordstat.yandex.ru самый доступный способ для создания СЯ. На этом сайте показывается, сколько раз в месяц люди вбивают в поиск ту или иную фразу (ключевой запрос).

Работать довольно просто – в главное поле введите первичный запрос, который охарактеризует сайт в целом или нужную страницу/раздел сайта. К примеру «заработок в интернете».

Слева вы получите список основных запросов (заработок в интернете без вложений) и вспомогательных (заработок в сети, дополнительный доход).

Имейте в виду, что данные цифры показывают сколько раз встречался данный запрос, но не конкретно в таком виде. Так, к примеру, люди искали не «заработок без вложений», а «заработок в интернете без вложений», «заработок денег без вложений» и т.п.

Чтобы понять, сколько раз люди искали конкретную фразу, нужно взять ее в кавычки и поставить в начале восклицательный знак: «!заработок без вложений». Значение стало в несколько раз меньше, но теперь вы знаете точную частотность, т.е. сколько людей вбивают в поиск конкретно эту фразу.

Аналогичным образом происходит подбор ключевых запросов для гугла (Google.Adwords) и рамблера (Rambler.Adstat). Остальные поисковые системы слишком незначительные, чтобы подбирать под них запросы.

Но согласитесь, вручную подбирать все эти запросы очень сложно, муторно и долго. Поэтому лучше воспользоваться программами.

Составляем семантическое ядро: программы

  1. На верхней панели нажмите на шестеренку и зайдите в настройки. Здесь много всего можно подстроить под себя, но сейчас перейдите в последнюю вкладку Yandex.Direct;
  2. Введите логин и пароль от Яндекса (создайте доп.ящик, т.к. его могут забанить);
  3. Жмите создать новый проект, назовите и сохраните его;
  4. Нажмите на «Пакетный сбор слов из левой колонки Yandex Wordstat»;
  5. Внесите первичный запрос и пару основных, затем жмите Начать сбор;
  6. Просмотрите выдачу и пометьте галочкой все, которые не подходят для вас, потом кликните правой кнопкой мыши и Удалить отмеченные строки;
  7. Нажмите «Сбор частотности из сервиса Yandex.Wordstat» — Собрать частотности «!».
  8. Ориентируйтесь именно на столбец «Частотность «!»» — это конкретное число запросов именно этой фразы (в месяц). Можно отфильтровать по возрастанию, и сразу отбросить все КЗ с частотностью ниже 30 — это всего 1 запрос в день.
  9. Экспортируйте данные в Excel – нажмите на верхней панели соответствующий значок.

платная программа (около 1700 рублей). С ним работают профессиональные сеошники. Если вы хотите просто подобрать СЯ для небольшого блога и все, не стоит платить такие деньги за программу, лучше использовать Словоеб. Чаще всего ее покупают опытные блоггеры со множеством сайтов или веб-райтеры, занимающиеся сео-статьями.

Работать с программой очень просто:

  1. Начать новый проект;
  2. Выбрать регион Россия + СНГ (или другое);
  3. Введите поисковый запрос и нажмите на кнопку Яндекс.Вордстат (1 выделенная зеленым кнопка);
  4. Просмотрите варианты и выберите подходящие;
  5. Перенесите подходящие запросы во 2 и 3 кнопки, выделенные зеленым на скрине;
  6. Получите подходящие ключи.

Сама программа довольно проста в использовании + есть инструкции в интернете. При желании можно купить и пользоваться.

Составляем семантическое ядро своими руками

Подберите вышеуказанными способами подходящие ключевые запросы. Не стоит сразу набирать 2000, можно ограничиться 200 запросами, а потом развивать. Посидите и подумайте, какие ключи можно использовать и составьте полный список. Вам нужно набрать ключи для первой страницы и еще для нескольких статей.

Отсейте слова и запросы, по которым вы не планируете продвигаться. У меня часто попадаются запросы вроде «работа на дому Пермь» или по другим городам, так что их сразу выкидываю. Оценивайте сразу – что хотят получить люди по этому запросу и сможете ли вы это дать?

Убирайте высококонкурентные запросы, по которым вы не сможете пробиться в ТОП10. При возникновении сомнений посмотрите на сайте Мутаген уровень конкуренции. Ну или вручную оценивайте выдачу – популярные запросы видно сразу.

Распределите запросы по сайту. Среднечастотные запросы идут на главную страницу, низкочастотные сгруппируйте по смыслу и используйте в статьях или разделах. Используйте их как ключевые слова в статьях (1 среднечастотный главный, пара низкочастотных в статье и подзаголовках, и разбавьте по тексту вспомогательными). Вписывайте в среднем 1-2 ключа на 2000 знаков, не чаще.

Некоторые не создают СЯ и все равно добиваются успеха. Но лучше знать, как составить семантическое ядро своими руками, программы для подбора слов сделают это практически на автомате (словоеб). А вам будет потом намного проще развиваться и писать статьи.

Семантическое ядро сайта – это полный набор ключевых слов, соответствующих тематике веб-ресурса, по которым пользователи смогут найти его в поисковой системе.


Больше видео на нашем канале - изучайте интернет-маркетинг с SEMANTICA

К примеру, сказочный персонаж баба Яга будет иметь следующее семантическое ядро: баба Яга, баба Яга сказки, баба Яга русские сказки, баба со ступой сказки, баба со ступой и метлой, злая баба волшебница, баба избушка курьи ножки и т.д.

Для чего сайту семантическое ядро

Перед началом работ по продвижению вам необходимо найти все ключи, по которым его могут искать целевые посетители. На основании семантики составляется структура, распределяются ключи, прописываются метатеги, заголовки документов, описания к изображениям, а также разрабатывается анкор-лист для работы со ссылочной массой.

При составлении семантики необходимо решить главную проблему: определить, какую информацию следует опубликовать, чтобы привлечь потенциального клиента.

Составление списка ключей решает еще одну важную задачу: для каждой поисковой фразы вы определяете релевантную страницу, которая полно сможет ответить на вопрос пользователя.

Данная задача решается двумя путями:

  • Вы создаете структуру сайта на основе семантического ядра.
  • Вы распределяете подобранные термины по готовой структуре ресурса.

Виды ключевых запросов (КЗ) по количеству просмотров

  • НЧ – низкочастотные. До 100 показов в месяц.
  • СЧ – среднечастотные. От 101 до 1 000 показов.
  • ВЧ – высокочастотные. Более 1000 показов.

По статистике, 60-80% всех фраз и слов относятся к НЧ. Работать при продвижении с ними дешевле и проще. Поэтому вы должны составить максимально объемное ядро фраз, которое будет постоянно дополняться новыми НЧ. ВЧ и СЧ также не стоит игнорировать, но основной упор делайте на расширение списка низкочастотников.

Виды КЗ по типу поиска

  • Информационные нужны при поиске информации. «Как жарить картофель» или «сколько звезд на небе».
  • Транзакционные используются для совершения действия. «Заказать пуховый платок», «скачать песни Высоцкого»
  • Навигационные используются для поиска связанного с какой-то конкретной фирмой или привязкой к сайту. «Хлебопечь МВидео» или «смартфоны Связной».
  • Прочие - расширенный список, по которому невозможно понять конечную цель поиска. К примеру, запрос «торт Наполеон» – возможно, человек ищет рецепт его приготовления, а, возможно, хочет купить торт.

Как составить семантику

Необходимо выделить главные термины вашего бизнеса и нужд пользователей. К примеру, клиенты прачечной интересуются стиркой и чисткой.

Затем следует определить хвосты и спецификацию (более 2 слов в запросе), которые пользователи добавляют к главным терминам. Этим вы увеличите охват целевой аудитории и снизите частотность терминов (стирка пледов, стирка курток и т.п.).

Сбор семантического ядра вручную

Яндекс Wordstat

  • Выберите регион веб-ресурса.
  • Введите ключевую фразу. Сервис выдаст вам количество запросов с данным ключевиком за последний месяц и список «родственных» терминов, которые интересовали посетителей. Имейте ввиду, что если вы вводите, к примеру, «купить окна», то получаете результаты по точному вхождению ключевика. Если вводите данный ключ без кавычек, то получаете общие результаты, и запросы типа «купить окна в воронеже» и «купить окно пластиковое» также будут отражены в данной цифре. Для сужения и уточнения показателя можно воспользоваться оператором «!», который ставится перед каждым словом: !купить!окна. Вы получите число, показывающее точную выдачу по каждому слову. Получится список типа: купить пластиковые окна, купить и заказать окна, при этом слова «купить» и «окна» будут отражаться в неизменном виде. Для получения абсолютного показателя по запросу «купить окна» следует применять следующую схему: вводим в кавычках «!купить!окна». Вы получите самые точные данные.
  • Соберите слова из левой колонки и проанализируйте каждое из них. Составьте начальную семантику. Обращайте внимание на правую колонку, содержащую КЗ, которые пользователи вводили до или после поиска слов из левой колонки. Вы найдете еще немало нужных фраз.
  • Пройдите по вкладке «История запросов». На графике вы сможете проанализировать сезонность, популярность фраз в каждом месяце. Неплохие результаты дает работа с поисковыми подсказками Яндекса. Каждый КЗ вводится в поисковое поле, и на основе всплывающих подсказок расширяется семантика.

Google-планировщик КЗ

  • Введите главный ВЧ запрос.
  • Выберите «Получить варианты».
  • Отберите самые релевантные варианты.
  • Повторите данной действие с каждой отобранной фразой.

Изучение сайтов-конкурентов

Используйте этот метод как дополнительный, чтобы определить правильность выбора того или иного КЗ. В этом вам помогут инструменты BuzzSumo, Searchmetrics, SEMRush, Адвсе.

Программы для составления семантического ядра

Рассмотрим некоторые самые популярные сервисы.

  • Key Collector. Если вы составляете очень объемную семантику, то без этого инструмента вам не обойтись. Программа подбирает семантику, обращаясь к Яндекс Wordstat, собирает поисковые подсказки данного поисковика, фильтрует КЗ со стоп-словами, очень низкой частотой, дублированные, определяет сезонность фраз, изучает статистику счетчиков и соцсетей, подбирает релевантные страницы к каждому запросу.
  • SlovoEB. Бесплатный сервис от Key Collector. Инструмент подбирает ключевые слова, группирует и анализирует их.
  • Allsubmitter. Помогает подобрать КЗ, показывает сайты-конкуренты.
  • KeySO. Анализирует видимость веб-ресурса, его конкурентов и помогает в составлении СЯ.

Что нужно учитывать при подборе ключевых фраз

  • Показатели частотности.
  • Большая часть КЗ должна быть НЧ, остальные - СЧ и ВЧ.
  • Релевантные поисковым запросам страницы.
  • Конкурентов в ТОП.
  • Конкурентность фразы.
  • Прогнозируемое количество переходов.
  • Сезонность и геозависимость.
  • КЗ с ошибками.
  • Ассоциативные ключи.

Правильное семантическое ядро

Прежде всего, необходимо определиться с понятиями «ключевые слова», «ключи», «ключевые или поисковые запросы» – это слова или фразы, при помощи которых потенциальные клиенты вашего сайта ищут необходимую информацию.

Составьте следующие списки: категории товаров или услуг (далее -ТУ), названия ТУ их бренды, коммерческие хвосты («купить», «заказать» и т.п.), синонимы, транслитерацию на латинице (или на русском соответственно), профессиональные жаргонизмы («клавиатура» – «клава» и т.п.), технические характеристики, слова с возможными опечатками и ошибками («оренбуржский» вместо «оренбургский» и т.п.), привязки к местности (город, улицы и т.п.).

При работе со списками ориентируйтесь на КЗ из договора по продвижению, структуру веб-ресурса, информацию, прайс-листы, сайты-конкуренты, опыт предшествующего SEO.

Приступайте к подбору семантики путем смешения выбранных на предыдущем шаге словосочетаний, используя ручной метод или при помощи сервисов.

Сформируйте список стоп-слов и удалите неподходящие КЗ.

Сгруппируйте КЗ по релевантным страницам. Под каждый ключ подбирается наиболее релевантная страница или создается новый документ. Желательно данную работу проводить вручную. Для крупных проектов предусмотрены платные сервисы типа Rush Analytics.

Идите от большего к меньшему. Сначала распределите ВЧ по страницам. Затем то же самое проделайте с СЧ. НЧ можно добавить к страницам с распределенными по ним ВЧ и НЧ, а также подобрать для них индивидуальные страницы.
После анализа первых результатов работ мы можем увидеть, что:

  • продвигаемый сайт не виден по всем заявленным ключевым словам;
  • по КЗ выдаются не те документы, которые вы предполагали релевантными;
  • мешает неправильная структура веб-ресурса;
  • для некоторых КЗ релевантны несколько веб-страниц;
  • не хватает релевантных страниц.

При группировке КЗ работайте со всеми возможными разделами на веб-ресурсе, наполняйте каждую страницу полезной информацией, не создавайте дублированный текст.

Распространенные ошибки при работе с КЗ

  • была подобрана только очевидная семантика, без словоформ, синонимов и т.д;
  • оптимизатор распределил слишком много КЗ на одну страницу;
  • одинаковые КЗ распределены на разные страницы.

При этом ранжирование ухудшается, сайт может быть наказан за переспам, а если у веб-ресурса неправильная структура, то продвигать его будет очень сложно.

Не важно, каким образом вы будете подбирать семантику. При правильном подходе вы получите правильное СЯ, необходимое для успешного продвижения сайта.

Давайте напишем простое ядро, которое можно загрузить при помощи бутлоадера GRUB x86-системы. Это ядро будет отображать сообщение на экране и ждать.

Как загружается x86-система?

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

В большей части регистров процессора при запуске уже находятся определённые значения. Регистр, указывающий на адрес инструкций (Instruction Pointer, EIP), хранит в себе адрес памяти, по которому лежит исполняемая процессором инструкция. EIP по умолчанию равен 0xFFFFFFF0 . Таким образом, x86-процессоры на аппаратном уровне начинают работу с адреса 0xFFFFFFF0. На самом деле это - последние 16 байт 32-битного адресного пространства. Этот адрес называется вектором перезагрузки (reset vector).

Теперь карта памяти чипсета гарантирует, что 0xFFFFFFF0 принадлежит определённой части BIOS, не RAM. В это время BIOS копирует себя в RAM для более быстрого доступа. Адрес 0xFFFFFFF0 будет содержать лишь инструкцию перехода на адрес в памяти, где хранится копия BIOS.

Так начинается исполнение кода BIOS. Сперва BIOS ищет устройство, с которого можно загрузиться, в предустановленном порядке. Ищется магическое число, определяющее, является ли устройство загрузочным (511-ый и 512-ый байты первого сектора должны равняться 0xAA55 ).

Когда BIOS находит загрузочное устройство, она копирует содержимое первого сектора устройства в RAM, начиная с физического адреса 0x7c00 ; затем переходит на адрес и исполняет загруженный код. Этот код называется бутлоадером .

Бутлоадер загружает ядро по физическому адресу 0x100000 . Этот адрес используется как стартовый во всех больших ядрах на x86-системах.

Все x86-процессоры начинают работу в простом 16-битном режиме, называющимся реальным режимом . Бутлоадер GRUB переключает режим в 32-битный защищённый режим , устанавливая нижний бит регистра CR0 в 1 . Таким образом, ядро загружается в 32-битном защищённом режиме.

Заметьте, что в случае с ядром Linux GRUB видит протоколы загрузки Linux и загружает ядро в реальном режиме. Ядро самостоятельно переключается в защищённый режим.

Что нам нужно?

  • x86-компьютер;
  • Linux;
  • ld (GNU Linker);

Задаём точку входа на ассемблере

Как бы не хотелось ограничиться одним Си, что-то придётся писать на ассемблере. Мы напишем на нём небольшой файл, который будет служить исходной точкой для нашего ядра. Всё, что он будет делать - вызывать внешнюю функцию, написанную на Си, и останавливать поток программы.

Как же нам сделать так, чтобы этот код обязательно был именно исходной точкой?

Мы будем использовать скрипт-линковщик, который соединяет объектные файлы для создания конечного исполняемого файла. В этом скрипте мы явно укажем, что хотим загрузить данные по адресу 0x100000.

Вот код на ассемблере:

;;kernel.asm bits 32 ;nasm directive - 32 bit section .text global start extern kmain ;kmain is defined in the c file start: cli ;block interrupts mov esp, stack_space ;set stack pointer call kmain hlt ;halt the CPU section .bss resb 8192 ;8KB for stack stack_space:

Первая инструкция, bits 32 , не является x86-ассемблерной инструкцией. Это директива ассемблеру NASM, задающая генерацию кода для процессора, работающего в 32-битном режиме. В нашем случае это не обязательно, но вообще полезно.

Со второй строки начинается секция с кодом.

global - это ещё одна директива NASM, делающая символы исходного кода глобальными. Таким образом, линковщик знает, где находится символ start - наша точка входа.

kmain - это функция, которая будет определена в файле kernel.c . extern значит, что функция объявлена где-то в другом месте.

Затем идёт функция start , вызывающая функцию kmain и останавливающая процессор инструкцией hlt . Именно поэтому мы заранее отключаем прерывания инструкцией cli .

В идеале нам нужно выделить немного памяти и указать на неё указателем стека (esp). Однако, похоже, что GRUB уже сделал это за нас. Тем не менее, вы всё равно выделим немного места в секции BSS и переместим на её начало указатель стека. Мы используем инструкцию resb , которая резервирует указанное число байт. Сразу перед вызовом kmain указатель стека (esp) устанавливается на нужное место инструкцией mov .

Ядро на Си

В kernel.asm мы совершили вызов функции kmain() . Таким образом, наш “сишный” код должен начать исполнение с kmain() :

/* * kernel.c */ void kmain(void) { const char *str = "my first kernel"; char *vidptr = (char*)0xb8000; //video mem begins here. unsigned int i = 0; unsigned int j = 0; /* this loops clears the screen * there are 25 lines each of 80 columns; each element takes 2 bytes */ while(j < 80 * 25 * 2) { /* blank character */ vidptr[j] = " "; /* attribute-byte - light grey on black screen */ vidptr = 0x07; j = j + 2; } j = 0; /* this loop writes the string to video memory */ while(str[j] != "\0") { /* the character"s ascii */ vidptr[i] = str[j]; /* attribute-byte: give character black bg and light grey fg */ vidptr = 0x07; ++j; i = i + 2; } return; }

Всё, что сделает наше ядро - очистит экран и выведет строку “my first kernel”.

Сперва мы создаём указатель vidptr , который указывает на адрес 0xb8000 . С этого адреса в защищённом режиме начинается “видеопамять”. Для вывода текста на экран мы резервируем 25 строк по 80 ASCII-символов, начиная с 0xb8000.

Каждый символ отображается не привычными 8 битами, а 16. В первом байте хранится сам символ, а во втором - attribute-byte . Он описывает форматирование символа, например, его цвет.

Для вывода символа s зелёного цвета на чёрном фоне мы запишем этот символ в первый байт и значение 0x02 во второй. 0 означает чёрный фон, 2 - зелёный цвет текста.

Вот таблица цветов:

0 - Black, 1 - Blue, 2 - Green, 3 - Cyan, 4 - Red, 5 - Magenta, 6 - Brown, 7 - Light Grey, 8 - Dark Grey, 9 - Light Blue, 10/a - Light Green, 11/b - Light Cyan, 12/c - Light Red, 13/d - Light Magenta, 14/e - Light Brown, 15/f – White.

В нашем ядре мы будем использовать светло-серый текст на чёрном фоне, поэтому наш байт-атрибут будет иметь значение 0x07.

В первом цикле программа выводит пустой символ по всей зоне 80×25. Это очистит экран. В следующем цикле в “видеопамять” записываются символы из нуль-терминированной строки “my first kernel” с байтом-атрибутом, равным 0x07. Это выведет строку на экран.

Связующая часть

Мы должны собрать kernel.asm в объектный файл, используя NASM; затем при помощи GCC скомпилировать kernel.c в ещё один объектный файл. Затем их нужно присоединить к исполняемому загрузочному ядру.

Для этого мы будем использовать связывающий скрипт, который передаётся ld в качестве аргумента.

/* * link.ld */ OUTPUT_FORMAT(elf32-i386) ENTRY(start) SECTIONS { . = 0x100000; .text: { *(.text) } .data: { *(.data) } .bss: { *(.bss) } }

Сперва мы зададим формат вывода как 32-битный Executable and Linkable Format (ELF). ELF - это стандарный формат бинарных файлов Unix-систем архитектуры x86. ENTRY принимает один аргумент, определяющий имя символа, являющегося точкой входа. SECTIONS - это самая важная часть. В ней определяется разметка нашего исполняемого файла. Мы определяем, как должны соединяться разные секции и где их разместить.

В скобках после SECTIONS точка (.) отображает счётчик положения, по умолчанию равный 0x0. Его можно изменить, что мы и делаем.

Смотрим на следующую строку: .text: { *(.text) } . Звёздочка (*) - это специальный символ, совпадающий с любым именем файла. Выражение *(.text) означает все секции.text из всех входных файлов.

Таким образом, линковщик соединяет все секции кода объектных файлов в одну секцию исполняемого файла по адресу в счётчике положения (0x100000). После этого значение счётчика станет равным 0x100000 + размер полученной секции.

Аналогично всё происходит и с другим секциями.

Grub и Multiboot

Теперь все файлы готовы к созданию ядра. Но остался ещё один шаг.

Существует стандарт загрузки x86-ядер с использованием бутлоадера, называющийся Multiboot specification . GRUB загрузит наше ядро, только если оно удовлетворяет этим спецификациям .

Следуя им, ядро должно содержать заголовок в своих первых 8 килобайтах. Кроме того, этот заголовок должен содержать 3 поля, являющихся 4 байтами:

  • магическое поле: содержит магическое число 0x1BADB002 для идентификации ядра.
  • поле flags : нам оно не нужно, установим в ноль.
  • поле checksum : если сложить его с предыдущими двумя, должен получиться ноль.

Наш kernel.asm станет таким:

;;kernel.asm ;nasm directive - 32 bit bits 32 section .text ;multiboot spec align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;checksum. m+f+c should be zero global start extern kmain ;kmain is defined in the c file start: cli ;block interrupts mov esp, stack_space ;set stack pointer call kmain hlt ;halt the CPU section .bss resb 8192 ;8KB for stack stack_space:

Строим ядро

Теперь мы создадим объектные файлы из kernel.asm и kernel.c и свяжем их, используя наш скрипт.

Nasm -f elf32 kernel.asm -o kasm.o

Эта строка запустит ассемблер для создания объектного файла kasm.o в формате ELF-32.

Gcc -m32 -c kernel.c -o kc.o

Опция “-c” гарантирует, что после компиляции не произойдёт скрытого линкования.

Ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o

Это запустит линковщик с нашим скриптом и создаст исполняемый файл, называющийся kernel .

Настраиваем grub и запускаем ядро

GRUB требует, чтобы имя ядра удовлетворяло шаблону kernel- . Поэтому переименуйте ядро. Своё я назвал kernel-701.

Теперь поместите его в директорию /boot . Для этого понадобятся права суперпользователя.

В конфигурационном файле GRUB grub.cfg добавьте следующее:

Title myKernel root (hd0,0) kernel /boot/kernel-701 ro

Не забудьте убрать директиву hiddenmenu , если она есть.

Перезагрузите компьютер, и вы увидите список ядер с вашим в том числе. Выберите его, и вы увидите:

Это ваше ядро! В добавим систему ввода / вывода.

P.S.

  • Для любых фокусов с ядром лучше использовать виртуальную машину.
  • Для запуска ядра в grub2 конфиг должен выглядеть так: menuentry "kernel 7001" { set root="hd0,msdos1" multiboot /boot/kernel-7001 ro }
  • если вы хотите использовать эмулятор qemu , используйте: qemu-system-i386 -kernel kernel