Семантичне ядро ​​- як правильно скласти? Давай напишемо ядро! Створюємо найпростіше робоче ядро ​​операційної системи 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 до 1000 показів.
  • ВЧ – високочастотні. Понад 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 секції . .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;< 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. Він визначає форматування символу, наприклад, його колір.

Для виведення символу зеленого кольору на чорному тлі ми запишемо цей символ в перший байт і значення 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 повинен бути 0 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