Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41869
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-30 10:34
文章分类
文章存档

2014年(42)

我的朋友

分类: LINUX

2014-11-19 19:07:56

文章写于 2011-05-02 11:36:35
 
    新版内核移植的过程真是艰难,历时4个月,曾多次想过放弃。如果我都使用以前做好的东西,我的板在去年12月份就能开始卖了,也没必要等到现在。现在发现我以前做的那些东西真是低级,当时才疏学浅,也只知道照搬别人的东西。

    在现在的公司做了半年的驱动,对驱动也有了一个新的认识,我一直看高通的android代码,觉得高通的驱动做的挺专业的,就算一个LED的驱动也要写个几百行。我准备尝试用新版的内核,将内核中所有能用的驱动都用在XC2440上。

    这次使用2.6.37.4的内核,2011314日发布,内核中已经集成了三星S3C平台几乎全部的驱动,我们无需再手动编写驱动了,我的主要工作就是完成了mach-xc2440.c



 
驱动列表: 

Nand

支持512B/2K页面nandflash

LCD

支持16bit/24bit数据格式,支持3.5/4.3/7寸等多种尺寸的TFT LCD

Uart

支持3uart驱动

Ethernet

DM9000X驱动/smsc911x驱动

Audio

IIS总线uda134x驱动

Sd/mmc

支持SD/TF 支持最大容量32G

Usb host

USB1.1协议,支持U盘,USB鼠标键盘等设备,可外接USB HUB

USB Device

支持usb gadget可将开发板当做U盘使用,可以和PC机连接传输数据

Rtc

s3c平台通用的RTC驱动

Watchdog

s3c平台通用的看门狗驱动

Led

通用的led-gpio驱动

Key

通用的key-gpio驱动,input设备

Beep

pwm控制蜂鸣器驱动,input设备

Hwmon

s3c平台通用adc驱动,最多支持8个通道

Touchpanel

s3c平台通用触摸屏驱动,input设备

Lcd backlight

pwm控制LCD背光亮度驱动

Camera

使用三星camif接口和v4l架构,可驱动多种型号的camera,使用v4l API可方便编写上层应用程序

AT24CXX

基于IIC总线的EEPROM驱动

MCP251X

基于SPI总线的CAN总线器件驱动

IRM

红外摇控器驱动,NEC编码格式,input设备,可做键盘用


1月份的时候开始移植2.6.36内核,开始比较顺利,后来麻烦就开始多了。

首先是YAFFS2文件系统,内核里代码结构有改动,以前的yaffs2源码需要改,改完后就挂不上,然后就到处找新版的yaffs2源码,一个一个的试,最终有一个可以用了。

然后是触摸屏,使用以前的tslib打开触摸屏设备的时候失败,这个问题不大,跟踪一下tslib代码,发现内核input驱动的ID号和tslib中定义的不匹配,导致了open tsdev的时候返回了,改一下ID号使之一致就可了。(有个卖开发板说是tslib经过他们深度修改,不提供源码,真能忽悠人,其实就是改了一个数字,没必要搞的那么神秘)接下来的问题是有时不响应中断,查看驱动的源码中也有这样的注释

         /* TODO we should never get an interrupt with down set while

          * the timer is running, but maybe we ought to verify that the

          * timer isn't running anyways. */

可能写驱动的人也注意到这个问题了,我查看了更高版本的内核代码,都是一样的,没有解决这个问题。也不知过了多久,突然有一天无意的改代码时就改好了,以后再总结一下原因。

然后再搞PWM驱动,这也是难题,以前从来没做过,使用内核自带的PWM驱动,控制LCD背光和蜂鸣器。费了好大劲把驱动移植上去了,有设备节点了,但是操作时没反映,跟踪一下PWM驱动,发现内核自带的有问题,tcon有一位配置错了,改过来就好了。

314号的时候去kernel官网上看到2.6.37.4发布了,就准备移植这个,基本的驱动和2.6.36都是一样的,只有声卡有问题。从2.6.37开始,sound源码结构就改变了,cardcodec这些都分开了,需要单独创建一个"uda134x-codec""s3c24xx-pcm-audio"平台设备,似乎2.6.37sound代码不完善,怎么加也不行,就用了2.6.38的代码,声卡设备可以正常加载,但是没有声音出来,又用了2.6.39的,还是不行,郁闷的要死。因为以前在2.6.36中的声卡是正常的,就把sound代码全替换成2.6.36的,问题解决!

最难的就是camera驱动了,我准备使用V4L2架构编写camera驱动,这样写上层应用就方便多了,在QT中也有现成的camera程序。以前做过高通平台的camera驱动,真是噩梦,出了问题要追踪几十个文件。

现在v4l2的核心部分已经加上了,s3c_camifov7670IIC都加上了,但是不知道哪里还有问题,最近再研究。

阅读(298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~