以前、
MPC8349E-mITXに u-boot-2008.10-rc2 をインストール
Linuxの最近のバージョンは付属のu-bootではうまく起動できなかったので、u-boot 2008.10-rc2のインストールを行いました。
のエントリでインストールしたU-Bootですが、dateコマンドで時刻が表示されない、またdateコマンドで時刻を設定しようとしてもできないという問題がありましたの調べてみました。
- OS(ホスト): Linux/i386 (Ubuntu Hardy)
- Target: MPC8349E-mITX
- U-Boot: u-boot-2008.10-rc2
結論からいうと、include/configs/MPC8349ITX.hに以下を追加するとU-Bootのdateコマンドがただしく表示されるようになりました。
#define CFG_RTC_BUS_NUM 1
dateコマンドはI2C busでRTCから値を読み取っているようなのですが、I2Cバスがデフォルトでは0に設定されていました。
MPC8349E-mITXではこれが1なので上記設定が必要なようです。include/configs/MPC8349ITX.hの先頭のあたりにI2Cのバスやアドレスの詳細が記載されています。
I2C address list:
Align. Board
Bus Addr Part No. Description Length Location
----------------------------------------------------------------
I2C0 0x50 M24256-BWMN6P Board EEPROM 2 U64
I2C1 0x20 PCF8574 I2C Expander 0 U8
I2C1 0x21 PCF8574 I2C Expander 0 U10
I2C1 0x38 PCF8574A I2C Expander 0 U8
I2C1 0x39 PCF8574A I2C Expander 0 U10
I2C1 0x51 (DDR) DDR EEPROM 1 U1
I2C1 0x68 DS1339 RTC 1 U68
現時点でのu-boot-2008.10-rc2への差分は以下です。
--- u-boot-2008.10-rc2/Makefile 2008-09-14 07:59:35.000000000 +0900
+++ u-boot-2008.10-rc2/Makefile 2008-09-26 16:46:43.000000000 +0900
@@ -142,7 +142,7 @@
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
-CROSS_COMPILE = ppc_8xx-
+CROSS_COMPILE = powerpc-linux-gnu-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
--- u-boot-2008.10-rc2/include/configs/MPC8349ITX.h 2008-09-14 07:59:35.000000000 +0900
+++ u-boot-2008.10-rc2+/include/configs/MPC8349ITX.h 2008-09-26 16:47:49.000000000 +0900
@@ -98,6 +98,7 @@
#define CFG_I2C_OFFSET 0x3000
#define CFG_I2C2_OFFSET 0x3100
#define CFG_SPD_BUS_NUM 1 /* The I2C bus for SPD */
+#define CFG_RTC_BUS_NUM 1 /* The I2C bus for RTC */
#define CFG_I2C_8574_ADDR1 0x20 /* I2C1, PCF8574 */
#define CFG_I2C_8574_ADDR2 0x21 /* I2C1, PCF8574 */
@@ -158,6 +159,8 @@
#define CFG_DDR_SDRAM_CLK_CNTL (DDR_SDRAM_CLK_CNTL_SS_EN | \
DDR_SDRAM_CLK_CNTL_CLK_ADJUST_075)
+#define CONFIG_VERY_BIG_RAM
+
#ifdef CONFIG_HARD_I2C
#define CONFIG_SPD_EEPROM /* use SPD EEPROM for DDR setup*/
#endif
コンパイル方法は以前と同様です。
$ make MPC8349ITX_config
Configuring for MPC8349ITX board...
$ make
.
.
.
powerpc-linux-gnu-objcopy -O srec u-boot u-boot.srec
powerpc-linux-gnu-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
これで無事にdateコマンドが使えます。
U-Boot 2008.10-rc2 (Oct 6 2008 - 19:11:40) MPC83XX
Reset Status: Software Hard, External/Internal Soft, External/Internal Hard
CPU: e300c1, MPC8349EA, Rev: 3.0 at 533.333 MHz, CSB: 266.666 MHz
Board: Freescale MPC8349E-mITX
UPMA: Configured for compact flash
I2C: ready
DRAM: 1 GB (DDR1, 64-bit, ECC off, 266.666 MHz)
FLASH: 16 MB
PCI: Bus Dev VenId DevId Class Int
00 10 1095 3114 0180 00
In: serial
Out: serial
Err: serial
Board revision: 0.0 (PCF8475A)
Net: TSEC0, TSEC1
IDE: Bus 0: .** Timeout **
MPC8349E-mITX> date
Date: 2008-10-06 (Monday) Time: 23:55:59
以下は調査時のメモです。
u-bootでデバッグメッセージ(debug()で表示される)を有効にするには、
config.mkで
DBGFLAGS= -g -DDEBUG
とし、コンパイルしなおす。
dateコマンドの実行フロー
common/cmd_date.c:do_date()
drivers/rtc/ds1337.c:rtc_get()
drivers/i2c/fsl_i2c.c:i2c_reg_read()
drivers/i2c/fsl_i2c.c:i2c_read()
drivers/i2c/fsl_i2c.c:__i2c_read()