Какие есть интересные небольшие проекты ядра Linux, которые помогут изучить исходный код?

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

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


person HenryR    schedule 25.09.2008    source источник


Ответы (5)


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

Вы также можете рассмотреть:

  • Добавление еще одного (очень простого) режима в планировщик для реализации интересующей вас политики. «Одна реализация, чтобы управлять ими всеми» довольно сложна (и еще труднее договориться), но создание простого планировщика O (N), даже элементарного планировщика O (1), может быть сделано относительно просто, с точки зрения алгоритма. Тем не менее, это требует изучения большого количества кода.

  • Написание драйвера устройства для очень простого внешнего оборудования, такого как 8-битный микроконтроллер, который взаимодействует через последовательный порт, или даже что-то, что вы создаете сами. Если у вас есть опыт работы с аппаратным обеспечением, возможно, попробуйте написать драйвер устройства, который может эмулировать контроллер NES (подключив несколько проводов, используя последовательный порт и, возможно, последовательно-параллельный сдвиговый регистр). Вы также можете сделать что-то вроде управления очень простым 7-сегментным светодиодным дисплеем (как в будильнике) или небольшой их коллекцией.

person Matt J    schedule 25.09.2008

В проекте Kernel Janitors есть несколько замечательных.

person mjc    schedule 25.09.2008

Рискуя начать флеймовую войну: я бы рекомендовал вам держаться подальше от кода ядра Linux. Если вы хотите запачкать руки программированием ядра, используйте, например, FreeBSD, NetBSD или OpenSolaris. Код намного чище и лучше структурирован (это, конечно, субъективное мнение), реально спроектирован и даже задокументирован. Кроме того, у них есть отладчик ядра (обратите внимание, что Линус против как отладчиков ядра, так и стабильного API ядра, что делает любое ядро ​​движущейся мишенью для вашей работы). У этих ОС даже есть список проектов на соответствующих веб-сайтах, и у меня лично очень хороший опыт общения с людьми на форумах OpenSolaris и в списках рассылки NetBSD.

Вы говорите, что у вас есть опыт работы с C — посмотрите веб-репозитории исходных кодов Linux и OpenSolaris или некоторых BSD, сравните код и составьте собственное мнение. Я имею в виду, что в UNIX с открытым исходным кодом есть нечто большее, чем в Linux, и что вы должны хотя бы взглянуть на них, прежде чем переходить на Linux.

person zvrba    schedule 25.09.2008
comment
[Требуется ссылка] о том, что Линус выступает против отладчиков ядра? Я знаю его аргументы против использования API. - person pjc50; 08.07.2009
comment
Это достаточно хорошая цитата: linuxtoday.com/news_story.php3?ltsn=2000-09-07-002-21-OS-CY-KN - person zvrba; 08.07.2009

Лучше всего начать с проекта, основанного на Unix v6. «Xv6, простая Unix-подобная обучающая операционная система»

Существует также cynix, простое монолитное Unix-подобное ядро ​​IA-32 (не поддерживается)

Отличный учебник: "Создайте собственную игрушечную клонированную ОС UNIX".

person b3h3m0th    schedule 28.09.2012

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

person user1369975    schedule 07.06.2013