(我昨天搞错了,目前状态是对的,已经对spi2进行了注册,我又在这个基础上进行了进一步的修改,目的是为了实现2个spi设备的连接,修改如下:) 主要是对arch/arm/mach-s3c2410/mach-smdk2410.c文件进行一定的修改,部分代码如下(我认为是必须修改的部分,这里我也参照了本站中的SPI驱动的移植(Linux2.6.24)的文章):
static struct platform_device *smdk2410_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c,
&s3c_device_iis,
&s3c_device_spi0,
&s3c_device_spi1, };
.......
static struct spi_board_info spi0[]={
[0]={
.modalias ="mcp2515",//设备驱动文件名
.irq=IRQ_EINT9,
.max_speed_hz=1*1000*1000,
.bus_num=0,
.chip_select=0,
},
[0]={
.modalias ="mcp2515",
.irq=IRQ_EINT16,
.max_speed_hz=1*1000*1000,
.bus_num=1,
.chip_select=0,
},
};
..........
static struct s3c2410_spi_info s3c_spi0_info={
.pin_cs =S3C2410_GPG2,
.board_size=ARRAY_SIZE(spi0),
.board_info=spi0,
};
static struct s3c2410_spi_info s3c_spi1_info={
.pin_cs =S3C2410_GPG3,
.board_size=ARRAY_SIZE(spi0),//这里我感觉是有问题,但又不知道怎么改,请朋友们帮忙看看,我感觉这里的board_size应该是sip0数组一个成员的大小,但是我用sizeof(spi0[0])还是不行,
.board_info=spi0,
}; static void __init smdk2410_init(void)
{
..............................
s3c_device_spi0.dev.platform_data= &s3c_spi0_info;
s3c_device_spi1.dev.platform_data= &s3c_spi1_info; platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
smdk_machine_init();
}
出现的问题是可以编译通过,并可以在文件系统中通过ls -al命令在/sys/bus/platform/devices目录下得到如下信息:
drwxr-xr-x 2 0 0 0 Jan 1 00:01 .
drwxr-xr-x 4 0 0 0 Jan 1 00:01 ..
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 dm9000.0 -> ../../../dev
ices/platform/dm9000.0
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-i2c -> ../../../
devices/platform/s3c2410-i2c
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-iis -> ../../../
devices/platform/s3c2410-iis
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-lcd -> ../../../
devices/platform/s3c2410-lcd
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-nand -> ../../..
/devices/platform/s3c2410-nand
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-ohci -> ../../..
/devices/platform/s3c2410-ohci
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-spi.0 -> ../../.
./devices/platform/s3c2410-spi.0
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-spi.1 -> ../../.
./devices/platform/s3c2410-spi.1
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-uart.0 -> ../../ ../devices/platform/s3c2410-uart.0
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-uart.1 -> ../../
../devices/platform/s3c2410-uart.1
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-uart.2 -> ../../
../devices/platform/s3c2410-uart.2
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c2410-wdt -> ../../../
devices/platform/s3c2410-wdt
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c24xx_led.0 -> ../../.
./devices/platform/s3c24xx_led.0
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c24xx_led.1 -> ../../.
./devices/platform/s3c24xx_led.1
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c24xx_led.2 -> ../../.
./devices/platform/s3c24xx_led.2
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 s3c24xx_led.3 -> ../../.
./devices/platform/s3c24xx_led.3
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 serial8250 -> ../../../d
evices/platform/serial8250
lrwxrwxrwx 1 0 0 0 Jan 1 00:01 zlg7290 -> ../../../devi
ces/platform/zlg7290
但启动后出现如下错误信息:
s3c2410-spi s3c2410-spi.0: registering mcp2515
kobject_add failed for spi0 with -EEXIST, don't try to register things with the
same name in the same directory.
[<c002ddac>] (dump_stack+0x0/0x14) from [<c0192c60>] (kobject_shadow_add+0x190/0
x1ac)
[<c0192ad0>] (kobject_shadow_add+0x0/0x1ac) from [<c0192c90>] (kobject_add+0x14/
0x18)
r7:00000000 r6:c037f150 r5:c07e4e00 r4:c07e4ea0
[<c0192c7c>] (kobject_add+0x0/0x18) from [<c01d7624>] (class_device_add+0x84/0x4
1c)
[<c01d75a0>] (class_device_add+0x0/0x41c) from [<c021b140>] (spi_register_master
+0x6c/0x140)
[<c021b0d4>] (spi_register_master+0x0/0x140) from [<c021bc80>] (spi_bitbang_star
t+0x100/0x134)
[<c021bb80>] (spi_bitbang_start+0x0/0x134) from [<c021c27c>] (s3c24xx_spi_probe+
0x2ac/0x3c0)
r5:c07e4ea0 r4:c037f2ac
[<c021bfd0>] (s3c24xx_spi_probe+0x0/0x3c0) from [<c01d83fc>] (platform_drv_probe
+0x20/0x24)
[<c01d83dc>] (platform_drv_probe+0x0/0x24) from [<c01d64bc>] (driver_probe_devic
e+0xe8/0x18c)
[<c01d63d4>] (driver_probe_device+0x0/0x18c) from [<c01d669c>] (__driver_attach+
0x80/0xe0)
r8:00000000 r7:c03a9cf8 r6:c01d661c r5:c037f158 r4:c037f230
[<c01d661c>] (__driver_attach+0x0/0xe0) from [<c01d54bc>] (bus_for_each_dev+0x50
/0x84)
r5:c048deec r4:00000000
[<c01d546c>] (bus_for_each_dev+0x0/0x84) from [<c01d671c>] (driver_attach+0x20/0
x28)
r7:c03a6b28 r6:c03a9d00 r5:c03a9cf8 r4:00000000
[<c01d66fc>] (driver_attach+0x0/0x28) from [<c01d5c8c>] (bus_add_driver+0x7c/0x1
b4)
[<c01d5c10>] (bus_add_driver+0x0/0x1b4) from [<c01d6b98>] (driver_register+0x80/
0x88)
[<c01d6b18>] (driver_register+0x0/0x88) from [<c01d8510>] (platform_driver_regis
ter+0x6c/0x88)
r4:00000000
[<c01d84a4>] (platform_driver_register+0x0/0x88) from [<c001ceb4>] (s3c24xx_spi_
init+0x14/0x1c)
[<c001cea0>] (s3c24xx_spi_init+0x0/0x1c) from [<c0008c14>] (kernel_init+0xd4/0x2
8c)
[<c0008b40>] (kernel_init+0x0/0x28c) from [<c0047a98>] (do_exit+0x0/0x760)
s3c2410-spi s3c2410-spi.1: Failed to register SPI master
s3c2410-spi: probe of s3c2410-spi.1 failed with error -17
这是什么原因,没搞清楚!请朋友们帮忙看看!
[ 此帖被feiyangczm在2009-11-03 11:05重新编辑 ]