Какие части ядра Linux я могу прочитать для удовольствия?
Программирование - это не моя основная работа, хотя мне это нравится, и иногда мне платят за это. Уже много лет я слышал о Linux, и мои друзья показали мне много * nixes (или * nici?), Хотя я придерживаюсь Mac OS.
Как вы думаете, есть ли какие-то части ядра Linux, на которые я мог бы смотреть, это поможет мне понять, о чем идет речь? Например, как Linux отличается от Дарвина?
Я вырос с ассемблером и DOS, поэтому такие вещи, как прерывания или низкий уровень C, не должны быть препятствиями для понимания. Но в конце меня больше интересуют концепции высокого уровня, такие как потоки или сетевой стек - я знаю, что разные операционные системы делают их по-разному. И я ищу что-то веселое, легкое и приятное, например, ночное чтение.
(Примечание: сделано CW, на всякий случай)
Обновление: я искал некоторые документы и начал читать:
Ответы
Ответ 1
Я бы рекомендовал посмотреть LXR. Это облегчает отслеживание потока кода (вам не нужно искать каждую функцию, которая называется &mdash, ну, у вас есть, но сайт делает это для вас).
Некоторые отправные точки для текущей версии (2.6.30):
-
start_kernel()
— подумайте об этом как о эквиваленте ядра main()
. Эта функция инициализирует почти все подсистемы ядра; следуйте ему, чтобы увидеть в коде, что вы видите, прокручивая экран во время загрузки.
- entry_32.S — системные вызовы и прерывания (версия x86-32, которая должна быть ближе к тому, что вы знаете), обратите внимание на использование диалогов сборок AT & T вместо диалектов Intel, к которым вы могли бы более привыкнуть).
- head_32.S — точка входа ядра. Здесь ядро запускается после переключения в защищенный режим; в конце он назовет
start_kernel()
.
- arch/x86/boot — код бутстрапа реального режима. Он начинается с сборки (boot/header.S), но быстро переходит в код C (начиная с boot/main.c). Инициализация в реальном режиме (в основном вызовы BIOS, которые необходимо выполнить перед переключением в защищенный режим); он скомпилирован с использованием странного трюка GCC (
.code16gcc
), который позволяет генерировать 32-битный код реального режима.
- arch/x86/boot/compressed — если вы когда-нибудь задумывались, откуда приходит сообщение "Decompressing Linux...", это отсюда.
Ответ 2
Сам я всегда находил код планирования задачи немного кривым: -/
Понимаете, вам нужно заняться хобби вне индустрии. Или жизнь: -)
Ответ 3
Комментарии в ядре могут быть довольно забавными. Там некоторые подсказки о том, где найти лучшие из них на kerneltrap.
arch/sparc/lib/checksum.S-/* Солнце, вы просто не можете победить меня, вы просто не можете. Перестань пытаться, arch/sparc/lib/checksum.S: * отказаться. Я серьезно, я буду бить живое дерьмо arch/sparc/lib/checksum.S- * из вас, игра закончилась. */
Ответ 4
linux-0.01.tar.gz - это историческое ядро и полезно для начала
это просто и крошечно и лучше для начала читать
(также он имеет пустоту main (void) Вместо start_kernel() lol: D)
Ответ 5
Возможно, вам захочется прочитать или снять книгу, в которой описывается ядро Linux, прежде чем смотреть в ядро Linux.
В книгах, которые приходят на ум, есть:
Ответ 6
Вероятно, вам больше не придется читать книгу об теории ОС. Что касается исходного кода: я понятия не имею, но вы можете легко загрузить источник ядра Linux и посмотреть, сможете ли вы найти что-либо это призывы.
Ответ 7
При запуске в каталоге src появится интересный код:
grep -ir "fixme" *
также попробуйте другие комические термины, дерьмо, дерьмо, f ***, пингвин и т.д.
Ответ 8
Вам нужно переопределить слово "весело" в вашем контексте.:)
Тем не менее, ядро Linux может быть слишком большим для монстра. Вы можете начать с некоторых академических или более примитивных ядер, чтобы сначала понять, что происходит. Вы также можете рассмотреть книгу Jolix.
Ответ 9
Для многих пользователей было рекомендовано, чтобы v0.0.1 из Linux был проще всего понять.
Хотя, если вы ищете хороший источник ядра для чтения, я бы не пошел с linux, это был зверь взлома (примерно как сказать, что источники GCC - "забавные" ). Вместо этого вы можете попробовать Minix или один из BSD (Дарвин в основном является подразделением NetBSD iirc) или даже одним из многих бесплатных клонов DOS, если все остальное немного страшнее.
Ответ 10
Попробуйте прочитать код, который реализует эти символьные устройства:
/DEV/ ноль
/DEV/ нуль
/DEV/ полный
И, может быть, генераторы случайных чисел, если вы склонны. Код прост и прост, чем все другие драйверы устройства, поскольку он не касается какого-либо оборудования.
Начать с драйверов / char/mem. *
Ответ 11
kernel.h
Некоторые простые трюки, которые мы можем узнать, например
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
...
#define min(x, y) ...
...
#define container_of
Ответ 12
Для удовольствия, я думаю, вы также можете увидеть Minix, это не совсем Linux, но современные операционные системы от tenenbaum хорошо читаются.