トップ «前の日記(2007-11-04) 最新 次の日記(2007-11-06)» 編集

Pyon's Diary

[はてなブックマーク登録数] [Google に登録] [RSS フィード] Gourmet Hardware Programming Society Software
Amazon
成る可くJIS X 0213:2004對應MSフォント(5.0)、IPAフォント(003.02)で御覽下さい

2007-11-05 舊 平成拾玖年丁亥長月廿陸日癸卯 (月・晴) [長年日記]

[節] KURO-BOX/PRO (No.27) 保證對象内の儘シリアル出力を確認する。

SCON-KIT/PRO を使用してシリアル出力を確認する爲には前面基板に半田附けを行ふ必要が在るが、其れを行ふとメーカ保證對象外に成つて了ふ。

處がメーカ保證對象内の儘、シリアル出力を確認する方法を發見した人がゐた。

上記頁の半分より下の處に「シリアルケーブルの製作」と云ふ節が在り、其處でメーカ保證を消滅させずにシリアル出力を確認する方法が解説されてゐる。

亦以下のサイトでは KURO-BOX/PRO を縦置きした儘シリアル出力を確認する方法が解説されてゐる。

世の中には凄い人がゐるもんだ。

Tags: Hardware KURO-BOX/PRO | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] KURO-BOX/PRO (No.28) 2.6.20 カーネルをコンパイルした。

(2007-11-09 2.6.23 カーネルのコンパイル・起動に成功した。)

(2008-02-17 2.6.25-rc1 に於いて shutdown -hP で電源が落とせる樣に成つた)

きのふ2.6.20 カーネルを動かしてゐる人の頁を讀んだので自分でも試してみる事にした。

準備。

開發環境はきのふと同じクロス・コンパイル環境。

カーネル・ソースは NAS-Central(舊 LinkstationWiki) の以下の頁に随つて取得した。

此乃頁では 2.6.22 を取得する方法が書かれてゐるが、今囘は 2.6.20 を取得した。

% svn co https://linkstationwiki.svn.sourceforge.net/svnroot/linkstationwiki/kernel_arm9/trunk/src/linux-2.6.20/
(省略)
A    linux-2.6.20/drivers/buffalo/Makefile
A    linux-2.6.20/drivers/buffalo/kernevnt.c
A    linux-2.6.20/drivers/buffalo/buffalo_miconctl_v2.c
リビジョン 331 をチェックアウトしました。

取得には結構時間が掛かつた。

コンフィグ・ファイルも上の頁の解説に随つて、

% wget --output-document=${WORK}/linux-2.6.20/.config "http://linkstationwiki.svn.sourceforge.net/viewvc/*checkout*/linkstationwiki/kernel_arm9/trunk/configs/linux-2.6.20-config?revision=230"

で取得した。

コンパイル。

最初にクロス・コンパイラを環境變數 PATH に通した。

% export PATH=${WORK}/arm-2007q3/bin:${WORK}/arm-2007q3/libexec/gcc/arm-none-eabi/4.2.1:$PATH

次に make oldconfig を行つた。

$ make oldconfig CROSS_COMPILE=arm-none-eabi-
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/kconfig/conf.o
(省略)
CRC32 functions (CRC32) [Y/m/?] y
CRC32c (Castagnoli, et al) Cyclic Redundancy-Check (LIBCRC32C) [Y/?] y
#
# configuration written to .config
#

其れから CONFIG_LOCALVERSION に次の値を設定した。

CONFIG_LOCALVERSION="-linistationwiki"

次にコンパイルを行つた。

% make uImage CROSS_COMPILE=arm-none-eabi-
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
(省略)
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.20
Created:      Mon Nov  5 22:33:50 2007
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1827876 Bytes = 1785.04 kB = 1.74 MB
Load Address: 0x00008000
Entry Point:  0x00008000
  Image arch/arm/boot/uImage is ready

次にモジュールのコンパイルを行つた。

% make modules CROSS_COMPILE=arm-none-eabi-
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' は更新済みです
  CHK     include/linux/utsrelease.h
  CC [M]  fs/fat/cache.o
(省略)
  CC      net/llc/llc.mod.o
  LD [M]  net/llc/llc.ko
% make modules_install CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=${WORK}/modules
  INSTALL drivers/i2c/i2c-core.ko
  INSTALL drivers/net/tun.ko
(省略)
  INSTALL net/llc/llc.ko
if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map -b /home/pyon/kuro/modules -r 2.6.20; fi

出來たカーネル・イメージとモジュールを KURO-BOX/PRO に持つて行つたが失敗。

追記: (2007-11-06)

先刻の起動時のシリアル出力を診るとパニックを起こしてゐた。

drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "sda2" or unknown-block(2,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
 <0>Rebooting in 5 seconds..Reseting !!

ルート・ファイルシステム(/dev/sda2)をマウントする事が出來無かつた模樣。理由は不明。矢張り既に動く事が判つてゐる TechStrom.org さんをキチンと眞似るべきだつたか。

取敢へず 2.6.20 のカーネル・ソースを取得し直して固めた(後でパッチを當てたりするので)。

% cd ${WORK}
% svn co https://linkstationwiki.svn.sourceforge.net/svnroot/linkstationwiki/kernel_arm9/trunk/src/linux-2.6.20/
% tar jcvf src/linux-2.6.20.arm.tar.bz2 linux-2.6.20
% cd linux-2.6.20
% svn update
リビジョン 331 です。

其れから

で採り上げられてゐるパッチを拾つて來て當てた。

% cd ${WORK}/linux-2.6.20
% patch -p1 < ../marvell_3.6.2.patch
patching file drivers/scsi/Kconfig
Hunk #1 succeeded at 423 (offset 34 lines).
patching file drivers/scsi/Makefile
Hunk #1 succeeded at 67 (offset 4 lines).
patching file drivers/scsi/marvell/Kconfig.marvell
(省略)
patching file drivers/scsi/marvell/mvScsiAtaLayer.h
patching file drivers/scsi/marvell/mvStorageDev.c
patching file drivers/scsi/marvell/mvStorageDev.h
% patch -p1 < ../marvell_0x03.patch
patching file drivers/scsi/marvell/mvSata.c
% patch -p1 < ../marvell_6101.patch
patching file drivers/ide/pci/generic.c
% patch -p1 < ../kernel-2.6.20-mvsata-tsorg.patch
patching file arch/arm/mach-mv88fxx81/LSP/Kconfig
patching file drivers/scsi/marvell/Makefile
patching file drivers/scsi/marvell/mvOs.h
% patch -p1 < ../kernel-2.6.20-kuroboxpro-nand-tsorg.patch
patching file arch/arm/mach-mv88fxx81/Board/boardEnv/DB_88FXX81/mvBoardEnvSpec.h
patching file arch/arm/mach-mv88fxx81/LSP/Kconfig
patching file arch/arm/mach-mv88fxx81/LSP/core.c
patching file arch/arm/mach-mv88fxx81/LSP/nand.c
patching file arch/arm/mach-mv88fxx81/Soc/ahbtombus/mvAhbToMbus.c
patching file arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h
patching file arch/arm/mach-mv88fxx81/osServices/linux/mvOsSLinux.h
patching file drivers/mtd/nand/Makefile

此等のパッチが何を修正してゐるのかは理解してゐ無い。

カーネル・コンフィグも TechStrom.org さんのものを其乃儘使用した。

但し CONFIG_LOCALVERSION は以下の樣に變更した。

CONFIG_LOCALVERSION="-20071106-techstrom"

此で準備が出來たのでコンパイルを開始した。が、其乃前に變更されたファイルを一應調べた。

% cd ${WORK}/linux-2.6.20
% svn status
?      .config
M      arch/arm/mach-mv88fxx81/Soc/ahbtombus/mvAhbToMbus.c
M      arch/arm/mach-mv88fxx81/osServices/linux/mvOsSLinux.h
M      arch/arm/mach-mv88fxx81/Board/boardEnv/DB_88FXX81/mvBoardEnvSpec.h
M      arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h
?      arch/arm/mach-mv88fxx81/LSP/nand.c
M      arch/arm/mach-mv88fxx81/LSP/Kconfig
M      arch/arm/mach-mv88fxx81/LSP/core.c
M      drivers/mtd/nand/Makefile
?      drivers/scsi/Kconfig.orig
?      drivers/scsi/marvell
?      drivers/scsi/Makefile.orig
M      drivers/scsi/Kconfig
M      drivers/scsi/Makefile
M      drivers/ide/pci/generic.c

追加された .config を覗いて 4 ファイル程追加され、10 ファイル變更されてゐた。

此れ以上の深追ひはしたくても(能力・知識的に)出來無いのでコンパイルを開始した。

% cd ${WORK}/linux-2.6.20
% make oldconfig CROSS_COMPILE=arm-none-eabi-
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/kconfig/conf.o
(省略)
CRC32c (Castagnoli, et al) Cyclic Redundancy-Check (LIBCRC32C) [Y/?] y
#
# configuration written to .config
#
% make uImage CROSS_COMPILE=arm-none-eabi-
scripts/kconfig/conf -s arch/arm/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  SYMLINK include/asm-arm/arch -> include/asm-arm/arch-mv88fxx81
(省略)
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready
  UIMAGE  arch/arm/boot/uImage
Image Name:   Linux-2.6.20-20071106-techstrom
Created:      Tue Nov  6 06:08:38 2007
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    1969228 Bytes = 1923.07 kB = 1.88 MB
Load Address: 0x00008000
Entry Point:  0x00008000
  Image arch/arm/boot/uImage is ready
% cp arch/arm/boot/uImage ../dist/uImage.buffalo.2.6.20-20071106-techstrom
% make modules CROSS_COMPILE=arm-none-eabi-
  CHK     include/linux/version.h
make[1]: `include/asm-arm/mach-types.h' は更新済みです
  CHK     include/linux/utsrelease.h
(省略)
  LD [M]  net/appletalk/appletalk.ko
  CC      net/llc/llc.mod.o
  LD [M]  net/llc/llc.ko
% make modules_install CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=${WORK}/dist
  INSTALL drivers/hid/hid.ko
  INSTALL drivers/net/tun.ko
  INSTALL drivers/usb/core/usbcore.ko
(省略)
  INSTALL net/appletalk/appletalk.ko
  INSTALL net/llc/llc.ko
if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map -b ${WORK}/dist -r 2.6.20-20071106-techstrom; fi

此でカーネル・イメージとカーネル・モジュールが出來上がつたので KURO-BOX/PRO に持つて行く爲に固めた。

% cd ${WORK}/dist
% mv lib/modules/2.6.20-20071106-techstrom ./
% rm -fr lib
% tar cvf kernel.tar uImage.buffalo.2.6.20-20071106-techstrom 2.6.20-20071106-techstrom
uImage.buffalo.2.6.20-20071106-techstrom
2.6.20-20071106-techstrom/
2.6.20-20071106-techstrom/modules.seriomap
(省略)
2.6.20-20071106-techstrom/modules.inputmap
2.6.20-20071106-techstrom/modules.usbmap
2.6.20-20071106-techstrom/modules.ccwmap

出來上がつたアーカイブ・ファイルを KURO-BOX/PRO に持つて行つた。(手順省略)

(kuro)# cd /home
(kuro)# tar xvf kernel.tar
uImage.buffalo.2.6.20-20071106-techstrom
2.6.20-20071106-techstrom
2.6.20-20071106-techstrom/modules.seriomap
(省略)
2.6.20-20071106-techstrom/modules.inputmap
2.6.20-20071106-techstrom/modules.usbmap
2.6.20-20071106-techstrom/modules.ccwmap
(kuro)# mount /dev/sda1 /boot
(kuro)# chown root:0 /boot/uImage.buffalo.2.6.20-20071106-techstrom
(kuro)# mv -i uImage.buffalo.2.6.20-20071106-techstrom /boot/
(kuro)# ls /boot
lost+found
uImage.buffalo
uImage.buffalo.2.6.20-20071106-techstrom
uImage.buffalo.orig
(kuro)# chown -R root:0 2.6.20-20071106-techstrom/
chown: 2.6.20-20071106-techstrom/source: No such file or directory
chown: 2.6.20-20071106-techstrom/build: No such file or directory
(kuro)# chown -h root:0 2.6.20-20071106-techstrom/source 2.6.20-20071106-techstrom/build
(kuro)# mv 2.6.20-20071106-techstrom /lib/modules/
(kuro)# ls /lib/modules/
2.6.12.6-arm1              2.6.20-20071106-techstrom

此で準備が出來たので KURO-BOX/PRO を再起動した。

(kuro)# uname -a
Linux KUROBOX-PRO 2.6.20-20071106-techstrom #2 Tue Nov 6 06:11:12 JST 2007 armv5tejl unknown

今度は起動に成功した。

追記: MAC アドレスが違ふ。(2007-11-06)

が MAC アドレスが筐體の其處に書いて有るものと全く異なつてゐた。何で?

の中を覗いてみたら、159 行目附近で

#
# egiga options
#
CONFIG_ETH_0_MACADDR="000000000051"

と成つてゐた。此が原因かと思つたが KURO-BOX/PRO に附屬のカーネル・ソース(linux-2.6.12_lsp.1.10.3.src.tar.gz)の buffalo/config_kurobox.conf の 137 行目も

CONFIG_ETH_0_MACADDR="000000000051"

と成つてゐた。「CONFIG_ETH_0_MACADDR」で檢索してもヒットしたのは全て玄箱關係の頁だけだつた。譯が判ら無く成つて來た。

CONFIG_ETH_0_MACADDR が使用されてゐるソースコードを探すと以下の四つのファイルで使用されてゐた。

% cd ${WORK}/linux-2.6.20
% find ./ -type f | grep -v '.svn' | xargs grep -n CONFIG_ETH_0_MACADDR
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:246:#ifndef CONFIG_ETH_0_MACADDR
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:247:# define CONFIG_ETH_0_MACADDR   "000000000050"
./drivers/net/egiga/mv_e_main.c:438:    if (egiga_qd_load(0, CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ))
./drivers/net/egiga/mv_e_main.c:455:                if( egiga_load( 0, "eth0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./drivers/net/egiga/mv_e_main.c:459:                if( egiga_load( 0, "egiga0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./include/linux/autoconf.h:264:#define CONFIG_ETH_0_MACADDR "000000000051"
./include/config/auto.conf:263:CONFIG_ETH_0_MACADDR="000000000051"

三つのヘッダファイルでは單に CONFIG_ETH_0_MACADDR の價を定義してゐるだけだつた。

mv_e_main.c を讀むと MAC アドレスの値は CONFIG_ETH_0_MACADDR の値を使つて強制的に決定指定してゐる樣に見えた。

因みに KURO-BOX/PRO 附屬 CD-ROM に入つてゐるカーネル・ソース(linux-2.6.12_lsp.1.10.3.src.tar.gz)だと、

% cd ${WORK}/linux-2.6.12_lsp.1.10.3
% find ./ -type f | grep -v '.svn' | xargs grep -n CONFIG_ETH_0_MACADDR
./arch/arm/configs/db88f5181_defconfig:111:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/db88f5182_defconfig:113:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/db88f5281_vfp_defconfig:111:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/orionas_defconfig:112:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/mach-mv88fxx81/LSP/egiga/mv_e_main.c:386:                if( egiga_load( 0, "eth0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./arch/arm/mach-mv88fxx81/LSP/egiga/mv_e_main.c:391:                if( egiga_load( 0, "egiga0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./arch/arm/mach-mv88fxx81/LSP/mv_unimac/mv_eth.c:2574:                  mv_eth_convert_str_to_mac(CONFIG_ETH_0_MACADDR, pNetDev->dev_addr);
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:267:#ifndef CONFIG_ETH_0_MACADDR
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:268:# define CONFIG_ETH_0_MACADDR   "000000000050"

だつた(但し、.config* と buffalo ディレクトリは省いて在る)。

更に因みに LS-GL のカーネル・ソース(linux-2.6.16_lsp.1.7.8.tar.gz)だと、

% cd ${WORK}/linux-2.6.16_lsp.1.7.8
% find ./ -type f | grep -v '.svn' | xargs grep -n CONFIG_ETH_0_MACADDR
./arch/arm/configs/db88f5181_defconfig:102:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/db88f5182_defconfig:103:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/rd_88f5181_voip_defconfig:100:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/configs/rd2_88f5181L_defconfig:103:CONFIG_ETH_0_MACADDR="000000000051"
./arch/arm/mach-mv88fxx81/LSP/egiga/mv_e_main.c:439:    if (egiga_qd_load(0, CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ))
./arch/arm/mach-mv88fxx81/LSP/egiga/mv_e_main.c:456:                if( egiga_load( 0, "eth0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./arch/arm/mach-mv88fxx81/LSP/egiga/mv_e_main.c:460:                if( egiga_load( 0, "egiga0", CONFIG_ETH_0_MACADDR, CONFIG_ETH_0_MTU, ETH_PORT0_IRQ_NUM ) )
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:241:#ifndef CONFIG_ETH_0_MACADDR
./arch/arm/mach-mv88fxx81/mv88f5181/mvSysHwConfig.h:242:# define CONFIG_ETH_0_MACADDR   "000000000050"
./include/config/eth/0/macaddr.h:1:#define CONFIG_ETH_0_MACADDR "000000000051"
./include/linux/autoconf.h:155:#define CONFIG_ETH_0_MACADDR "000000000051"

だつた(但し、此方も .config* と buffalo ディレクトリは省いてある)。

ソースを眺めても良く判ら無かつたので、.config で CONFIG_ETH_0_MACADDR に MAC アドレスの値を設定した。

起動後 /sbin/ifconfig で確認すると其乃値が設定されてゐたが何か釋然とし無い。

追記: 2.6.23 をコンパイル出來た。(2007-11-09)

2.6.23 カーネルをコンパイル・起動出來た

Tags: Hardware KURO-BOX/PRO | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink

[節] 晩御飯。

  • 押麥飯。
  • 滑子の味噌汁。
  • レバニラ炒め。
Tags: None | del.icio.usに追加 | はてなブックマークに追加 | livedoor クリップに追加 | Yahoo! ブックマークに追加 | Google ブックマークに追加 | Permalink
[]

正當なXHTML1.1です! 正當なCSSです! BlogScouter Pyon's Land (MyMiniCity)
© pyon