歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux2.6.37.4在XC2440上移植成功

新版內核移植的過程真是艱難,歷時4個月,曾多次想過放棄。如果我都使用以前做好的東西,我的板在去年12月份就能開始賣了,也沒必要等到現在。現在發現我以前做的那些東西真是低級,當時才疏學淺,也只知道照搬別人的東西。

在現在的公司做了半年的驅動,對驅動也有了一個新的認識,我一直看高通的Android代碼,覺得高通的驅動做的挺專業的,就算一個LED的驅動也要寫個幾百行。我准備嘗試用新版的內核,將內核中所有能用的驅動都用在XC2440上。

這次使用2.6.37.4的內核,2011年3月14日發布,內核中已經集成了三星S3C平台幾乎全部的驅動,我們無需再手動編寫驅動了,我的主要工作就是完成了mach-xc2440.c

驅動列表:

Nand

支持512B/2K頁面nandflash

LCD

支持16bit/24bit數據格式,支持3.5/4.3/7寸等多種尺寸的TFT LCD

Uart

支持3個uart驅動

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有一位配置錯了,改過來就好了。

到3月14號的時候去kernel官網上看到2.6.37.4發布了,就准備移植這個,基本的驅動和2.6.36都是一樣的,只有聲卡有問題。從2.6.37開始,sound源碼結構就改變了,card和codec這些都分開了,需要單獨創建一個"uda134x-codec"和"s3c24xx-pcm-audio"平台設備,似乎2.6.37的sound代碼不完善,怎麼加也不行,就用了2.6.38的代碼,聲卡設備可以正常加載,但是沒有聲音出來,又用了2.6.39的,還是不行,郁悶的要死。因為以前在2.6.36中的聲卡是正常的,就把sound代碼全替換成2.6.36的,問題解決!

最難的就是camera驅動了,我准備使用V4L2架構編寫camera驅動,這樣寫上層應用就方便多了,在QT中也有現成的camera程序。以前做過高通平台的camera驅動,真是噩夢,出了問題要追蹤幾十個文件。

現在v4l2的核心部分已經加上了,s3c_camif,ov7670,IIC都加上了,但是不知道哪裡還有問題,最近再研究。

 

Copyright © Linux教程網 All Rights Reserved