|
在linux2.6.34 中原来没有加触摸屏驱动在linux2.6.34 中原来没有加触摸屏驱动,
想用linux2.3.34 内核自带的触摸驱动(在目录/driver/input/s3c2440_ts.c),
通过注册总线设备添加到平台总线驱动
首先在arch/arm/mach-2440/mach-smdk2440.c中 :
在 static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&smdk2440_device_eth,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_ts, //添加语句
};
中添加一行 &s3c_device_ts, 把内核带的触摸屏加入平台设备。
然后在同文件中添加:
static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
.delay = 10000,
.presc = 49,
.oversampling_shift = 2,
};
在头文件里添加#include <mach/ts.h>
最后在同文件中smdk2440_machine_init添加:
static void __init smdk2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&smdk2440_fb_info);
s3c_i2c0_set_platdata(NULL);
s3c24xx_ts_set_platdata(&s3c_ts_platform); //添加语句
platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
smdk_machine_init();
}
编译通过了 ,可启动后内核出错:
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
------------[ cut here ]------------
WARNING: at lib/kref.c:44 kref_get+0x1c/0x40()
Modules linked in:
[<c002f7a8>] (unwind_backtrace+0x0/0xf0) from [<c003d0dc>] (warn_slowpath_common
+0x44/0x5c)
[<c003d0dc>] (warn_slowpath_common+0x44/0x5c) from [<c0179ce8>] (kref_get+0x1c/0
x40)
[<c0179ce8>] (kref_get+0x1c/0x40) from [<c0179028>] (kobject_get+0x10/0x18)
[<c0179028>] (kobject_get+0x10/0x18) from [<c01ba39c>] (get_device+0x14/0x1c)
[<c01ba39c>] (get_device+0x14/0x1c) from [<c01bb264>] (device_add+0x68/0x478)
[<c01bb264>] (device_add+0x68/0x478) from [<c01be7d4>] (platform_device_add+0xf0
/0x148)
[<c01be7d4>] (platform_device_add+0xf0/0x148) from [<c01beaf4>] (platform_add_de
vices+0x1c/0x60)
[<c01beaf4>] (platform_add_devices+0x1c/0x60) from [<c000d7f4>] (smdk2440_machin
e_init+0x2c/0x38)
[<c000d7f4>] (smdk2440_machine_init+0x2c/0x38) from [<c000b390>] (customize_mach
ine+0x18/0x24)
[<c000b390>] (customize_machine+0x18/0x24) from [<c0029384>] (do_one_initcall+0x
5c/0x1bc)
[<c0029384>] (do_one_initcall+0x5c/0x1bc) from [<c00083fc>] (kernel_init+0xa0/0x
14c)
[<c00083fc>] (kernel_init+0xa0/0x14c) from [<c002ae48>] (kernel_thread_exit+0x0/
0x8)
---[ end trace 1b75b31a2719ed1c ]---
Unable to handle kernel NULL pointer dereference at virtual address 00000018
pgd = c0004000
[00000018] *pgd=00000000
Internal error: Oops: 5 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Tainted: G W (2.6.34.12 #28)
PC is at sysfs_find_dirent+0x8/0x38
LR is at __sysfs_add_one+0x18/0xac
pc : [<c00d9500>] lr : [<c00d9860>] psr: 60000013
sp : c3c23e98 ip : 00000002 fp : 00000000
r10: 00000000 r9 : 00000000 r8 : 00000000
r7 : c3c23ed8 r6 : c3c40480 r5 : c3c51860 r4 : 00000000
r3 : 00000001 r2 : 00000000 r1 : c3c51860 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: c000717f Table: 30004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc3c22270)
Stack: (0xc3c23e98 to 0xc3c24000)
3e80: 00000000 c3c23ed8
3ea0: c3c40480 c00d9860 c3c23ed8 c3c40480 00000000 c03d9088 c3c40480 c00d9944
3ec0: 00000000 c03d9088 c3c23efc c3c40480 00000000 c00da2a0 00000000 00000000
3ee0: c03d9088 c03d9088 c03d9600 00000000 00000000 c00da324 c03d9088 c03d908c
3f00: c03d9080 c0179144 c03d9080 c03d9088 c03d95f8 00000000 00000000 c01793c0
3f20: c03d9088 c3c23f34 00000000 c01bb290 00000000 00000000 c03d9088 00000000
3f40: 00000021 c01792ec c03d9078 00000006 00000000 c03d9078 00000002 00000038
3f60: 00000007 00000000 00000000 00000000 00000000 c01be7d4 c0025080 00000006
3f80: 00000000 00000007 00000000 c01beaf4 c0025044 c0022f88 00000000 00000000
3fa0: 00000000 c000d7f4 c000b378 c000b390 c000b378 c0029384 c000b378 c3c396b8
3fc0: c03fd1c0 c03fd1c0 c0022b7c c0022f88 00000000 00000000 00000000 00000000
3fe0: 00000000 c00083fc 00000000 00000000 00000000 c002ae48 fbdefbfe cafe9bf7
[<c00d9500>] (sysfs_find_dirent+0x8/0x38) from [<c00d9860>] (__sysfs_add_one+0x1
8/0xac)
[<c00d9860>] (__sysfs_add_one+0x18/0xac) from [<c00d9944>] (sysfs_add_one+0x10/0
x8c)
[<c00d9944>] (sysfs_add_one+0x10/0x8c) from [<c00da2a0>] (create_dir+0x48/0x98)
[<c00da2a0>] (create_dir+0x48/0x98) from [<c00da324>] (sysfs_create_dir+0x34/0x4
c)
[<c00da324>] (sysfs_create_dir+0x34/0x4c) from [<c0179144>] (kobject_add_interna
l+0xb8/0x1bc)
[<c0179144>] (kobject_add_internal+0xb8/0x1bc) from [<c01793c0>] (kobject_add+0x
4c/0x5c)
[<c01793c0>] (kobject_add+0x4c/0x5c) from [<c01bb290>] (device_add+0x94/0x478)
[<c01bb290>] (device_add+0x94/0x478) from [<c01be7d4>] (platform_device_add+0xf0
/0x148)
[<c01be7d4>] (platform_device_add+0xf0/0x148) from [<c01beaf4>] (platform_add_de
vices+0x1c/0x60)
[<c01beaf4>] (platform_add_devices+0x1c/0x60) from [<c000d7f4>] (smdk2440_machin
e_init+0x2c/0x38)
[<c000d7f4>] (smdk2440_machine_init+0x2c/0x38) from [<c000b390>] (customize_mach
ine+0x18/0x24)
[<c000b390>] (customize_machine+0x18/0x24) from [<c0029384>] (do_one_initcall+0x
5c/0x1bc)
[<c0029384>] (do_one_initcall+0x5c/0x1bc) from [<c00083fc>] (kernel_init+0xa0/0x
14c)
[<c00083fc>] (kernel_init+0xa0/0x14c) from [<c002ae48>] (kernel_thread_exit+0x0/
0x8)
Code: e3a00000 e12fff1e e92d4070 e1a05001 (e5904018)
---[ end trace 1b75b31a2719ed1d ]---
Kernel panic - not syncing: Attempted to kill init!
[<c002f7a8>] (unwind_backtrace+0x0/0xf0) from [<c02e19f8>] (panic+0x40/0xc8)
[<c02e19f8>] (panic+0x40/0xc8) from [<c00400c4>] (do_exit+0x64/0x5c8)
[<c00400c4>] (do_exit+0x64/0x5c8) from [<c002d9f0>] (die+0x1b4/0x1e0)
[<c002d9f0>] (die+0x1b4/0x1e0) from [<c0030394>] (__do_kernel_fault+0x64/0x84)
[<c0030394>] (__do_kernel_fault+0x64/0x84) from [<c0030564>] (do_page_fault+0x1b
0/0x1c4)
[<c0030564>] (do_page_fault+0x1b0/0x1c4) from [<c00292c4>] (do_DataAbort+0x34/0x
94)
[<c00292c4>] (do_DataAbort+0x34/0x94) from [<c0029a00>] (__dabt_svc+0x40/0x60)
Exception stack(0xc3c23e50 to 0xc3c23e98)
3e40: 00000000 c3c51860 00000000 00000001
3e60: 00000000 c3c51860 c3c40480 c3c23ed8 00000000 00000000 00000000 00000000
3e80: 00000002 c3c23e98 c00d9860 c00d9500 60000013 ffffffff
[<c0029a00>] (__dabt_svc+0x40/0x60) from [<c00d9500>] (sysfs_find_dirent+0x8/0x3
8)
[<c00d9500>] (sysfs_find_dirent+0x8/0x38) from [<c00d9860>] (__sysfs_add_one+0x1
8/0xac)
[<c00d9860>] (__sysfs_add_one+0x18/0xac) from [<c00d9944>] (sysfs_add_one+0x10/0
。。。。。。。。。。。。。。。。。。。。。。。。。,
想用linux2.3.34 内核自带的触摸驱动(在目录/driver/input/s3c2440_ts.c),
通过注册总线设备添加到平台总线驱动
首先在arch/arm/mach-2440/mach-smdk2440.c中 :
在 static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_ohci,
&smdk2440_device_eth,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_ts, //添加语句
};
中添加一行 &s3c_device_ts, 把内核带的触摸屏加入平台设备。
然后在同文件中添加:
static struct s3c2410_ts_mach_info s3c_ts_platform __initdata = {
.delay = 10000,
.presc = 49,
.oversampling_shift = 2,
};
在头文件里添加#include <mach/ts.h>
最后在同文件中smdk2440_machine_init添加:
static void __init smdk2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&smdk2440_fb_info);
s3c_i2c0_set_platdata(NULL);
s3c24xx_ts_set_platdata(&s3c_ts_platform); //添加语句
platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
smdk_machine_init();
}
编译通过了 ,可启动后内核出错:
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
------------[ cut here ]------------
WARNING: at lib/kref.c:44 kref_get+0x1c/0x40()
Modules linked in:
[<c002f7a8>] (unwind_backtrace+0x0/0xf0) from [<c003d0dc>] (warn_slowpath_common
+0x44/0x5c)
[<c003d0dc>] (warn_slowpath_common+0x44/0x5c) from [<c0179ce8>] (kref_get+0x1c/0
x40)
[<c0179ce8>] (kref_get+0x1c/0x40) from [<c0179028>] (kobject_get+0x10/0x18)
[<c0179028>] (kobject_get+0x10/0x18) from [<c01ba39c>] (get_device+0x14/0x1c)
[<c01ba39c>] (get_device+0x14/0x1c) from [<c01bb264>] (device_add+0x68/0x478)
[<c01bb264>] (device_add+0x68/0x478) from [<c01be7d4>] (platform_device_add+0xf0
/0x148)
[<c01be7d4>] (platform_device_add+0xf0/0x148) from [<c01beaf4>] (platform_add_de
vices+0x1c/0x60)
[<c01beaf4>] (platform_add_devices+0x1c/0x60) from [<c000d7f4>] (smdk2440_machin
e_init+0x2c/0x38)
[<c000d7f4>] (smdk2440_machine_init+0x2c/0x38) from [<c000b390>] (customize_mach
ine+0x18/0x24)
[<c000b390>] (customize_machine+0x18/0x24) from [<c0029384>] (do_one_initcall+0x
5c/0x1bc)
[<c0029384>] (do_one_initcall+0x5c/0x1bc) from [<c00083fc>] (kernel_init+0xa0/0x
14c)
[<c00083fc>] (kernel_init+0xa0/0x14c) from [<c002ae48>] (kernel_thread_exit+0x0/
0x8)
---[ end trace 1b75b31a2719ed1c ]---
Unable to handle kernel NULL pointer dereference at virtual address 00000018
pgd = c0004000
[00000018] *pgd=00000000
Internal error: Oops: 5 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Tainted: G W (2.6.34.12 #28)
PC is at sysfs_find_dirent+0x8/0x38
LR is at __sysfs_add_one+0x18/0xac
pc : [<c00d9500>] lr : [<c00d9860>] psr: 60000013
sp : c3c23e98 ip : 00000002 fp : 00000000
r10: 00000000 r9 : 00000000 r8 : 00000000
r7 : c3c23ed8 r6 : c3c40480 r5 : c3c51860 r4 : 00000000
r3 : 00000001 r2 : 00000000 r1 : c3c51860 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: c000717f Table: 30004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc3c22270)
Stack: (0xc3c23e98 to 0xc3c24000)
。。。。。。。。。。。。。。。。。。。。。。。。。 |
|