カーネルのコンパイル


気を取り直して、カーネルをコンパイルする。

クロスコンパイルから、セルフコンパイルに変更

入手したソースのままでは、ppc_82xx-gcc を使うなど、 クロスコンパイル環境になっている。
Makefile を見ると、.hhl_cross_compile が存在すると、 そこに書いてある文字列(ppc_82xx-)を prefix に使うようだ。
kurobakoVine# mv .hhl_cross_compile .hhl_cross_compile.orig

改行コードの変更

昨日コンパイルエラーになったソースを見ていたのだが、 まったくエラーになる要因が見つからない。
ためしに、file melco_serial.h してみたら、
melco_serial.h: ASCII C program text, with CRLF line terminators
といわれた。 改行コードが CRLF では、\ で継続行としているコードがエラーになる。 Buffalo が作成した/手を入れた
  • linux-2.4.17_kuro-box/arch/ppc/boot/common/misc-simple.c
  • linux-2.4.17_kuro-box/arch/ppc/boot/sandpoint/head.S
  • linux-2.4.17_kuro-box/include/melco/bootinfo.h
  • linux-2.4.17_kuro-box/include/melco/firminfo.h
  • linux-2.4.17_kuro-box/include/melco/flashd.h
  • linux-2.4.17_kuro-box/include/melco/melco_hwctl.h
  • linux-2.4.17_kuro-box/include/melco/melco_rtc.h
  • linux-2.4.17_kuro-box/include/melco/melco_serial.h
    以上のファイルの改行コードを LF のみに変更する。
    ソース提供にあたり、Windows で手を入れたのは、ほぼ確実。
    玄箱付属の CD-ROM には 手を入れる前のソースが付いているようなので、 また後で比較してみよう

    デフォルトコンフィギュレーション

    どういうコンフィギュレーションでカーネルがコンパイルされているのか、 まったく不明。
    linux-2.4.17_kuro-box/arch/ppc/configs/sandpoint_defconfig が あったので、 これを linux-2.4.17_kuro-box/arch/ppc/defconfig にコピーする
    kurobakoVine# cd arch/ppc
    kurobakoVine# mv defconfig defconfig.orig
    kurobakoVine# cp configs/sandpoint_defconfig defconfig
    

    コンパイル

    とりあえず、make config ですべてデフォルト(Enter のみ)にする。
    make dep; make zImage 実行
    45分ほどして、
    ld -T arch/ppc/vmlinux.lds -Ttext 0xc0000000 -Bstatic arch/ppc/kernel/head.o init/main.o init/version.o \
            --start-group \
            arch/ppc/kernel/kernel.o arch/ppc/platforms/platform.o arch/ppc/mm/mm.o arch/ppc/lib/lib.o kernel/kernel.o mm/mm.o f
    s/fs.o ipc/ipc.o \
             drivers/char/char.o drivers/block/block.o drivers/misc/misc.o drivers/net/net.o drivers/media/media.o drivers/ide/i
    dedriver.o drivers/cdrom/driver.o drivers/pci/driver.o drivers/macintosh/macintosh.o \
            net/network.o \
            /mnt/home/HD-H120LAN/buffalo/kurobako/linux-2.4.17_kuro-box/lib/lib.a \
            --end-group \
            -o vmlinux
    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
    make: *** [vmlinux] エラー 1
    

    もう少し解析が必要。今日はここまで


     玄人志向 玄箱をハックしよう  → カーネルのコンパイル(2)
    Copyright (C) 2004 Yasunari Yamashita. All Rights Reserved.
    yasunari @ yamasita.jp
    山下康成京都府向日市