Обзор двух книжек о linux
Периодически, я работаю над проектом с embedded linux внутри. Для того, чтобы самообразоваться, прочел пару книжек, которые мы сегодня и обозреваем.

Первая проблема с которой вы наверняка столкнетесь, если начнете делать устройство на линуксе — откуда брать образ этого самого линукса? Производители платформы всегда дают готовый образ системы, но он всегда обладает недостатками: во-первых, он очень раздут и легко занимает пару гигабайт. Выгребать оттуда весь лишний хлам — это очень муторно. Плюс стабильность и производительность этих дистрибутивов очень часто под вопросом, потому, что их делают вместо обеда, чтобы влезть в дедлайны.
Эту задачу решают система сборки дистрибутивов. Фактически эта система качает исходники всех программ, которые вы хотите видеть в своем дистрибутиве и компилирует их, естественно, с соблюдением всех лучших практик.
Лучшая на данный момент (по моему мнению) такая система — yocto project. Документации по этой системе полно, но что-то пошло не так и я ее не осилил как не тужился. К счастью, есть книга Embedded Linux Development with Yocto Project, по содержанию, это та-же документация, но написана немного доступнее, и, что самое главное — последовательно, а не в виде справочника. Самое интересное, что после ее прочтения, официальная документация тоже начинает легко читаться.
Книгу я прочел буквально за день. Читается легко и все понятно, особенно, если перед этим безуспешно пытался написать какие-то рецепты.

После того, как дистрибутив собран, неплохо бы написать драйверов для наших железяк, что я с переменным успехом и делаю. Как вы, наверняка, догадываетесь, код ядра linux прочесть за вечер не получится, и, даже если прочесть, все равно ничего не будет понятно, поэтому нужно читать книгу в которой разжуют. По этому поводу я прочел книгу Linux Kernel Development, 3rd Edition, Robert Love
Эта книга, мне понравилась намного меньше. Во-первых, она очень поверхностная, она не дает конкретных знаний, а показывает как система работает то на очень высоком уровне, то ныряет в мелкие подробности. Во-вторых, в книге очень много воды. Если исключить обороты типа «об этом мы говорили в главе %номер_главы% (%название_главы%)», книга сразу похудеет в 2 раза. Зато, она дает представление о общей работе системы — о менеджменте памяти, о процессах, планировании задач, итп.

К сожалению, о написании драйверов там очень мало. Поэтому следующей моей книгой будет Linux Device Drivers. Я ее уже начал читать и могу сказать, что она мне нравится намного больше — сразу ощущается, что ее писали программисты. Никаких соплей. Кроме того, ее можно абсолютно бесплатно скачать тут.
Я бы сказал, что эти книги почти ни в чем не пересекаются. Но если вы хотите писать драйвера прямой сейчас, то на книгу Linux Kernel Development не стоит тратить время.

Первая проблема с которой вы наверняка столкнетесь, если начнете делать устройство на линуксе — откуда брать образ этого самого линукса? Производители платформы всегда дают готовый образ системы, но он всегда обладает недостатками: во-первых, он очень раздут и легко занимает пару гигабайт. Выгребать оттуда весь лишний хлам — это очень муторно. Плюс стабильность и производительность этих дистрибутивов очень часто под вопросом, потому, что их делают вместо обеда, чтобы влезть в дедлайны.
Эту задачу решают система сборки дистрибутивов. Фактически эта система качает исходники всех программ, которые вы хотите видеть в своем дистрибутиве и компилирует их, естественно, с соблюдением всех лучших практик.


Лучшая на данный момент (по моему мнению) такая система — yocto project. Документации по этой системе полно, но что-то пошло не так и я ее не осилил как не тужился. К счастью, есть книга Embedded Linux Development with Yocto Project, по содержанию, это та-же документация, но написана немного доступнее, и, что самое главное — последовательно, а не в виде справочника. Самое интересное, что после ее прочтения, официальная документация тоже начинает легко читаться.
Книгу я прочел буквально за день. Читается легко и все понятно, особенно, если перед этим безуспешно пытался написать какие-то рецепты.

После того, как дистрибутив собран, неплохо бы написать драйверов для наших железяк, что я с переменным успехом и делаю. Как вы, наверняка, догадываетесь, код ядра linux прочесть за вечер не получится, и, даже если прочесть, все равно ничего не будет понятно, поэтому нужно читать книгу в которой разжуют. По этому поводу я прочел книгу Linux Kernel Development, 3rd Edition, Robert Love
Эта книга, мне понравилась намного меньше. Во-первых, она очень поверхностная, она не дает конкретных знаний, а показывает как система работает то на очень высоком уровне, то ныряет в мелкие подробности. Во-вторых, в книге очень много воды. Если исключить обороты типа «об этом мы говорили в главе %номер_главы% (%название_главы%)», книга сразу похудеет в 2 раза. Зато, она дает представление о общей работе системы — о менеджменте памяти, о процессах, планировании задач, итп.

К сожалению, о написании драйверов там очень мало. Поэтому следующей моей книгой будет Linux Device Drivers. Я ее уже начал читать и могу сказать, что она мне нравится намного больше — сразу ощущается, что ее писали программисты. Никаких соплей. Кроме того, ее можно абсолютно бесплатно скачать тут.
Я бы сказал, что эти книги почти ни в чем не пересекаются. Но если вы хотите писать драйвера прямой сейчас, то на книгу Linux Kernel Development не стоит тратить время.
13 комментариев
Недостаток линукса — отсутствие реального времени, но это потихоньку компенсируется. К примеру, AM335x содержит два PRU — считай, дополнительных процессора, которые могут общаться с линуксом и работать в реальном времени.
blog.xenproject.org/tag/nautilus/
globallogic.com.ua/blog/ivi-system-sandboxing/
Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux
вообще, литература о программировании на русском может быть только устаревшей. исключение — злые старые буквари для начинающих, но речь-то не о них.