Linux, FreeBSD, OpenBSD autodetect code

Тема в разделе "WASM.UNIX", создана пользователем Quantum, 16 сен 2006.

  1. clone

    clone New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    84
    Quantum
    http://www.linuxhq.com/kernel/file/index.html
    http://lxr.linux.no/source/
     
  2. Bert

    Bert New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    20
    Адрес:
    Russia
    Quantum
    Я делаю так. Захожу на
    http://www.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree
    Там, например, перехожу по дереву в каталог arch/i386. Дальше можно посмотреть файл, историю его изменений (даже дифами с текущей).
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    clone
    Отлично! Спасибо! А есть такое для FreeBSD/NetBSD/OpenBSD/...?
     
  4. clone

    clone New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    84
  5. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    clone
    Кажется, то, что надо. Для NetBSD уже нашёл нужный файл (не прошло и часа, пока я там лазил). В Линуксе более дружелюбный cvs ;)

    Спасибо! Очень помогли.
     
  6. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    Quantum конечной фунцией ОС-детекта поделишься? :)
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Конечная, на данный момент - та, что в аттаче (выше). Я её уже прикрутил к одному кроссплатформенному проекту.

    Если у кого-то при запуске тестового приложения не будет правильно детектиться ось и/или не будет правильно переименовываться текстовый файл, прошу сообщить в этом топике для апдейта ос-детекта.
     
  8. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    чё то у меня даже не откомпилися он, ни через make, ни через gcc. Правда я в linux'e чайник =)
    Код (Text):
    1. ***@***:~/osdetect$ tar -xf osdetect.tar
    2. ***@***:~/osdetect$ ls -la
    3. итого 20
    4. drwxr-xr-x    2 *** ***          57 Сен 21 14:59 .
    5. drwx------    8 *** ***        4096 Сен 21 14:58 ..
    6. -rwxr-xr-x    1 *** ***         137 Сен 19 04:03 Makefile
    7. -rwxr-xr-x    1 *** ***        3694 Сен 19 02:48 osdetect.c
    8. -rw-r--r--    1 *** ***        6656 Сен 21 14:57 osdetect.tar
    9. ***@***:~/osdetect$ make Makefile
    10. make: Цель `Makefile' не требует выполнения команд.
    11. ***@***:~/osdetect$ cat Makefile
    12. osdetect: osdetect.c
    13.         gcc -Wall -O2 -s -nostartfiles -nodefaultlibs -nostdlib -static osdetect.c -o osdetect
    14.         strip -R .comment osdetect
    15. ***@***:~/osdetect$ gcc -Wall -O2 -s -nostartfiles -nodefaultlibs -nostdlib -static osdetect.c -o osdetect
    16. osdetect.c: In function `getOS':
    17. osdetect.c:47: `OS_FREEBSD_6_x' undeclared (first use in this function)
    18. osdetect.c:47: (Each undeclared identifier is reported only once
    19. osdetect.c:47: for each function it appears in.)
    20. osdetect.c:42: warning: `os_ver' might be used uninitialized in this function
    21. ***@***:~/osdetect$ ls -la
    22. итого 20
    23. drwxr-xr-x    2 *** ***          57 Сен 21 14:59 .
    24. drwx------    8 *** ***        4096 Сен 21 14:58 ..
    25. -rwxr-xr-x    1 *** ***         137 Сен 19 04:03 Makefile
    26. -rwxr-xr-x    1 *** ***        3694 Сен 19 02:48 osdetect.c
    27. -rw-r--r--    1 *** ***        6656 Сен 21 14:57 osdetect.tar
    28. ***@***:~/osdetect$
     
  9. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Хех, всё оказалось в маленьком иксе.
    Linux 2.4.25 i686 определяет правильно, и файл переименовывает тоде правильно.
     
  10. clone

    clone New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    84
    Код (Text):
    1. --- osdetect.c-orig 2006-09-20 22:33:27.000000000 +0300
    2. +++ osdetect.c  2006-09-21 16:38:25.000000000 +0300
    3. @@ -44,7 +44,7 @@
    4.         case 0x2F: os_ver = OS_FREEBSD;     break;
    5.         case 0x8F: os_ver = OS_FREEBSD_5_4; break;
    6.         case 0x3B: os_ver = OS_FREEBSD_6_0; break;
    7. -       case 0x1B: os_ver = OS_FREEBSD_6_x; break;
    8. +       case 0x1B: os_ver = OS_FREEBSD_6_X; break;
    9.         case 0x27: os_ver = OS_OPENBSD_3_9; break;
    10.         case 0x1F: os_ver = OS_OPENBSD;     break;
    11.         case 0x33: os_ver = OS_LINUX_2_6;   break;
    Код (Text):
    1. $ ./osdetect
    2. Segmentation fault
    SIGSEGV приходит до _start.
    Код (Text):
    1. $ uname -rvmpo
    2. 2.6.17-gentoo-r8 #1 SMP PREEMPT Wed Sep 20 07:52:48 EEST 2006 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GNU/Linux
    3. $ gcc --version
    4. gcc (GCC) 4.1.1 (Gentoo 4.1.1)
     
  11. clone

    clone New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2006
    Сообщения:
    84
    Собрал с ключём -O0:
    Код (Text):
    1. $ ./osdetect-O0
    2. GS: 0x0000 --> OS: Linux      
    3. 1.txt created
    4. 1.txt renamed to 2.txt
    с оптимизацией >0 - Segfault
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    n0name
    Надо просто make вводить, без параметров.

    clone
    gcc в своём репертуаре :dntknw: Я как-то уже описывал тут похожий глюк компилятора. Возможно, имеет смысл собрать обьектник на gas/fasm/nasm с нужными функциями, чтобы не использовать ассемблерные вставки, ведь именно они так отрицательно влияют на рассудок оптимизатора gcc.