Pull to refresh

Comments 86

Это просто код, который можно собрать и запустить.

Ого, а я думал, что Линукс - это когда ты с флешки загоняешь в комп отряд Фиксиков, и они там своими помогаторами начинают гонять электроники туда сюда, и поэтому все работает.

Спасибо, открыли глаза.

Идеи для следующих статей:

1) доказать, что вода - мокрая, а не красная

2) что собаки лают горлом, а не задницей

3) что брить мошонку зажигалкой эффективно с точки зрения временных затрат

Если серьезно, то попробуйте в следующий раз перед написанием статьи открывать первую ссылку в гугле

Да ладно вам, нормально. Множество людей, которые с линуксом не особо знакомы за пределами использования графического интерфейса, примерно так (о фиксиках) и считают. А тут хотя бы на очень простом и понятном уровне рассказано, что это за зверь, что за PID 1, на кой фиг он нужен. Неплохо для начала.

UFO landed and left these words here

Это позже. А то как раз и скажут "колдун е..."

Честно говоря, комментарий про зажигалку смешной, но с вашим согласен более

Спасибо за конструктивную критику! Я понимаю, что для таких гуру, как вы, ядро Linux это пройденный этап. Но, как показывает практика, многие новички застревают именно на этапе абстракций, и разложить всё по полочкам на практике гораздо полезнее, чем в сотый раз отправлять людей в гугл.

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

Кто-то объясняет архитектуру систем, а кто-то борется с локтями при помощи шкантов и алюминиевого профиля. Удачи с модернизацией, не забудьте про наждачку в следующий раз!

Отнюдь, я тот еще чайник, и стараюсь линух стороной обходить. Моя претензия строго ограничена поставленным в статье вопросом и ответом на него.

Компьютер выполняет программы за электричество, а не кастует спеллы за ману, об этом еще дед Фортран в советском учебнике рассказывал.

Касательно статьи про кресло:

1) лайк за королевский черри-пиккинг

2) статья подавалась, как юмористическая, и ставила перед собой именно такую цель. Если называть статью по аналогии с вашей, тогда получилось бы что-то вроде "кресло - реально ли просто штука для посидеть?", затем абзац мол "мы попытались сесть, и действительно, мы смогли сесть! Это доказывает, что кресло - штука для посидеть!", затем еще абзац "мы посидели еще, и так и не упали - еще оно доказательство в копилку нашей теории"

Если вы хотели написать статью для молодых и зеленых, то обозначайте это именно так. Если бы изначальный вопрос был бы поставлен как нибудь типа "ядро линукса для самых маленьких/для чйников", "ядро линукса на пальцах" или "ядро линукса не такое страшное, как может казаться" - было бы ровно 0 вопросов, но в текущей постановке это хуже, чем первая ссылка в гугле

Отличная статья. Понятная и с простыми примерами. А вам как мастеру "фекальных технологии" не нужно было открывать рот, благо автор мастерски поставил вас на место.

Вообще нет.

Статья норм. Не более.

Критика заголовка по делу - он пытается доказать общеизвестное

Открывать рот имеет право каждый. А тут ещё и написано по делу

Автор статьи занялся демагогией и вместо ответа по существу перешёл на личности. В качественной дискуссии это вообще-то моветон.

Абсолютно не имеет значение, была ли у автора критики такая статья или нет, это никак не влияет на ценность его мнения.

Нормальный ответ автора статьи был бы в том, что статья для начинающих, чтобы лучше объяснить им один слой абстракции и всё

Так мастерски поставил на место, что даже не смог ответить по сути претензии.

Меня улыбает, как двух половозрелых мужчин рвет от слова "фекальный" как монахинь от шального презерватива)

Мои статьи от данной отличает два важных фактора:

1) тело статьи не оторвано от заголовка, введения и вывода

2) тело статьи не находится в первой ссылке гугла.

Более того, если вы заглянете глубже в статью про кресло, вы можете обнаружить, что это всего лишь пример того, как у программиста зазудило сделать что нибудь руками и поделиться этой ерундой. Так вами обсосанный (поняли, как я вас, а?))) заголовок явно сигнализирует о несерьёзности статьи, в отличие от местных "Компьютер оперирует байтами?!? О_О Британские ученые доказали! Файлы Эпштейна раскрыты! ЦРУ, КГБ, масоны и опричники скрывали правду!"

Я готовь признать, что переборщил с резкостью, но как же обидно, что за этот коммент слили карму в минус в то время, как я эту статью прочитал в первые минуты публикации и мог легким движением руки пнуть ее в заминусованные статьи, откуда она вряд ли бы выбралась. Но герои не носят плащи...

Да что ты, черт побери, такое несешь

Ваши фантазии про «героя без плаща» это просто смешно. Судя по реакциям, статья получила то, что заслужила, и ваши попытки на что-то повлиять тут погоды не делают.

Я ваш коммент не минусовал, вам накидали другие за то, что вы начали душнить на ровном месте. Если не хотите, чтобы в будущем было обидно за карму пишите что-то реально полезное, а не про «фекальные технологии»

Я и не видел смысла вам что-то объяснять или отвечать по существу, так как вы просто зашли поспорить ради спора. Мне это абсолютно не интересно, особенно учитывая ваши аргументы

У вас хорошая статья, не кормите тролля

Если статья на старте уходит в <0, куча народа ее уже не увидит, потому что не читает все подряд.

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

Отвечать по существу вы не видели смысла , но не ответить не смогли. Настолько не интересно, что просто не возможно об этом молчать

И ещё раз лайк за филигранный черри-пикинг

Внимательно ознакомился с твоими статьями. Оказывается, у вас даже места нет, куда вас поставить. Так что да, вам бы радоваться что на токсичных коментах можете карму поправить.

Все когда-то писали своё ядро ...

Многие писали и разбирали на лабах.

Как-то совсем непонятны эти упражнения, которые с деталями расписаны во множестве книг ... зачем это? Что даёт? На компе всё либо программа, либо ресурс (данные) )))) Азы программирования и видения мира с этой стороны проходят в классе, наверное, 8-9м ...

Вроде как комменты и существуют, чтобы критику высказать, а не для того чтобы слабонервный и недооценный автор в обидках начал сталкирить первого же проходимца из комментариев. Можно ещё слоган написать: Сделаем айти снова великим. После такой зачетной статьи такое поведение — мелочно и просто стремно.

не всегда первая ссылка в гугле объясняет лучше людей

Статья офигенная! На таком просто примере показывает за что ядро отвечает и что ему нужно для работы.

Не увидел за что отвечает ядро, а особенно что ему нужно для работы.

Ну плохо читали. Чтобы запустить ядро нужны всего-то PID 1 и файловая система.

Эм... Это явно вы плохо читали. Pid 1 прививает ядро первому запущенному процессу. Обычно это init. Для запуска ядра файловая система не требуется.

Ой ли? Прям таки не требуется?

Автор показал что он запустил ядро без файловой системы. Ядро инициировалось, загрузила драйвера экрана и вывела kernel panic. Технически ядро, как программа, запустилась и работает.

во первых он тут ничего не показал, а во вторых даже для загрузки с первых секторов диска требуются инструкции и драйвера, где они по вашему хранятся - в нигде?

Ядро не требует запуска с первых секторов, я открою вам тайну. Ядро запускается из памяти, а его считывает в память загрузчик. В качестве которого может выступать достаточно большой спектр программ. Ядро может находится в NAND, на emmc в отдельном разделе, даже на перфокартах технически может находится ядро. Сектора диска это только в рамках вашего компьютера.
Пожалуйста, хотя бы ради приличия прежде чем затевать глупый спор, хотя бы изучите матчасть.
Судя по вашим комментариям вы не являетесь разработчиком ядра, и поэтому спор очень странный.

На каком носителе может находится ядро это не важно, хоть на бумаге, я говорю о самом загрузчике и вы это прекрасно понимаете, только валяете дурака, я даже задал вам конкретные наводящие вопросы, но вы их проигнорировали, ещё и указываете на мою несостоятельность как спорщика, раз я не разработчик ядра по вашей скромной оценке, то мне и спорить нельзя? Ну что ж, это дёшево с вашей стороны, очень дёшево.

Зачем вы скатываетесь до хамства?

Не задавайте вопросов, говорите прямо, что вы хотите сказать.

Ядро можно загрузить в память с помощью jtag и запустить, без загрузчика. Важно просто процессору передать на него управление. В некотором смысле (упрощённо) можно даже без загрузчика запустить ядро.

На реальной системе это работать не будет, потому что загрузчик ещё предварительно инициализирует железо: типа оперативной памяти, тайминги всякие и прочее, регистры инициализации носителей и прочее, прочее, что ядро уже не делает. Но в целом, если включить это в код ядра (не делайте так, это плохо), то будет работать. Для работы ядра файловая система не нужна.

Хочу обратить ваше пристальное внимание, что загрузчик не использует никаких файловых систем, он просто инициализирует предварительно железо!

я вам прямо сказал всё что хотел, вы говорите о каких то приличиях, хотя сами похоже не особо потрудились разобраться в вопросе. Если загрузить слепок ядра напрямую в оперативную память то наверное да, процессор может получить доступ к ядру linux без файловой системы, но это уже не запуск в прямом смысле, а то что продемонстрированно в статье, это совсем другие технологии.

Я до сих пор не понимаю, а зачем файловая система? Вот например, как идёт запуск на системе MIPS:

Предзагрузчик инициализирует NAND и ОЗУ, вычитывает из области NAND, по зашитым адресам u-boot в область ОЗУ, далее передаёт управление на u-boot в ОЗУ. U-boot далее инициализирует остальное железо, вычитывает из другой области nand тупо по адресам ядро в ОЗУ и передаёт ему управление. Нигде нет файловой системы, она не фигурирует тут.

Даже если взять классическую систему, типа третьего пентиума, то ядро тоже можно запустить из BIOS минуя файловую систему. Она правда там не нужна.

Если она необходима, пожалуйста распишите механизм где она нужна, и как вы это понимаете? Без хамства, я вежливо и подробно вам рассказываю где вы заблуждаетесь.

окей, хорошо, судя по всему uboot может загрузить initramfs в raw формате без участия файловой системы, но обычно для запуска linux или других прошивок он использует именно файловые системы, про pentium со старым bios я наверно уже написал выше, ладно, спасибо, буду знать

Опустим тот факт что в коде u-boot той версии нет этого функционала. Но даже если он бы был, то зачем? Загрузить ядро из NAND в файл, погонять его по fs затем выгрузить его в ОЗУ и передать ему управление с помощью jump? Или может проще миновать ненужный этап?

Я до сих пор не услышал от вас объяснение механизма зачем нужна файловая система для запуска ядра.

И опять же, где вы в моих комментариях хамство нашли?

Вы по сути беседы дайте ответ пожалуйста.

Ахахаха, открываете мне тайну, какой же вы наглый, козыряете своими псевдознаниями ещё и о приличиях говорите, просто смешно.

UEFI Firmware File System и Coreboot File System это по вашему не файловые системы?

Совершенно необязательная составляющая для запуска ядра linux. Можно использовать bios, u-boot, grub или вообще вручную загрузить ядро в память и передать ему управление (например, с помощью jtag во время отладки).

З.Ы. Да, и у автора поста не используется UEFI. В qemu по умолчанию используется BIOS, а именно SeaBIOS https://github.com/coreboot/seabios

вы даже читатете невнимательно, я в комментарии уже указал Coreboot File System, в чём ваша проблема? С таким апломбом нести чепуху, даже чтобы запустить граб вам понадобится файловая система, может быть на легаси устройствах из 90ых и 80ых там где пзу bios отображалась прямо в cpu, можно было говорить об отсутствии файловой системы, но не сейчас.

Понимаете, я достаточно много разрабатываю. Не знаю где вы увидели опломб, извините если указал вам на вашу некомпетентность. Вы тут скатываетесь до хамства. Автор запускает ядро без использования UEFI Firmware File System и Coreboot File System. Так что для запуска и работы ядра файловая система не требуется!

В каком месте в моих комментариях вы нашли хамство? Ещё и дизлайки ставите, абсолютное ребячество. Вы сами сказали что для запуска ядра он использует seabios, а теперь говорите что файловую систему он не использует, ну глупость же.

Потыкайте меня носом, где в этой цепочке coreboot использует fs?

А главное, зачем она ядру?

З.Ы. Дизлайки ставлю не я, у меня отключена возможность ставить лайки и дизлайки.

конкретно для qemu судя по всему не требуется coreboot и coreboot fs, а seabios общается с qemu напрямую через configuration интерфейс, но даже так, тут seabios уже на диске лежит, в файловой системе ОС. Запуск же seabios непосредственно на железе требует наличия coreboot и coreboot fs, по-другому он не работает.

С трудом представляю человека, который запускает SeaBIOS на реальном железе. Но вот обычный BIOS, например на Pentium 3 не имеет никаких файловых систем и сможет стартануть ядро без них.

Но зачем SeaBIOS coreboot fs я не нашёл. Могли бы вы мне дать информацию ссылками для ознакомления, для расширения моего кругозора. Буду признателен.

Жесть, то есть современная реализация bios с открытым исходным кодом на реальном железе вам представляется с трудом, а вот устаревший bios pentium 3, компьютера созданного почти 3 десятилетия назад, непререкаемый авторитет, браво!

Seabios тоже устарел. А с трудом представляю, потому что надо будет сделать очень много доработок чтобы запустить на реальном железа.

Вы можете ответить по существу, зачем coreboot файловая система и где она а SeaBIOS? Можно прям ссылки в коде на git, если вам будет проще.

Да что вы говорите? Откуда такие выводы?

Вбейте в поисковую систему coreboot fs или у вас лапки?

Никакого хамства с моей стороны нет, вы первый перешли на личности, ну а я просто ответил на ваши несостоятельные комментарии.

Процитируйте, пожалуйста, где я перешёл на личности и я публично перед вами извинюсь.Не хотел вас задеть.

потрясающе, вам ответили, а вы всё равно дурака валяете, ну тогда процитируйте где я вам нахамил?

>>Судя по вашим >>комментариям вы не >>являетесь разработчиком >>ядра, и поэтому спор очень >>странный.

Вот здесь вы переходите на личности. Извиняйтесь, сказали А говорите Бэ

Не очень корректно.

Не требуется дисковая файловая система. Но тот же initramfs это всё ещё файловая система

Для запуска ядра не требуется. Kernel panic выводит ядро, которое запущено и работает.

Окей, согласен до запуска start_kernel() действительно не требуется файловая система, ибо там ассемлер, мы читаем сектора и у нас просто туча байт в памяти. Если рассматривать так, что рантайм уже запущен и работает, то ФС не требуется

В контексте статьи мы говорили о том, что ядро - это программа. Для запуска программы его не требуется. Но мы не говорим о том, что функционал будет раскрыт.

Ядру не требуется читать сектора, что ж вы все с этими секторами носитесь. Есть разные архитектурные решения.

Ваш комментарий хорошо иллюстрирует то, что автор не смог донести мысль простым людям, которые в этом ничего не понимают.

Сколько снобизма. :)
Статья напоминает мем "как нарисовать сову".

Черный ящик стал прозрачным. Это просто код, который можно собрать и запустить.

В каком месте этот чёрный ящик стал прозрачным то? Для тех, кто не в теме. От того, что какой-то "непонятный файл" отдали в аргументе "какой-то непонятной программе" вместе с другими какими-то аргументами, ничего не стало прозрачным для целевой аудитории, для которой вроде как написана эта статья. Как, собственно, происходит загрузка, инициализация, запуск кода ядра, драйверов и т.д.?

Забавная статья, я бы сказал именно забавная. Есть ряд дополнение и замечаний:

  1. Ядро может быть где угодно, и не обязательно в /boot. Во встраиваемых системах оно может лежать в области ПЗУ (например в разделе NAND и не быть видным из файловой системы), загрузчиком типа u-boot распаковываться в ОЗУ и передавать ему управление.

  2. Статическая компиляция есть и в Си, можно прилинковать статические библиотеки, это часто используется если libc на целевой системе не совместима. В принципе тут можно написать мейкфайл.

  3. На мой взгляд, статья неполноценна в том смысле что это запускается в qemu, и там проходит очень много за кадром, как ядро загружается и инициализируется. А кухня там будь здоров, тут вспомнить пред загрузчик, загрузчик, при этом цепочка может быть весьма большая (тут можно вспомнить BIOS, GRUB и иже с ним, на каждой системе свои погремушки). И без загрузчика ядро не запустить. А загрузчик берёт этот архив, распаковывает его в ОЗУ и передаёт ему управление.

  4. Мне не хватило самого главного: если это программа, то пару слов как её собрать, модифицировать и запустить.

Итого, я согласен с первым комментатором.

P.S. И где код на гоу, а то это "как нарисовать сову".

Думаю автор взял стандартную инсталляцию Linux где ядро по умолчанию лежит в /boot. Ну и как бы в статье именно про ядро, а не про BIOS и загрузчик (имхо это отдельная большая тема), а про то как запустить это буквально вся статья, да упрощённо, но всё же.

Ну я не увидел что это обычная программа. Это ни разу не очевидно из этих пассов.

имхо это отдельная большая тема

Да, это очевидно, не зря же книга Таненбаума есть. Но это лишь говорит о том, что статья по сути ни о чём, а ядро - это нифига не "обычная программа", которую можно просто взять и запустить как бинарь на Go, который так любит автор. Просто так взять и запустить эту программу не получится. Автору вот эмулятор понадобился, который делает под капотом кучу работы, что позволяет загрузить и запустить код ядра, который уже запустит код пользователя. То, что ядро - это бинарь, скомпилированный из исходного кода, а не волшебный артефакт - это и так всем было понятно, статью об этом писать не обязательно.

Главное, что статья не делает чёрный ящик прозрачным, как заявляет автор.

Скорее всего ядро, которое запускал автор, можно просто взять и запустить из UEFI Shell, или даже просто его может загрузить UEFI, если прописать в NVRAM, где лежит ядро и initramfs, так как большинство современных ядер для x86_64 собирается с CONFIG_EFI_STUB.

Статья дает лишь поверхностное представление о ядре Linux с явными упрощениями и неточностями. У новичка она убирает страх перед неизвестным, а у более опытных - неточности и упрощения сразу бросаются в глаза.

Я думаю, в статье желательно было бы указать целевую аудиторию и честно сказать, что в реальности не так все просто.

Р.S. Указывать на недостатки и ошибки всегда проще, чем их не допускать и исправлять.

Поддержу, хотелось бы все то же самое но с учетом этих замечаний. Потому что статья реально полезная для новичков. Вот я тоже помню что читал на хабре опять же что в загрузчик можно поместить свою программу, и если там не ядро а просто программа hello world то напечатается hello world. Правда опять же если нет ос, то программа должна сама уметь печатать символы на мониторе, то есть тоже не такой уж и простой hello world видимо. Или я вообще все не так понял...

Отличная статья, я как-то давно баловался компиляцией ядра linux, настройкой grub и lilo, и тут чуть больше раскрылось как оно работает. Особенно подача, что можно прям в консоли всё повторить.
Часто мучает вопрос как linux работает под капотом в Android? Интерфейсы, роутинг, порты. Запустить обычную linux программу в Android

Смотря что вы понимаете под обычной программой Linux и как запустить. Если консольные приложения и команды Linux, то можно воспользоваться эмулятором терминала Termux

Интересуют отличия и ограничения. Имел в виду консольные программы, которые работают с сетью.

ping, nmap работают даже без рутования. Для ip, ifconfig - я думаю, просто нужно рутануть андроид

Андроид это java,это не особо тяжёлый язык,плюсы сложнее.

Статья читается плохо, как будто прогоняли через ии

Если бы прогоняли через ИИ читалась бы лучше. Не стоит думать что люди не умеют писать коряво.

Ядро Linux: Реально ли это просто программа?

Следующая статья в серии должна быть - "Linux: Реально ли это операционная система, или просто набор программ?"

Но сперва — а что это вообще за ядро?

Можно ядро MS-DOS рассмотреть. И показать разницу между ядром Linux и ядром MS-DOS.

И общие черты

Ядро - это не только файл,ядро не может существовать без модулей,это основная часть ядра,потому что аппаратная часть полностью зависима от них.

Все модули можно включить в ядро и сделать его монолитным. Что достаточно часто делается на встраиваемых системах, когда нет смысла делать обновляемые модули.

ядро Linux изначально монолитное.Почему тогда сайт с ядром и модулями называется kernel.org?

На данный момент оно не монолитное. А то что я говорю, это уже модули загружены в ядро без возможности их выгрузки.

Автор @PrincePercia не обращай внимания на нашу специфичную душноту. Для первого раза на хабре, отличная статья. Может взять какие-то мысли и идеи. Не надо обижаться, тут просто сидят спецы, которые много чего могут сказать и написать по теме. Просто им лень.

Я все понимаю, никаких обид и быть не может)

По заголовку статьи, сразу понял, что тут будет рассадник адептов GNU/linux, а значит и бужет халивар))))
Только ради жтого и зашел!

ну судя по вашей статье ядро это какой-то файл, который нужно передать как параметр для QEMU :)

По сути что-то вроде ввода в lfs. Достаточно Интересная статья, хоть и довольно очевидные вещи рассказываются.

Отличная статья, автор! Спасибо за то, что нашли время объяснить базовые вещи доступным языком. Не каждый день встретишь материал, который действительно помогает новичкам разобраться в теме.
А что касается местных Оскаров Уайльдов в комментариях… Знаете, всегда забавно наблюдать, как люди, которые сами не написали ни одной полезной строчки, вдруг становятся экспертами по качеству чужих статей. “Вода мокрая”, “собаки лают горлом” - браво, какой интеллектуальный юмор! Жаль только, что энергию, потраченную на сарказм, нельзя конвертировать в полезный контент.
Если вам, критики, настолько очевидны все эти вещи - напишите свою статью. Покажите, как надо. Расскажите про JTAG, GRUB, u-boot во всех деталях. Только вот проблема в том, что критиковать всегда проще, чем создавать. А сидеть и ныть “все знают” - это не вклад в сообщество, это просто шум.
Автор, продолжайте писать. Те, кому реально нужна информация, её оценят. Остальные пусть дальше точат свои языки - им это явно приносит больше удовольствия, чем что-то созидательное.

Я критикую, можете заглянуть ко мне в профиль. А автор молодец, кто ж спорит.

Спасибо за статью, она помогает проще смотреть на вещи, показывая суть операционной системы.

По поводу как перекомпилировать ядро, была байка, что в лохматых 2009-х, был обычный комп, на котором поставлен CentOS 5.3 с DVD, но в ядре отсутствовал драйвер сетевой карты. А комп собирали как стенд для веб-сервера - без сетевухи никак! На соседнем виндовом компе были найдены в интернете "заклинания" для компиляции ядра и нужные исходники драйвера сетевухи. На линукс исходники затащили через mount usb-флешки. Дальше долгая компиляция ядра с вкомпиливанием драйверов сетевухи. Цимес ситуации был в том, что любое yum update через несколько недель/месяцев обновляло ядро, в котором не было драйвера и перекомпиляцию надо было повторять заново. Было круто ощущать "я перекомпилил ядро и сетевуха заработала", но такого простого понимания, как в статье, где и что именно "ядро" - ещё не было. С тех пор не люблю yum/dnf update)))

Sign up to leave a comment.

Articles