Какие интересные, небольшие проекты ядра Linux помогают изучать источник?
Какие небольшие проекты вы бы предложили новичку с ядром, но кто-то, у кого много систем и C опыта? Целью является знакомство с исходным кодом ядра и средство для экспериментов с сумасшедшими идеями.
Я пытаюсь думать о некоторых управляемых небольших задачах (например, добавить syscall), но что бы вы предложили? Для целевой аудитории подумайте, кто-то, у кого есть хотя бы курс бакалавриата по их поясу.
Ответы
Ответ 1
Когда я занял вышеупомянутый курс ОС, одна из наших задач заключалась в том, чтобы добавить несколько системных вызовов. Они были предельно просты, ничего, кроме чтения и сброса счетчиков, которые подсчитывали количество вызовов других системных вызовов. Тем не менее, добавление syscall требует просмотра и модификации довольно большого количества файлов. Многие из них находятся в одном и том же относительно маленьком поддереве исходного кода ядра, но его достаточно, чтобы познакомить вас с соглашениями о кодировании, по крайней мере.
Вы также можете рассмотреть:
-
Добавление другого (очень простого) режима в планировщик для реализации политики, которую вы считаете интересной. "Одна реализация для их правильного управления" довольно сложна (и еще сложнее договориться), но простой планировщик O (N), даже рудиментарный планировщик O (1), можно сделать относительно просто, алгоритмически. Несмотря на это, для этого требуется пробивать много кода.
-
Написание драйвера устройства для очень простой части внешнего оборудования, например, 8-битного микроконтроллера, который обменивается данными через последовательный порт или даже с чем-то, что вы создаете самостоятельно. Если у вас есть какие-либо проблемы с оборудованием, попробуйте написать драйвер устройства, который может эмулировать контроллер NES (бит-бит нескольких проводов с использованием последовательного порта и, возможно, последовательный-параллельный регистр сдвига). Вы также можете сделать что-то вроде вождения действительно простого 7-сегментного светодиодного дисплея (например, у вас в будильнике) или небольшой коллекции из них.
Ответ 2
Проект Kernel Janitors имеет несколько отличных.
Ответ 3
С риском начать пламенную войну: я рекомендую вам держаться подальше от кода ядра Linux. Если вы хотите, чтобы ваши руки были грязными при программировании ядра, используйте, например, FreeBSD, NetBSD или OpenSolaris. Код намного чище и лучше структурирован (это, конечно, субъективное мнение), фактически разработанный и даже документированный. Кроме того, у них есть отладчик ядра (обратите внимание, что Linus против обоих отладчиков ядра и стабильного API ядра, что делает любое ядро движущей целью вашей работы). У этих ОС даже есть список проектов на их соответствующих веб-сайтах, и у меня лично есть очень хороший опыт работы с людьми на форумах OpenSolaris и списках рассылки NetBSD.
Вы говорите, что у вас есть опыт работы с C - посмотрите репозитории исходного кода Linux и OpenSolaris или некоторые BSD, сравните код и сделайте свое собственное мнение. Я думаю, что я думаю, что там больше для UNIX с открытым исходным кодом, чем Linux, и что вы должны хотя бы взглянуть на них, прежде чем отправиться в Linux.
Ответ 4
Хорошим местом для начала является проект на основе Unix v6.
"Xv6, простая Unix-подобная учебная операционная система"
Существует также cynix, простое монолитическое Unix-подобное ядро IA-32 (Unmaintained)
Отличный учебник " Сверните свою собственную игрушку UNIX-clone OS".
Ответ 5
Попробуйте загрузить исходный код MINIX
и играйте с ним, попробуйте понять логику, и это займет время, не сомневаясь, но если вы будете придерживаться этого, вы можете быть экспертом через какое-то время