LCD的驱动问题(请达人帮忙看看)

tea1896 2012-11-11 08:40:05
问题描叙:
写了一个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);

...全文
342 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hermitbin 2012-11-23
  • 打赏
  • 举报
回复
你不会是直接拿到38内核里去用吧,38内核相对于22内核变动很大的,里面很多结构体完全不同了,需要移植的
falloutmx 2012-11-13
  • 打赏
  • 举报
回复
很有可能跟驱动无关,你把驱动内容慢慢去掉,确定下是哪的问题
daviddb7 2012-11-13
  • 打赏
  • 举报
回复
PC is at do_sys_open+0x78/0xec 如果看不到do_sys_open,那就往上找,看上面给do_sys_open传了哪些参数,应该是其中某个参数是空指针或者野指针吧。
盘股之 2012-11-12
  • 打赏
  • 举报
回复
既然PC都到do_sys_open这儿了,那反汇编肯定能找到出错的地方。
nadleeh 2012-11-12
  • 打赏
  • 举报
回复
驱动对版本要求是很严的。。换到符合的版本用源码重编
盘股之 2012-11-12
  • 打赏
  • 举报
回复
PC is at do_sys_open+0x78/0xec 0x78处调用什么了?

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧