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

StackOverflow https://stackoverflow.com/questions/135637

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

А Проект Kernel Janitors есть отличные.

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

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

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

А также есть циникс, простое монолитное unix-подобное ядро ​​IA-32 (не поддерживается)

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top