各位TI的专家,最近小弟在DM6467T上开发,启动内核的过程中总是出现“Sending DHCP requests…..”,并且总是停顿在这个地方,不知道大家有没有遇见过类似的问题,希望有人能帮小弟解决这个问题。具体是这样的:
1.UBL,UBOOT和内核都是从TI的官网上下载的(PSP 03.02和6467T相关的下载)
2.UBL烧写的是1GHZ的那个UBL
3.内核编译之前的make xxx_config,执行的是make davinci_dm646x_1ghz_defconfig
除了停顿于“Sending DHCP requests”,我还发现,内核虽读取了uboot的参数(即bootarg那堆参数),但是没有按照bootarg里面的参数进行IP和MAC的配置,而且我可以确定MAC地址从eeprom里读取了。不知道有没有办法让内核不要从eeprom里面读取MAC地址,有没有直接按照bootarg进行配置的方法?
noaming:
你好,出现这种问题,你可以在uboot的bootarg参数里设置静态IP地址,配合UBOOT环境变量设置:setenv ethaddr setenv ipaddr setenv serverip setenv netmask setenv gatewayip等等。
Shaquille Wu:
回复 noaming:
非常感谢您的回复,目前的情况是这样的:
1.目前的bootargs是这样设定的:console=ttyS0,115200n8 noinitrd rw ip=192.168.1.249:192.168.1.223:192.168.1.1:255.255.255.0:192.168.1.223::off root=/dev/mtdblock3 mem=120M eth=00:51:c2:5b:b4:2b,这个里面已经指定了您提到的那些
2.如果我执行setenv ethaddr 00:51:c2:5b:b4:2b,会提示我Can't overwrite "ethaddr",不知道有没有什么办法能顺利设定?
3.我现在把bootargs改成了bootargs=console=ttyS0,115200n8 noinitrd rw ip=off root=/dev/mtdblock3 mem=120M
eth=00:51:c2:5b:b4:2b,已经不会停顿在“Sending DHCP request",但是最后提示找不到文件系统:
Loading from NAND 128MiB 3,3V 8-bit, offset 0x200000
Image Name: Linux-2.6.32-rc2-davinci1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2087784 Bytes = 2 MB
Load Address: 80008000
Entry Point: 80008000
## Booting kernel from Legacy Image at 80700000 …
Image Name: Linux-2.6.32-rc2-davinci1
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2087784 Bytes = 2 MB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum … OK
Loading Kernel Image … OK
OK
Starting kernel …
Uncompressing Linux…………………………………………………….
……………………………………………………………….. done,
booting the kernel.
Linux version 2.6.32-rc2-davinci1 (root@localhost.localdomain) (gcc version 4.2.
0 (MontaVista 4.2.0-16.0.32.0801914 2008-08-30)) #9 PREEMPT Tue Aug 14 04:09:47
CST 2012
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: DaVinci DM646x EVM
Memory policy: ECC disabled, Data cache writeback
DaVinci dm6467_rev3.x variant 0x1
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 30480
Kernel command line: console=ttyS0,115200n8 noinitrd rw ip=off root=/dev/mtdbloc
k3 mem=120M eth=00:51:c2:5b:b4:2b
PID hash table entries: 512 (order: -1, 2048 bytes)
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 120MB = 120MB total
Memory: 117176KB available (3908K code, 335K data, 144K init, 0K highmem)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
NR_IRQS:245
Console: colour dummy device 80×30
Calibrating delay loop… 246.57 BogoMIPS (lpj=1232896)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
DaVinci: 43 gpio irqs
NET: Registered protocol family 16
MUX: Setting register STSOMUX_DISABLE
PINMUX0 (0x00000000) = 0x00000000 -> 0x00000000
MUX: Setting register STSIMUX_DISABLE
PINMUX0 (0x00000000) = 0x00000000 -> 0x00000000
MUX: Setting register PTSOMUX_DISABLE
PINMUX0 (0x00000000) = 0x00000000 -> 0x00000000
MUX: Setting register PTSIMUX_DISABLE
PINMUX0 (0x00000000) = 0x00000000 -> 0x00000000
MUX: initialized CIR_UART2
MUX: Setting register CIR_UART2
PINMUX1 (0x00000004) = 0x00000000 -> 0x00000020
MUX: initialized ATAEN
MUX: Setting register ATAEN
PINMUX0 (0x00000000) = 0x00000000 -> 0x00000001
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
pcf857x: probe of 1-0038 failed with error -121
vpif vpif: vpif probe success
Switching to clocksource timer0_1
musb_hdrc: version 6.0, pio, peripheral, debug=0
musb_hdrc: USB Peripheral mode controller at fec64000 using PIO, IRQ 13
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
msgmni has been set to 229
io scheduler noop registered
io scheduler anticipatory registered (default)
CIR device registered successfully (Major = 252, Minor =
0)
Serial: 8250/16550 driver, 3 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x1c20000 (irq = 40) is a ST16654
console [ttyS0] enabled
serial8250 serial8250.0: unable to register port at index 1 (IO0 MEM1c20400 IRQ4
1): -22
serial8250 serial8250.0: unable to register port at index 2 (IO0 MEM1c20800 IRQ4
2): -22
brd: module loaded
loop: module loaded
at24 1-0050: 32768 byte 24c256 EEPROM (writable)
Read MAC addr from EEPROM: ff:ff:ff:ff:ff:ff
Uniform Multi-Platform E-IDE driver
ide-gd driver 1.18
ide0: MMIO-DMA
ide0 at 0xfec661f0-0xfec661f7,0xfec663f6 on irq 22
NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bi
t)
Scanning device for bad blocks
Creating 4 MTD partitions on "davinci_nand.0":
0x000000000000-0x000000020000 : "params"
0x000000020000-0x000000160000 : "bootloader"
0x000000160000-0x000000560000 : "kernel"
0x000000560000-0x000008000000 : "filesystem"
davinci_nand davinci_nand.0: controller rev. 2.2
spi_davinci spi_davinci.0: DaVinci SPI driver in EDMA mode
Using RX channel = 17 , TX channel = 16 and event queue = 3
at25 spi0.0: 32 KByte at25640a eeprom, pagesize 64
spi_davinci spi_davinci.0: Controller at 0xfec66800
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
tun: Universal TUN/TAP device driver, 1.6
tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
dm9000 Ethernet Driver, V1.31
console [netcon0] enabled
netconsole: network logging started
Initializing USB Mass Storage driver…
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver usbtest
g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 8a:85:a3:90:51:6d
usb0: HOST MAC b2:b1:e1:2f:c6:40
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready
mice: PS/2 mouse device common for all mice
i2c /dev entries driver
Linux video capture interface: v2.00
ths7303 1-002c: chip found @ 0x58 (DaVinci I2C adapter)
ths7303 1-002c: ths7303 write failed
ths7303: probe of 1-002c failed with error -121
vpif_display vpif_display: Error registering v4l2 subdevice
vpif_display vpif_display: VPIF IRQ request failed
ths7353 1-002e: chip found @ 0x5c (DaVinci I2C adapter)
ths7353 1-002e: ths7353 write failed
ths7353: probe of 1-002e failed with error -121
vpif_capture vpif_capture: Error registering v4l2 subdevice
watchdog watchdog: heartbeat 60 sec
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
Advanced Linux Sound Architecture Driver Version 1.0.21.
No device for DAI tlv320aic3x
asoc: tlv320aic3x <-> davinci-i2s mapping ok
asoc: DIT <-> davinci-dit mapping ok
ALSA device list:
#0: DaVinci DM6467 EVM (tlv320aic3x)
TCP cubic registered
NET: Registered protocol family 17
Clocks: disable unused uart1
Clocks: disable unused emac
Clocks: disable unused timer1
davinci_emac_probe: using random MAC addr: 3e:09:35:91:fc:21
emac-mii: probed
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
end_request: I/O error, dev mtdblock3, sector 2
EXT3-fs: unable to read superblock
end_request: I/O error, dev mtdblock3, sector 0
Buffer I/O error on device mtdblock3, logical block 0
end_request: I/O error, dev mtdblock3, sector 0
Buffer I/O error on device mtdblock3, logical block 0
end_request: I/O error, dev mtdblock3, sector 8
Buffer I/O error on device mtdblock3, logical block 1
end_request: I/O error, dev mtdblock3, sector 8
Buffer I/O error on device mtdblock3, logical block 1
end_request: I/O error, dev mtdblock3, sector 16
Buffer I/O error on device mtdblock3, logical block 2
end_request: I/O error, dev mtdblock3, sector 16
Buffer I/O error on device mtdblock3, logical block 2
end_request: I/O error, dev mtdblock3, sector 24
Buffer I/O error on device mtdblock3, logical block 3
end_request: I/O error, dev mtdblock3, sector 24
Buffer I/O error on device mtdblock3, logical block 3
end_request: I/O error, dev mtdblock3, sector 0
FAT: unable to read boot sector
FAT: unable to read boot sector
Please append a correct "root=" boot option; here are the available partitions:
1f00 128 mtdblock0 (driver?)
1f01 1280 mtdblock1 (driver?)
1f02 4096 mtdblock2 (driver?)
1f03 125568 mtdblock3 (driver?)
Kernel panic – not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
Backtrace:
[<c00306d0>] (dump_backtrace+0x0/0x110) from [<c0030814>] (dump_stack+0x18/0x1c)
r6:c0026808 r5:c601301c r4:c04268d0
[<c00307fc>] (dump_stack+0x0/0x1c) from [<c0042134>] (panic+0x54/0x124)
[<c00420e0>] (panic+0x0/0x124) from [<c0008fc4>] (mount_block_root+0x1d4/0x214)
r3:00000001 r2:c6024000 r1:c6025f58 r0:c0399584
[<c0008df0>] (mount_block_root+0x0/0x214) from [<c00090c8>] (mount_root+0xc4/0xf
c)
[<c0009004>] (mount_root+0x0/0xfc) from [<c0009268>] (prepare_namespace+0x168/0x
1c0)
r5:c0026808 r4:c04263c0
[<c0009100>] (prepare_namespace+0x0/0x1c0) from [<c00087c8>] (kernel_init+0xdc/0
x110)
r5:c0025ad4 r4:c0426180
[<c00086ec>] (kernel_init+0x0/0x110) from [<c0045210>] (do_exit+0x0/0x654)
r5:00000000 r4:00000000
这部分提示信息有两个问题:
1)注意红字部分,内核没有从EEPROM里面读到MAC
2)最后为什么会提示找不到文件系统?
noaming:
回复 Shaquille Wu:
你好,内核从EEPROM里面读到MAC地址是
Read MAC addr from EEPROM: ff:ff:ff:ff:ff:ff
你可以检查一下手册,是否将MAC地址放在指定的EEPROM地址了。
第二个问题,挂在不上NAND文件系统,请重新做一下NAND里的文件系统,试试看。
Shaquille Wu:
回复 noaming:
问题是执行setenv ethaddr的时候为什么提示Can't over write呢?
noaming:
回复 Shaquille Wu:
你好,UBOOT mac一般只可以更改一次,所以现在改不了,你可以看一下UBOOT的源码,是否可重复更改取决于系统配置
u-boot-1.0.0\include\configs\at91rm9200dk.h
/* #define CONFIG_ENV_OVERWRITE 1 */
u-boot-1.0.0\common\cmd_nvedit.c
#ifndef CONFIG_ENV_OVERWRITE
/*
* Ethernet Address and serial# can be set only once,
* ver is readonly.
*/
if ( (strcmp (name, "serial#") == 0) ||
((strcmp (name, "ethaddr") == 0)
#if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
&& (strcmp (env_get_addr(oldval),MK_STR
(CONFIG_ETHADDR)) != 0)
#endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
) ) {
printf ("Can't overwrite \"%s\"\n", name);
return 1;
}
#endif
没有定义CONFIG_ENV_OVERWRITE ,所以不能更改
Shaquille Wu:
回复 noaming:
谢谢您的快速回复
1.关于这个问题,最优的方法肯定是做关于EEPROM的文章,但是这个EEPROM指的是网卡(或者说PHY芯片)上EEPROM,还是DM6467T上的EEPROM?望不吝赐教。
2.如果EEPROM的文章作不了,能不能有其他方法?比如通过bootargs,让内核去读bootargs里面的mac,如果有这样的方法那应该怎么改呢?都要改哪些呢?bootargs又应该怎么写?
3.以前在DM6467上做,内核都是通过bootargs来读取IP和MAC的,也就是我之前写的那段bootargs(console=ttyS0,115200n8 noinitrd rw ip=192.168.1.249:192.168.1.223:192.168.1.1:255.255.255.0:192.168.1.223::off root=/dev/mtdblock3 mem=120M eth=00:51:c2:5b:b4:2b),而且一切都是正常的,现在DM6467T的内核为什么非要通过EEPROM来读MAC呢?
Shaquille Wu:
回复 Shaquille Wu:
有人能回答么?小弟先谢了