2006年2月24日(金)

colinux 063 kernel compile

jfs を有効にするため、 linux kernel を再 compile

coLinux 0.6.3 では kernel は

Linux colinux 2.6.11-co-0.6.3 #1 Sun Feb 5 06:44:17 UTC 2006 i686 GNU/Linux

であった。

なので、 2.6.11 の kernel source と、 coLinux のソースを拾ってきて coLinux 上でコンパイル。 root fs 上にはとてもコンパイルに使えるような余地はなかったんだが、ダウンロードした 1G の filesystem image があったので、それを mount して、そこに展開。

で、 make menuconfig して make すると、通らない……。

  CHK     include/linux/version.h
make[1]: `arch/i386/kernel/asm-offsets.s' is up to date.
  CHK     include/linux/compile.h
  CHK     usr/initramfs_list
  CC      arch/i386/kernel/process.o
{standard input}: Assembler messages:
{standard input}:922: Error: suffix or operands invalid for `mov'
{standard input}:923: Error: suffix or operands invalid for `mov'
{standard input}:1145: Error: suffix or operands invalid for `mov'
{standard input}:1146: Error: suffix or operands invalid for `mov'
{standard input}:1232: Error: suffix or operands invalid for `mov'
{standard input}:1233: Error: suffix or operands invalid for `mov'
{standard input}:1292: Error: suffix or operands invalid for `mov'
{standard input}:1293: Error: suffix or operands invalid for `mov'
{standard input}:1381: Error: suffix or operands invalid for `mov'
{standard input}:1393: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/process.o] Error 1
make: *** [arch/i386/kernel] Error 2

あるバージョンの as でしか通らないインラインアセンブラかよ…。けっ、ウンコくせー。

この件は problem while "make" kernel - LinuxQuestions.org で解決。

しかし、すぐ

  CHK     include/linux/version.h
make[1]: `arch/i386/kernel/asm-offsets.s' is up to date.
  CHK     include/linux/compile.h
  CHK     usr/initramfs_list
  CC      arch/i386/kernel/cooperative.o
arch/i386/kernel/cooperative.c: In function `co_switch_wrapper_protected':
arch/i386/kernel/cooperative.c:205: warning: ISO C90 forbids mixed declarations and code
{standard input}: Assembler messages:
{standard input}:343: Error: suffix or operands invalid for `mov'
{standard input}:344: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/cooperative.o] Error 1
make: *** [arch/i386/kernel] Error 2

なる事態になって、こっちは coLinux の方の source じゃなかろか……。

2.6.11 当時の開発環境ならコンパイル通るんだろうか。

とりあえず、内容理解せずに機械的にマネして

--- arch/i386/kernel/cooperative.c.orig	2006-02-25 02:15:35.000000000 +0900
+++ arch/i386/kernel/cooperative.c	2006-02-25 02:18:28.000000000 +0900
@@ -205,8 +205,8 @@
 	unsigned long fs = 0;
 	unsigned long gs = 0;
 
-        asm volatile("movl %%fs,%0": "=m" (fs));
-        asm volatile("movl %%gs,%0": "=m" (gs));
+        asm volatile("mov %%fs,%0": "=m" (fs));
+        asm volatile("mov %%gs,%0": "=m" (gs));
 
 	/*
 	 * Nullify the registers so the passage page code restores to 

とやると通るようだが…。

[referer: [an error occurred while processing this directive]]

あわせて読みたい