Єдина Країна! Единая Страна!

Archive for the 'Ядро Linux' Category

Як додати системний виклик до ядра Linux

Неділя, Серпень 1st, 2010

Системний виклик — це інтерфейс між адресним простором користувача (user-space) і сервісами, які надаються ядром Linux. Оскільки даний сервіс надається ядром, виконати функцію ядра напряму не є можливим; тому слід використовувати спеціальний інтерфейс між простором ядра та користувача. Таким інтерфейсом є системний виклик (system call).

Ядро використовує системні виклики для надання програмам, які працюють у просторі користувача спосіб для запиту на отримання певних сервісів від неї, які у звичайних умовах не дозволяються. До таких сервісів належать постійна пам’ять, оперативна пам’ять, мережа, управління процесами, тощо.. Наприклад, якщо процес у просторі користувача захоче прочитати файл — йому доведеться виконати системні виклики ‘open’ та ‘read’.

Системні виклики не викликаються процесами безпосередньо. Зазвичай, у стандартній бібліотеці мови С присутні функції-обгортки, які надають зручні інтерфейси до усіх системних викликів.

У цій статті я коротенько опишу Linux system calls interface, і покажу, як додати до ядра новий системний виклик. Я використовував ядро версії 2.6.32.

Read the rest of this entry »

Пришвидшення процесу компіляції ядра Linux

П’ятниця, Червень 25th, 2010

Чекати, доки ядро компілюється — завдання для дуже пасивних і спокійних програмістів. Та й фізично, як не дивно, далеко не завжди є достатньо часу. Ось кілька порад, які допоможуть пришвидшити цей процес:

1. Якщо у вас багатоядерний процесор — запускайте make з параметром -j, значення якого вказує на кількість процесів, на які розпаралелюється компіляція. Так, наприклад, make -j 2 розпаралелює компіляцію на два процеси, що суттєво пришвидшує її на двоядерних процесорах.
2. Якщо можливо — запускайте gcc з ключиком -pipe, який змушує компілятор використовувати пайпи замість тимчасових файлів.
3. Вимкніть параметр CONFIG_DEBUG_KERNEL, якщо він вам не потрібен.
4. Повимикайте в конфігурації ядра усі непотрібні (ну гаразд, бодай найбільш явні) параметри.
5. Встановіть і налаштуйте ccache. Він кешує об’єктні файли. Щоправда, з ccache потрібно бути досить обережним, бо той може наробити чимало проблем, якщо вам потрібно перезібрати ядро з нуля, в такому разі не забувайте чистити кеш ccache.
6. Спробуйте distcc, який розпаралелює компіляцію на кілька фізичних машин.
7. Якщо маєте бодай 2 Ґб оперативки — спробуйте tmpfs. Він дозволяє змонтувати будь яку теку прямо в оперативну пам’ять, що суттєво пришвидшує роботу з тимчасовими файлами, яких під час компіляції створюється дуже не мало. Приклад:

# sudo mount -t tmpfs -o size=700M, mode=0777 tmpfs /usr/src/linux

Розробка для ядра Linux — 2. Ще трохи простих, але важливих речей

Понеділок, Червень 21st, 2010

Цей допис є продовженням і доповненням першого (Розробка для ядра Linux — 1. printk(“Привіт, світе!\n”)). Тут я розгляну такі базові, але дуже важливі речі, як залежність версій і таблиця символів ядра.

Read the rest of this entry »

Розробка для ядра Linux — 1. printk(“Привіт, світе!\n”)

Понеділок, Червень 14th, 2010

Я нещодавно серйозно (як мені здається) взявся за вивчення такої крутої штукенції, як “Linux kernel development”. Я вихований девізом “I’ve learned. I’ll share”, тому спробую ділитись новою для мене інформацією з вами.

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

Read the rest of this entry »