LINUX.ORG.RU

модули ядра написанные не на С


0

1

Мне вот просто интересно стало, возможно ли писать модули ядра не на С?
Во всех учебниках/справочниках используется именно этот язык, и даже не обсуждается возможность использования других.
Откуда такая безальтернативность?



Последнее исправление: just_a_student (всего исправлений: 1)

Осторожно, жители параллельной вселенной в треде.

Разрешаю писать на C.

А вообще есть и такое.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)

Ядро и модули написаны на C без плюсов. Безалтернативность потому что монолитное ядро.

antares0 ★★★★
()

безальтернативность потому, что в апстрим не примут не на си код.можешь нагуглить linux modules in haskell или rust. сделать несложно, но придется тащить рантайм языка на несколько мегабайт впридачу к модулю

anonymous
()

Мне вот просто интересно стало, возможно ли писать модули ядра не на С?

Можно, я разрешаю.

Откуда такая безальтернативность?

А какой язык тебе нужен? Сделай обёртку над своим кодом, который использует API ядра и пиши на любом.

i-rinat ★★★★★
()
Ответ на: комментарий от x4DA

монолитное ядро

ортогонально

Не совсем. Тащить дополнительные рантаймы в монолит черевато. В микроядерном варианте с этим было бы проще.

antares0 ★★★★
()

есть интерфейс и есть реализация, соблюдай интерфейс и реализуй на чём хочешь и как хочешь.

тебе просто придётся сохранять и восстанавливать рантайм какого-нить интерпретатора, что потребует несколько напрячься.

dimon555 ★★★★★
()
Ответ на: комментарий от Harald

можно ещё на ассемблере

Линус-палец-смищно.jpg

anonymous
()

Потому что С — самый простой и удобный язык.

Anon
()

Откуда такая безальтернативность?

а зачем лишние сущности?

зы Если компилируемый и не имеет gc - то надо только прописать интерфейсы и вперёд..иначе на порядок сложнее, но преодолимо.

зыы. Теоретически вообще можно кернел перехреначить на спец.язычке оперирующим ядерными сущностями и способному к статической валидации. Академично, красиво, трудоёмко и нахрен ненужно ;-)

MKuznetsov ★★★★★
()

на паскале тоже можно нваверное.

dikiy ★★☆☆☆
()

а какие ваши гарантии что этот ваш язык не потребует толстого рантайма, будет ка же предсказуем как C (читать как высокоуровневый ассемблер), не будет иметь толстой прослойки/лишних абстракций для низкоуровневых операций и etc?

exception13 ★★★★★
()

возможно ли писать модули ядра не на С?

Если это не ядро Linux, то может быть возможно.

annulen ★★★★★
()

Откуда такая безальтернативность?

Кровавый режим Торвальдса

annulen ★★★★★
()

Я глупый вопрос задам, но надеюсь вы простите новичка:
этот самый runtime, (который нужен будет к каждому написанному не на Си модулю ядра) для языка Си уже есть по умолчанию в ядре?
И еще один:
я никогда не занимался написание системных программ(драйверов) для Windows, но интересно: как там дело обстоит с выбором языков?

just_a_student
() автор топика
Ответ на: комментарий от just_a_student

этот самый runtime, (который нужен будет к каждому написанному не на Си модулю ядра) для языка Си уже есть по умолчанию в ядре?

Нету в Си runtime'а. Вообще.

$ cat q.c
unsigned f(unsigned a) {
	unsigned b = 0x77777777;
	unsigned c = a + a;
	b ^= c;
	c |= a;
	return c + b + a;
}
$ gcc -c -O q.c
$ objdump -d q.o

q.o:     формат файла elf64-x86-64


Дизассемблирование раздела .text:

0000000000000000 <f>:
   0:	8d 14 3f             	lea    (%rdi,%rdi,1),%edx
   3:	89 d0                	mov    %edx,%eax
   5:	35 77 77 77 77       	xor    $0x77777777,%eax
   a:	09 fa                	or     %edi,%edx
   c:	01 d0                	add    %edx,%eax
   e:	01 f8                	add    %edi,%eax
  10:	c3                   	retq   
$ 
i-rinat ★★★★★
()
Ответ на: комментарий от uuwaan

ага, только надо бы stl выкинуть. И libstdc++. И никаких эксепшенов и виртуальных функций, потому что код этого добра зачастую криво работает в кернелспейсе. В результате остается C с классами, самодельными темплейтами и парой лишних фич.

anonymous
()
Ответ на: комментарий от i-rinat

А удали-ка ты libc, раз у тебя у c нет runtime.

И это, естественно, что у не исполняемого модуля нет рантайма, так что твой пример ничего не показывает.

anonymous
()
Ответ на: комментарий от anonymous

Ну вообще-то модули ядра не используют никаких функций из libc. (некоторые функции из libc переопределены в ядре, лол).

RiseOfDeath ★★★★
()
Ответ на: комментарий от anonymous

А удали-ка ты libc, раз у тебя у c нет runtime.

libc это библиотека, можно жить и без неё, правда всё общение с ОС придётся руками делать.

i-rinat ★★★★★
()

Я где-то слышал, что у проприетарных драйверов либо NVidai, либо ATI, внутри код на плюсах.

xeiph
()
Ответ на: комментарий от anonymous

Рантайм CRT называется. Где у gcc он хранится, я хз

shamaz
()
Ответ на: комментарий от anonymous

ага, только надо бы stl выкинуть. И libstdc++. И никаких эксепшенов и виртуальных функций, потому что код этого добра зачастую криво работает в кернелспейсе.

И ещё никаких глобальных инстансов классов. И статических внутри функций тоже =).

Deleted
()
Ответ на: комментарий от shamaz

Просто смотря что ты от рантайма ожидаешь.

Вот. Сколько людей, столько и мнений. В этой небольшой теме под рантаймом понимали: 1) интерпретатор скриптового языка, 2) сборщик мусора (перемещающий), 3) libc.

В ядре Linux не используется libc, насколько я знаю.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В ядре Linux не используется libc, насколько я знаю.

Sure. И да, рантайм - это то, что инициализирует стек, к примеру. Так что libc - это никак не рантайм. Ну это в моём понимании

shamaz
()
Ответ на: комментарий от i-rinat

Без libc ты на C даже системный вызов сделать не сможешь. Ты же не считаешь ассемблерные вставки C?

anonymous
()
Ответ на: комментарий от i-rinat

В C есть рантайм, правда он может быть почти пустым и включать только код, который среду исполнения и статичесие переменные, а потом передает управление некоторой функции и каким-то образом обрабатывает её завершение. А может включать помимо этого и libc. Потому и используется C в ядре, встраиваемых системах и др., что среда исполнения может быть почти вся implementation defined.

anonymous
()
Ответ на: комментарий от anonymous

В C есть рантайм

Океюшки, добавим в модули ядра написанные не на С (комментарий) пункт 4: «crtbegin.o, crtend.o» Всё-таки под рантаймом тут понимали нечто потяжелее, которое работает параллельно и делает, чего не просят. Например, сборку мусора.

i-rinat ★★★★★
()

Откуда такая безальтернативность?

От верблюда. Напиши модуль, поймёшь, что это ненужно. И это не просто мем, это здравый смысл.

nanoolinux ★★★★
()
Ответ на: комментарий от x4DA

[offtopic]А коллинеарно значит вдоль?[/offtopic]

WRG ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.