Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: различия в дистрибутивах  (Прочитано 628 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Olej

  • Автор темы
  • Забанен
  • Активист
  • *
  • Сообщений: 884
    • Просмотр профиля
различия в дистрибутивах
« : 27 Февраля 2012, 19:16:49 »
перепаковываю и пересобираю дерево исходных кодов различных модулей ядра Linux:
http://rus-linux.net/forum/viewtopic.php?f=3&t=1549&p=2961#p2961

достаточно неожиданно и любопытно, что то, что безболезненно собирается в одном дистрибутиве, не собирается в другом ... по крайней мере требует минимальных правок в перечислении хэдеров ядра:
Цитировать
На Ubuntu 11.10 (3.0.0-16-generic, gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1) Kexamples.BOOK/dev/mopen/mmopen.c компилируется с ошибкой:
Цитировать
Kexamples.BOOK/dev/mopen/mmopen.c:25:7: error: implicit declaration of function ‘kmalloc’ [-Werror=implicit-function-declaration]
лечится
#include <linux/slab.h>

ничего страшного (при сборке своих кодов), но может быть неприятно и неожиданно (при сборке чужих драйверов) + к подобному нужно быть готовым.

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

То же самое случается при компиляции процессов для user space... но там различия, полагаю, возникают из-за разницы в версии gcc, что тянет за собой различия в стандартной библиотеке С, и, как следствие, в хедер-файлах /usr/include.



Пользователь решил продолжить мысль 27 Февраля 2012, 20:00:23:
и это, конечно, далеко не последние различия, когда переходишь в программировании с одного дистрибутива в другой (хотя везде это Linux и, казалось бы, для программиста всё должно быть одинаково).

Пример (может кому оказаться полезным):

- есть дерево каталогов проектов (разной глубины вложенности):
[olej@notebook Kexamples.BOOK]$ tree | head -n15
.
├── dev
│   ├── cdev
│   │   ├── cdev.hist
│   │   ├── dyndev.c
│   │   ├── fixdev.c
│   │   └── Makefile
│   ├── dev.h
│   ├── devices.txt
│   ├── ioctl
│   │   ├── ioctl.c
│   │   ├── ioctl_dev.c
│   │   ├── ioctl.h
│   │   ├── ioctl.hist
│   │   └── Makefile
 
ну и так далее ... много ;)

- хотелось бы make выполнять сразу над всем деревом а не гулять по каталогам...
Вот начало Makefile такой рекурсивной сборки, которая почти год успешно использовалась в Fedora:
SUBDIRS = $(shell ls -l | awk '/^d/ { print $$9 }')
all:
        @list='$(SUBDIRS)'; for subdir in $$list; do \
          echo "=============== making all in $$subdir ================="; \
          (cd $$subdir && make && cd ../) \
        done;
install:
        @list='$(SUBDIRS)'; for subdir in $$list; do \
          echo "============= making install in $$subdir =============="; \
          (cd $$subdir; make install; cd ../) \
        done
...
ну и так далее...

- в Ubuntu это не работает... потому что настроен другой формат вывода ls:
$ ls -l
итого 100
drwxrwxr-x 7 olej olej 4096 Янв 26 02:36 dev
drwxrwxr-x 2 olej olej 4096 Авг 27 21:57 dma
...
s ls -l
total 96
drwxrwxr-x 7 user user 4096 2011-07-02 13:11 dev
drwxrwxr-x 2 user user 4096 2011-08-27 21:57 dma
...
разный формат даты.

- можно, конечно, перестроить формат, но не хочется затрагивать дефаулты... легче переписать Makefile сценарий:
SUBDIRS = $(shell find . -maxdepth 1 -mindepth 1 -type d -printf "%f\n")

all install uninstall clean disclean:
        @list='$(SUBDIRS)'; for subdir in $$list; do \
           echo "=============== making $@ in $$subdir ================="; \
           (cd $$subdir && make $@) \
        done


Теперь всё ОК ... но это до случая, когда это не придётся адаптировать к какому-нибудь ... Gento. ;)
« Последнее редактирование: 27 Февраля 2012, 20:00:23 от Olej »

 

Страница сгенерирована за 0.019 секунд. Запросов: 22.