LCD的驱动问题(请达人帮忙看看)
问题描叙:
写了一个LCD帧缓冲驱动,在linux2.6.22下能正常运行,换到2.6.38下出现如下问题:
1.创建的设备文件为块设备,不能打开(后来我换了一个支持udev的文件系统,已解决此问题)
2.创建的设备文件一打开就出现段错误:(这个是在do_sys_open中出错,反汇编都找不到。。。)
PC is at do_sys_open+0x78/0xec
LR is at do_filp_open+0x4c0/0x500
pc : [<c01a73cc>] lr : [<c01b3e28>] psr: 00000013
sp : c3ac5f80 ip : c054404c fp : beafdd74
r10: c3ab5000 r9 : 00000000 r8 : 00000003
r7 : 0000000d r6 : ffffff9c r5 : beafdecc r4 : 00000000
r3 : 00000002 r2 : 00000001 r1 : 20000013 r0 : 0000000d
Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 0000717f Table: 33afc000 DAC: 00000015
Process lcd1 (pid: 1464, stack limit = 0xc3ac4270)
Stack: (0xc3ac5f80 to 0xc3ac6000)
5f80: 00000000 0004003c 40115db0 00000000 00000000 00000005 c013ace8 c3ac4000
5fa0: 00000000 c013ab40 40115db0 00000000 00008494 00000000 beafdecc 00008394
5fc0: 40115db0 00000000 00000000 00000005 00000000 00000000 40116000 beafdd74
5fe0: 00000000 beafdd58 000083b0 40236cdc 60000010 00008494 00000000 00000000
[<c01a73cc>] (do_sys_open+0x78/0xec) from [<c013ab40>] (ret_fast_syscall+0x0/0x2c)
Code: e1a00008 ebffff8c e1a08007 ea000014 (e590100c)
---[ end trace aff6484c07d145f2 ]---
Segmentation fault
LCD驱动,大概步骤如下:
/*1.构建一个fb_info结构体,代表一个帧缓冲设备*/
fs2410lcd_fbinfo = framebuffer_alloc(sizeof(struct s3c2410fb_info), &pdev->dev);
/*2.使能时钟*/
/*3.设置fb_info*/
/*3.1.设置帧缓冲设备的固定参数*/
/*3.2.设置帧缓冲设备的可变参数*/
/*3.3设置帧缓冲设备的位域*/
/*3.4设置操作方法*/
fs2410lcd_fbinfo->fbops = &fs2410_lcd_fops;
/*4.分配显存*/
map_size = PAGE_ALIGN(fs2410lcd_fbinfo->fix.smem_len+PAGE_SIZE);
fs2410lcd_fbinfo->screen_base = dma_alloc_writecombine(&(pdev->dev),map_size,&fs2410lcd_fbinfo->fix.smem_start,GFP_KERNEL);
/*5.初始化控制器*/
/*5.1设置LCD管脚*/
/*5.2设置lcdcon1-lcdcon5*/
/*5.3获取内存资源*/
/*5.4配置addr1-addr3*/
/*5.5开启LCD*/
/*6.注册帧缓冲设备*/
fs2410lcd_fbinfo->dev = &(pdev->dev);
register_framebuffer(fs2410lcd_fbinfo);