なんか間違ってる気がする
カーネルのコンパイルに失敗する件で、ぐるぐる探したのだが、どうも解決策が間違ってる気がする。
Kuro Box User CommunityのBBSの対処方法。
Edit arch/ppc/boot/common/ns16550.c and add the following line before the line "#include
": #include
This will allow the compilation to complete successfully.
エラーの原因って、SERIAL_PORT_DFNSが定義されてないというものな訳で、SERIAL_PORT_DFNSって何かというと、(asm/pc_serial.hだと)
#define SERIAL_PORT_DFNS \ /* UART CLK PORT IRQ FLAGS */ \ { 0, BASE_BAUD, 0x3F8, 4, STD_COM_FLAGS }, /* ttyS0 */ \ { 0, BASE_BAUD, 0x2F8, 3, STD_COM_FLAGS }, /* ttyS1 */ \ { 0, BASE_BAUD, 0x3E8, 4, STD_COM_FLAGS }, /* ttyS2 */ \ { 0, BASE_BAUD, 0x2E8, 3, STD_COM4_FLAGS }, /* ttyS3 */
みたいな訳で、これを
static struct serial_state rs_table[RS_TABLE_SIZE] = { SERIAL_PORT_DFNS /* Defined in <asm/serial.h> */ };
なんて感じで使うわけで。
となると、どのタイミングかわららないけど、ttyS0とかにアクセスすると、0x3F8とかのアドレス(あるいはI/Oポート)に何か書いてしまう訳で、これって正しいのかなぁ。というか危険。
でもこの問題となっているエラーって、カーネルのコンパイルでは発生しなくて、モジュールのビルドで発生しているところが微妙なところ。わっけわからん。
ということで、linux-2.4.17_kuro-box.tar.gzとかから適当に引っ張ってくる。ついでにserialの原クロックも修正しとく。
arch/ppc/platforms/linkstation.h(2008/1/26 2:25ダメなとこ修正)
#if defined(CONFIG_HGLAN) || defined(CONFIG_HTGL) || defined(CONFIG_KUROBOXHG) #if 0 #define UART_CLK 130041000 /* {32.768MHz*(100% - 0.75%)} * 4 */ #endif #define UART_CLK 130088960 /* 32.768MHz * 4 */ #elif defined(CONFIG_HLAN) || defined(CONFIG_LAN) || defined(CONFIG_KUROBOX)
#ifdef CONFIG_SERIAL_DETECT_IRQ #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST|ASYNC_AUTO_IRQ) #else #define STD_COM_FLAGS (ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST) #endif #define STD_SERIAL_PORT_DFNS \ { 0, BASE_BAUD, LINKSTATION_SERIAL_1,13826, STD_COM_FLAGS, /* ttyS0 */ \ iomem_base: (u8 *)LINKSTATION_SERIAL_1, \ io_type: SERIAL_IO_MEM }, \ { 0, BASE_BAUD, LINKSTATION_SERIAL_0,13725, STD_COM_FLAGS, /* ttyS1 */ \ iomem_base: (u8 *)LINKSTATION_SERIAL_0, \ io_type: SERIAL_IO_MEM }, #if 0 #define SERIAL_PORT_DFNS \ STD_SERIAL_PORT_DFNS #endif #define SERIAL_PORT_DFNS
で、コンパイル。さてどうなるやら。だめでした。上の間違ってるところは直してありますが、後日まとめます。