Я в настоящее время читаю Понятия Операционной системы 7-й выпуск Silberschartz, Galvin и Gagne. В конце главы 2 существует осуществление, "Добавьте системный вызов Ядра Linux". К сожалению, я понял структуру каталогов, что используемые авторы полностью отличаются с одним Ubuntu. Например, авторы упомянули "/usr/src/linux-2.x/include/asm-i386/unistd.h", но на моей машине, они:
И в этой папке, я ничто не мог найти названным "asm-i386" :(. Интересно там документация, указанная для Ubuntu? Любое предложение значительно ценилось бы.
Спасибо,
Ubuntu не делает ничего специального. Ваша первая трудность состоит в том, что Вам не установили источник ядра, только заголовки ядрa. Авторы описывают систему с копией источника ядра в /usr/src/linux-2.x
. Если Вы только компилируете внешние модули, заголовки, которые являются тем, что Вы видите в своей системе, достаточно. Ubuntu поставляет заголовки ядрa с этой целью в linux-headers-*
пакеты (который Вы обычно устанавливали бы через зависимость от linux-headers-genericметапакета ). Если Вы нуждаетесь в целом источнике, получаете сжатый архив от linux-source-2.6двоичного пакета .
Другая вещь состоит в том, что структура каталогов изменила немногим более, чем время; архитектурно-зависимые заголовки, перемещенные от include/asm-$ARCH
кому: arch/$ARCH/include/asm
. Кроме того, i386
и x86_64
архитектура была объединена в объединенный x86
в 2.6.24. (Больше деталей здесь.), Таким образом, теперь необходимо заглянуть arch/x86/include
вместо include/asm-i386
.
Вот несколько полезных ресурсов для хакеров ядра Linux:
И также считайте этот поток на Unix & Linux, которая объясняет, как определить местоположение реализации существующего syscall.
/usr/src/linux-headers-2.6.38-10-generic/include/linux/unistd.h
или в будущих ядрах:
/usr/src/linux-headers-KERNEL_VERSION/include/asm-generic/unistd.h
:)