Какие интересные небольшие проекты ядра Linux помогут узнать источник? - PullRequest
13 голосов
/ 25 сентября 2008

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

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

Ответы [ 5 ]

6 голосов
/ 26 сентября 2008

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

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

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

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

6 голосов
/ 26 сентября 2008

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

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

6 голосов
/ 26 сентября 2008

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

2 голосов
/ 28 сентября 2012

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

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

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

0 голосов
/ 07 июня 2013

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

...