ローダの改造(2)


7/11に、 2つ目のカーネルを起動できるようローダに手を入れたが、 デフォルトのカーネルが標準カーネル(2.4.17)にしてあり、 /dev/fl1 の 2MB 目以降に入れた2つ目のカーネルを起動するためには、 シリアルコンソールから root=/dev/hda1 に続けて 2 を入力する必要が あった。
ところが、最近はもうほとんど標準カーネルを起動することもなくなり、 デフォルトで2つ目のカーネルが起動するようにすることにした。

ソース修正

*** misc-simple.c.orig  2004-07-07 14:48:12.000000000 +0900
--- misc-simple.c	2004-08-01 03:25:40.000000000 +0900
***************
*** 116,122 ****
  
  #ifdef FLASH_BOOT_IMAGE
  void alart_mode(void);
! struct firminfo* image_addr = (struct firminfo*)KERNEL_IMAGE_ADDRESS;
  
  int timer      = 0;
  int next_timer = 0;
--- 116,123 ----
  
  #ifdef FLASH_BOOT_IMAGE
  void alart_mode(void);
! // struct firminfo* image_addr = (struct firminfo*)KERNEL_IMAGE_ADDRESS;
! struct firminfo* image_addr = (struct firminfo*)(KERNEL_IMAGE_ADDRESS + 2 * 1024 * 1024 );
  
  int timer      = 0;
  int next_timer = 0;
***************
*** 181,186 ****
--- 182,188 ----
  	 * were relocated to.
  	 */
  #ifdef FLASH_BOOT_IMAGE
+ original_kernel:
  	{
  	int              i = 0;
  	info = image_addr;
***************
*** 343,348 ****
--- 345,358 ----
  	
  #ifdef FLASH_BOOT_IMAGE
  	i=0;while(i<5 && cmd_line[i] == "debug"[i]) ++i;
+ 
+ 	/* 012345678901234 */
+ 	/* root=/dev/hda1  */
+ 	if ( cmd_line[14] == '1' ) {
+ 		puts("original kernel\n");
+ 		image_addr = (struct firminfo*)(KERNEL_IMAGE_ADDRESS);
+ 		goto original_kernel;
+ 	}
  #endif
  	
  	/* mappings on early boot can only handle 16M */

/dev/fl2 への書き込み

[root@hackkit /root]# cat bootcode.bin > /dev/fl2

1つ目のカーネルの起動確認

root=/dev/hda1 に続けて 1 を入力すると 1つ目のカーネルが起動するはず。
なお、
KURO-BOX(maru) が1つ目のカーネル 2.4.17_kuro-box
KURO-BOX(oike) が2つ目のカーネル 2.4.19_kuro-box
******* Product Information *******
----------------------------------
Product Name: KURO-BOX(oike)
          VER: 1.02
         Date: 2004/7/31 18:56:8
----------------------------------
Firmware check:Warning:invalid data size
done.

>>root=/dev/hda11
original kernel

******* Product Information *******
----------------------------------
Product Name: KURO-BOX(maru)
          VER: 1.00
         Date: 2004/7/10 15:6:33
----------------------------------
Firmware check:done.

>>root=/dev/hda1
Now Loading...done.
Now Booting
Memory BAT mapping: BAT2=64Mb, BAT3=0Mb, residual: 0Mb
Linux version 2.4.17_kuro-box (root@toda_dev.melcoinc.co.jp) (gcc version 2.95.3 20010315 (release/MontaVista)) #4 2004年 4月 16日 金曜日 11:45:05 JST
KURO-BOX (C) 2004 KUROUTO-SHIKOU.
	:
	:
Vine Linux 2.6 (La Fleur de Bouard)
Kernel 2.4.17_kuro-box on a ppc

hackkit login: root
Password: 
[root@hackkit /root]# uname -a
Linux hackkit 2.4.17_kuro-box #4 2004年 4月 16日 金曜日 11:45:05 JST ppc unknown
OK.

2つ目のカーネルの起動確認

root=/dev/hda1 のまま放置すると 2つ目のカーネルが起動するはず。
******* Product Information *******
----------------------------------
Product Name: KURO-BOX(oike)
          VER: 1.02
         Date: 2004/7/31 18:56:8
----------------------------------
Firmware check:Warning:invalid data size
done.

>>root=/dev/hda1
Now Loading...done.
Now Booting
Memory BAT mapping: BAT2=64Mb, BAT3=0Mb, residual: 0Mb
Linux version 2.4.19_kuro-box (yasunari@hackkit) (gcc version 2.95.3 20010315 (release/franzo/20010312)) #1 Sat Jul 31 18:10:43 JST 2004
KURO-BOX (C) 2004 KUROUTO-SHIKOU.
	:
	:
Vine Linux 2.6 (La Fleur de Bouard)
Kernel 2.4.19_kuro-box on a ppc

hackkit login: root
Password: 
[root@hackkit /root]# uname -a
Linux hackkit 2.4.19_kuro-box #1 Sat Jul 31 18:10:43 JST 2004 ppc unknown
OK。

いつも作業に使っている PC にはシリアルポートがないので シリアルコンソールを使うために ThinkPad 385D を引っ張り出してきていたのだが、 これで(非常時以外は)ThinkPad 385D を使う必要がなくなり いつも作業に使っている PC だけでよくなった。


ハックの記録 → HD-LAN ソース CD

Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市