カーネルのコンパイル(2)


昨日の続き。
init/main.o: In function `write_flash':
init/main.o(.text+0x31c): undefined reference to `flash_st_compt_erase'
init/main.o(.text+0x31c): relocation truncated to fit: R_PPC_REL24 flash_st_compt_erase
init/main.o(.text+0x360): undefined reference to `flash_toshiba_write'
init/main.o(.text+0x360): relocation truncated to fit: R_PPC_REL24 flash_toshiba_write
を解決するところから。

エラー原因を探す

flash_st_compt_erase() と flash_toshiba_write() とを grep しまくったところ、なんとヘッダファイル include/melco/flashd.h で定義されている
include/melco/flashd.h を include しているファイルをこれまた grep しまくって、 drivers/block/flashdisk/flashdisk.c であることを突き止めた。
drivers/block/flashdisk には、Makefile がないので、 ひとつ上のディレクトリを散歩していると Config.in に
bool 'MELCO Flash ROM disk support' CONFIG_BLK_DEV_FLASHD
を見つけた。これに違いない。
ついでに、MELCO を grep してみると、
[yasunari@ls linux-2.4.17_kuro-box]$ cd drivers/
[yasunari@ls drivers]$ grep MELCO */Config.in
block/Config.in:bool 'MELCO Flash ROM disk support' CONFIG_BLK_DEV_FLASHD
char/Config.in:bool 'MELCO RTC Device' CONFIG_CHAR_DEV_MELCO_RTC
との事。

make config のやり直し

[yasunari@ls linux-2.4.17_kuro-box]$ make config
	:
	:
*
* Block devices
*
Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [N/y/m/?]
Compaq SMART2 support (CONFIG_BLK_CPQ_DA) [N/y/m/?]
Compaq Smart Array 5xxx support (CONFIG_BLK_CPQ_CISS_DA) [N/y/m/?]
Mylex DAC960/DAC1100 PCI RAID Controller support (CONFIG_BLK_DEV_DAC960) [N/y/m/?]
Loopback device support (CONFIG_BLK_DEV_LOOP) [Y/m/n/?]
Network block device support (CONFIG_BLK_DEV_NBD) [N/y/m/?]
RAM disk support (CONFIG_BLK_DEV_RAM) [Y/m/n/?]
  Default RAM disk size (CONFIG_BLK_DEV_RAM_SIZE) [4096]
  Initial RAM disk (initrd) support (CONFIG_BLK_DEV_INITRD) [Y/n/?]
MELCO Flash ROM disk support (CONFIG_BLK_DEV_FLASHD) [N/y/?] y
(ちゃんと Melco って書いたるやん)
	:
	:
*
* Ftape, the floppy tape device driver
*
Ftape (QIC-80/Travan) support (CONFIG_FTAPE) [N/y/m/?]
/dev/agpgart (AGP Support) (CONFIG_AGP) [N/y/m/?]
Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) (CONFIG_DRM) [N/y/?]
MELCO RTC Device (CONFIG_CHAR_DEV_MELCO_RTC) [N/y/?] y
	:
	:

make しなおし

[yasunari@ls linux-2.4.17_kuro-box]$ make clean
	:
	:
[yasunari@ls linux-2.4.17_kuro-box]$ make dep ; make zImage
約30分後、今度は、
ld -T /mnt/home/HD-H120LAN/buffalo/kurobako/linux-2.4.17_kuro-box/arch/ppc/vmlinux.lds -Ttext 0x00800000 -Tbss 0x00900000 -o
 bootcode.tmp boot_head.o ../common/misc-common.o ../common/boot_misc-simple.o ../common/ns16550.o ../common/string.o ../../
kernel/melco_hwctl.o ../lib/zlib.a
objcopy -O elf32-powerpc -R .comment \
        bootcode.tmp bootcode
objcopy -I elf32-powerpc -O binary   bootcode bootcode.bin
rm -f bootcode.tmp
../utils/setsum/setsum ../../../../firminfo.txt ../images/vmlinux.gz -o ../images/kernimg.bin
../utils/setsum/setsum: ../utils/setsum/setsum: cannot execute binary file
make[2]: *** [zImage] エラー 126
make[2]: 出ます ディレクトリ `/mnt/home/HD-H120LAN/buffalo/kurobako/linux-2.4.17_kuro-box/arch/ppc/boot/sandpoint'
make[1]: *** [zImage] エラー 2
make[1]: 出ます ディレクトリ `/mnt/home/HD-H120LAN/buffalo/kurobako/linux-2.4.17_kuro-box/arch/ppc/boot'
make: *** [zImage] エラー 2
やれやれ。一筋縄ではいかんわ。
[yasunari@ls linux-2.4.17_kuro-box]$ file arch/ppc/boot/utils/setsum/setsum
arch/ppc/boot/utils/setsum/setsum: ELF 32-bit LSB executable, Intel 80386, version 1, for GNU/Linux 2.2.5, dynamically linke
d (uses shared libs), stripped
とのこと。そりゃ x86 のバイナリは動かんわな。
 玄人志向 玄箱をハックしよう  → カーネルのコンパイル(3)
Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
yasunari @ yamasita.jp
山下康成京都府向日市