LINUX.ORG.RU

Slackware 9.1 + kernel 2.6.32 on PCem 17

 ,


1

1

Да, дело было вечером, решил помучать давным-давно поставленную на виртуалку Слакварь 9.1

Собрал на хосте pcem v17 (после обновления gcc / g++ пришлось обновит wxGTK, а уж потом - pcem), попробовал самые разные процы на стандартном ядре 2.4.22 - вниз аж до 486sx16!

Потом попробовал собрать linux-2.6.32.26 - там были мелкие проблемы, но я каждый раз запускал что-то типа

find . -name  *.c | xargs grep enable_IR_x2apic

и правил немного исходники.

В итоге собрал монолит на 3 с небольшим мега. И там даже сеть работает.

Сюрприз был в том, что на некоторых 486 из тех которые эмулирует PCem моё ядро (с поддержкой SMP) валилось в панику на старте. Можно конечно было собрать без SMP, но я решил поковыряться... И добился нормальной загрузки всего лишь добавив


----->if(cpu_has_apic)
<------>enable_IR_x2apic();


в arch/x86/kernel/smpboot.c

Мелочь, а приятно.

>>> Просмотр (1600x900, 258 Kb)

★★★★★

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

что это и зачем?

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

Но он же мёртв уже лет так 10-15! Это не считая того вопроса, а собственно как под него собирать сборочное окружение? У него же был ограниченный выбор очень компактных статичных пакетов и что то сложное с корнем.

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

вниз аж до 486sx16

А больше и не нужно, инфа 100%!

Гонка за “лошадиными силами” настольных ком­пьютеров окончена. В 1987 г. мы объявили возможности машин на базе процессоров 80286 ограниченными и сказали, что, хотя и можем продолжить работу на компью­терах АТ-286, ничего нового они нам не прине­сут. Будущее принадлежало микропроцессорам 80386. Оно и сейчас принадлежит им. Система ко­манд процессоров 386 — это реальная перспекти­ва. Это сердце машин АТ-486 и 586. Но откро­венно говоря, не существует весомых причин для того, чтобы и дальше наращивать производитель­ ность процессоров. Большинство программ для настольных компьютеров, даже Windows, пре­красно работают на современных 386 и 486 про­цессорах.

Ко всей этой массе добавьте новый микропро­цессор Intel 486 с тактовой частотой 50 МГц. Вам что, безумно хочется иметь на столе машины с тактовой частотой 50 МГц? Мне нет. Ну конечно, если вы дадите мне такой компьютер, я восполь­зуюсь им и получу удовольствие от работы. Но это не столь важно, как иметь 386 машину.

Конечно же, быстрее значит лучше, но и эконо­мичность играет не последнюю роль. О микро­процессор 80486 можно буквально обжечь пальцы, что подтверждает, какое огромное количество энергии он потребляет. Intel никогда не славилась производством экономичных микросхем.

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

Слакварь опять же, между year 2006 и 15.0 (KDE3 скомпилировал с патчами до установки gcc 11.2 - пока не отвалилось, но если захочется что-то подправить в коде - придётся пересобирать, скорее всего с правками)

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Это qemu так работает. Тут с задержками все более чем в порядке, ибо DMA в эмулируемых машинах похоже сломано :}

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от skyman

Внезапно умеет в процессоры ниже 486/dx4, и в этом случае разница похоже была не только косметическая.

Andrew-R ★★★★★
() автор топика

Патч выглядит как-то так.

bash-4.3$ cat lin-2.6.32.26.diff
diff -u -r -N linux-2.6.32.26/arch/x86/kernel/apic/apic.c linux-2.6.32.26-my/arch/x86/kernel/apic/apic.c
--- linux-2.6.32.26/arch/x86/kernel/apic/apic.c 2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/arch/x86/kernel/apic/apic.c      2022-06-24 01:14:21.000000000 +0300
@@ -1419,6 +1419,7 @@
        int ret, x2apic_enabled = 0;
        int dmar_table_init_ret = 0;

+
 #ifdef CONFIG_INTR_REMAP
        dmar_table_init_ret = dmar_table_init();
        if (dmar_table_init_ret)
diff -u -r -N linux-2.6.32.26/arch/x86/kernel/ptrace.c linux-2.6.32.26-my/arch/x86/kernel/ptrace.c
--- linux-2.6.32.26/arch/x86/kernel/ptrace.c    2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/arch/x86/kernel/ptrace.c 2022-06-23 15:33:03.000000000 +0300
@@ -1469,7 +1469,7 @@
  * We must return the syscall number to actually look up in the table.
  * This can be -1L to skip running any syscall at all.
  */
-asmregparm long syscall_trace_enter(struct pt_regs *regs)
+long syscall_trace_enter(struct pt_regs *regs)
 {
        long ret = 0;

@@ -1514,7 +1514,7 @@
        return ret ?: regs->orig_ax;
 }

-asmregparm void syscall_trace_leave(struct pt_regs *regs)
+void syscall_trace_leave(struct pt_regs *regs)
 {
        if (unlikely(current->audit_context))
                audit_syscall_exit(AUDITSC_RESULT(regs->ax), regs->ax);
diff -u -r -N linux-2.6.32.26/arch/x86/kernel/smpboot.c linux-2.6.32.26-my/arch/x86/kernel/smpboot.c
--- linux-2.6.32.26/arch/x86/kernel/smpboot.c   2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/arch/x86/kernel/smpboot.c        2022-06-24 01:21:49.000000000 +0300
@@ -1084,7 +1084,9 @@
        }
        set_cpu_sibling_map(0);

+       if(cpu_has_apic)
        enable_IR_x2apic();
+
        default_setup_apic_routing();

        if (smp_sanity_check(max_cpus) < 0) {
diff -u -r -N linux-2.6.32.26/arch/x86/vdso/Makefile linux-2.6.32.26-my/arch/x86/vdso/Makefile
--- linux-2.6.32.26/arch/x86/vdso/Makefile      2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/arch/x86/vdso/Makefile   2022-06-23 15:37:45.000000000 +0300
@@ -21,11 +21,11 @@

 $(obj)/vdso.o: $(obj)/vdso.so

-targets += vdso.so vdso.so.dbg vdso.lds $(vobjs-y)
+targets +=  vdso.lds $(vobjs-y)

 export CPPFLAGS_vdso.lds += -P -C

-VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \
+VDSO_LDFLAGS_vdso.lds =  -Wl,-soname=linux-vdso.so.1 \
                        -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096

 $(obj)/vdso.o: $(src)/vdso.S $(obj)/vdso.so
@@ -69,7 +69,7 @@
 vdso32-images                  = $(vdso32.so-y:%=vdso32-%.so)

 CPPFLAGS_vdso32.lds = $(CPPFLAGS_vdso.lds)
-VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
+VDSO_LDFLAGS_vdso32.lds =  -Wl,-soname=linux-gate.so.1

 # This makes sure the $(obj) subdirectory exists even though vdso32/
 # is not a kbuild sub-make subdirectory.
diff -u -r -N linux-2.6.32.26/drivers/pnp/pnpbios/bioscalls.c linux-2.6.32.26-my/drivers/pnp/pnpbios/bioscalls.c
--- linux-2.6.32.26/drivers/pnp/pnpbios/bioscalls.c     2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/drivers/pnp/pnpbios/bioscalls.c  2022-06-23 20:31:52.000000000 +0300
@@ -23,7 +23,7 @@

 #include "pnpbios.h"

-static struct {
+static  struct {
        u16 offset;
        u16 segment;
 } pnp_bios_callpoint;
diff -u -r -N linux-2.6.32.26/include/linux/compiler-gcc11.h linux-2.6.32.26-my/include/linux/compiler-gcc11.h
--- linux-2.6.32.26/include/linux/compiler-gcc11.h      1970-01-01 03:00:00.000000000 +0300
+++ linux-2.6.32.26-my/include/linux/compiler-gcc11.h   2010-11-22 21:48:20.000000000 +0300
@@ -0,0 +1,39 @@
+#ifndef __LINUX_COMPILER_H
+#error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead."
+#endif
+
+/* GCC 4.1.[01] miscompiles __weak */
+#ifdef __KERNEL__
+# if __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1
+#  error Your version of gcc miscompiles the __weak directive
+# endif
+#endif
+
+#define __used                 __attribute__((__used__))
+#define __must_check           __attribute__((warn_unused_result))
+#define __compiler_offsetof(a,b) __builtin_offsetof(a,b)
+#define __always_inline                inline __attribute__((always_inline))
+
+/*
+ * A trick to suppress uninitialized variable warning without generating any
+ * code
+ */
+#define uninitialized_var(x) x = x
+
+#if __GNUC_MINOR__ >= 3
+/* Mark functions as cold. gcc will assume any path leading to a call
+   to them will be unlikely.  This means a lot of manual unlikely()s
+   are unnecessary now for any paths leading to the usual suspects
+   like BUG(), printk(), panic() etc. [but let's keep them for now for
+   older compilers]
+
+   Early snapshots of gcc 4.3 don't support this and we can't detect this
+   in the preprocessor, but we can live with this because they're unreleased.
+   Maketime probing would be overkill here.
+
+   gcc also has a __attribute__((__hot__)) to move hot functions into
+   a special section, but I don't see any sense in this right now in
+   the kernel context */
+#define __cold                 __attribute__((__cold__))
+
+#endif
diff -u -r -N linux-2.6.32.26/include/linux/tty.h linux-2.6.32.26-my/include/linux/tty.h
--- linux-2.6.32.26/include/linux/tty.h 2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/include/linux/tty.h      2022-06-23 15:28:08.000000000 +0300
@@ -478,7 +478,7 @@
 extern void tty_port_close_end(struct tty_port *port, struct tty_struct *tty);
 extern void tty_port_close(struct tty_port *port,
                                struct tty_struct *tty, struct file *filp);
-extern inline int tty_port_users(struct tty_port *port)
+static inline int tty_port_users(struct tty_port *port)
 {
        return port->count + port->blocked_open;
 }
diff -u -r -N linux-2.6.32.26/kernel/sched.c linux-2.6.32.26-my/kernel/sched.c
--- linux-2.6.32.26/kernel/sched.c      2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/kernel/sched.c   2022-06-23 20:28:42.000000000 +0300
@@ -662,7 +662,7 @@
 #define cpu_curr(cpu)          (cpu_rq(cpu)->curr)
 #define raw_rq()               (&__raw_get_cpu_var(runqueues))

-inline void update_rq_clock(struct rq *rq)
+static inline void update_rq_clock(struct rq *rq)
 {
        rq->clock = sched_clock_cpu(cpu_of(rq));
 }
diff -u -r -N linux-2.6.32.26/kernel/timeconst.pl linux-2.6.32.26-my/kernel/timeconst.pl
--- linux-2.6.32.26/kernel/timeconst.pl 2010-11-22 21:48:20.000000000 +0300
+++ linux-2.6.32.26-my/kernel/timeconst.pl      2022-06-23 15:39:34.000000000 +0300
@@ -370,7 +370,7 @@
        }

        @val = @{$canned_values{$hz}};
-       if (!defined(@val)) {
+       if (1) {
                @val = compute_values($hz);
        }
        output($hz, @val);
bash-4.3$

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от skyman

QEMU не эмулирует древнее железо и производительность.

steemandlinux ★★★★★
()
Ответ на: комментарий от Andrew-R

Я поставил Windows 95 на машину 386DX40, так он там просто летал, в упор не помню такой высокой производительности на реальном железе. Проверял в бенчмарке процессор, вроде его производительность реальна. Правда эмулятор был 86Box, а pcem. Возможно сам 86Box кривой, потому что форматирование выполняется в 10 раз быстрее чем в pcem.

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

Какой ужасный закос под винду на хосте. А консоль похожа на виндовый блокнот.

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

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

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

Эмулируют. 386SX16 намного медленнее чем 386DX40. Косяк я так понимаю в I/O операциях, они слишком быстрые для железа тех времен.

steemandlinux ★★★★★
()
Последнее исправление: steemandlinux (всего исправлений: 2)
Ответ на: комментарий от firkax

Это не обычная виртуалка, именно что эмулятор старых ПК. Тебе даже нужно будет при использовании брать BIOS для тех матплат и звуковых и видеокарт, что он эмулирует, так как в себе он их не содержит из-за авторского права.

Vsevolod-linuxoid ★★★★★
()

как в этом КДЕ3 обстоят дела с переключением раскладки?

я как-то ставил - там глючило это все

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

ru/us перключается нормально, но настроено в xorg.conf и индикатором работает kxkb (переключение по ctrl-shift)

Andrew-R ★★★★★
() автор топика
Ответ на: комментарий от votafak

Там глючила кдешная переключалка, но если настраивать в конфиге иксов, а саму переключалку только как индикатор юзать — работало нормально. Главное было в KDEшные настройки переключалки не лазить. А так да, она одно время локальным мемом была, её ЕМНИП так до смерти третьего КДЕ и не починили.

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от firkax

Какой ужасный закос под винду на хосте. А консоль похожа на виндовый блокнот.

Дефолт КДЕ3. ИМХО, гораздо симпатичнее КДЕ4 и клизма-десктоп.

skiminok1986 ★★★★★
()

pcem конечно хорош и вроде даже ожил, но не попробовать ли пекабоярину ibmulator?

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

это fluxbox - полный дефолт, я ничего не настраивал.

Andrew-R ★★★★★
() автор топика

Хорошие были времена. Кстати, актуальную версию ядра 2.6.32 можно выкачать из расширенной поддержки RHEL 6. Только там btrfs дропнули.

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

как в этом КДЕ3 обстоят дела с переключением раскладки?

Переключение раскладки лучше всего настроить в xorg.conf глобально и тогда пофиг какое там DE или WM.

Xenius ★★★★★
()

Ох чёрт, аж ностальгия нахлынула!

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