關於ok6410 LED and BEEP驅動程式

2021-06-04 13:41:55 字數 2584 閱讀 3165

苦於現在市面上的資料大多是關於arm9,關於6410的卻很少,但是我堅信,6410正以他的優勢席捲嵌入式這個行業,所以,在此寫下一些關於驅動的開端。

當初自學微控制器,我跟大多數一樣,從點亮乙個led燈開始,然後流水燈,蜂鳴器,數碼管等開始微控制器程式設計,算是入了門,現在玩arm驅動,我想也通過這幾個程式設計入門,然後我們再慢慢的深入到操控各種硬體,但是,入門並不是那麼容易,我見網路上很多人在找關於如何驅動led的arm11ok6410驅動程式,好,別人給你了乙個led驅動程式,但是沒有注釋,又或者這乙個驅動程式,並不是那麼讓你很容易的理解到他的操控原理,以及你還是沒有學會如何去編寫驅動程式,在此,我寫了乙個驅動程式,包含流水燈和蜂鳴器同時工作,僅供參考,本人也盡量多些注釋,以便他人找到學習的捷徑。

以下是我寫的led-beep-driver.c:

#include /*包含巨集module_license(『gpl』)*/

#include /*以便使用printk()等函式*/

#include /*包含常用的資料結構,如struct file等*/

#include /* copy_to_user,copy_from_user */ 

#include /*包含readl,wrietl*/

#include /*不包含此檔案,你試試會出現怎樣的錯誤提示呢?*/

#include /*定義了gpio相關的資料巨集*/

#include /*以便於使用s3c64xx_gpm~*/

#include

#include /*包含了gpio的各種配置函式,如設定輸入輸出,設定上拉電阻等*/

#define beep_major 241    /*定義主裝置號*/

int j=0;/*定義變數幹嘛用?請往後看程式,請思考為什麼要定義成全域性變數*/

int beep_open (struct inode *inode,struct file *filp) 

ssize_t beep_read (struct file *filp, char __user *buf, size_t count,loff_t *f_pos) 

/*此函式為空,我們在此不設計裝置(及led和蜂鳴器)的讀操作*/

ssize_t beep_write (struct file *filp, const char __user *buf, size_t count,loff_t *f_pos) 

return count; 

int beep_release (struct inode *inode, struct file *filp)  

struct file_operations led_beep_fops =;                                  /*這是所有函式的操作集,及函式指標集合,系統呼叫時,對應於此集合中的指標找到對應的操作函式,實現對硬體的不同操作*/

int __init beep_init (void)  /*模組載入時,載入巨集呼叫此函式,在此函式中實現裝置驅動註冊*/

printk ("success!\n"); 

return 0; 

void __exit beep_exit (void)  /*模組解除安裝時呼叫此函式,在此函式中,我們要實現與載入時相反的操作,及我們註冊時,申請了什麼,我們就應該在解除安裝時釋放什麼,以免造成下次使用時不能再用的後果,產生比如中斷,記憶體,io等的浪費*/ 

module_init(beep_init); /*要清楚這是個巨集,並不是函式,巨集和函式還是有區別的,儘管這看起來不同於常見的一些巨集,此巨集即實現了載入*/

module_exit(beep_exit);

module_license("gpl");   /*我們的驅動程式要符合一些標準,如此才能更加完美的匹配核心,當然沒有也是可以的,但有的時候或許會出現些問題,避免麻煩,加上更省事*/

module_author(「liuyue@feng」);/*這是作者署名的地方,不再像簡單的c語言那樣用注釋語句來打廣告,寫上日期和作者,模組中,有很多巨集可以來為我們利用,呵呵,在此打個廣告,我是低調的,不顯山露水的「六月@風」*/

ok,關於led和beep的ok6410驅動程式就到此吧,這算是給自己複習的機會,同時,也給那些初學者乙個方向,相信通過此分析,你們應該有所領悟了,我用我個人的理解通俗簡單的分析就結束了,至於未來你們還需要什麼,我又懂得什麼,未來再說吧,關注我的空間,隨時不定期更新。

在群中,很多人迷茫於不知道如何學,路線如何,我說不少了,有時間也整理一篇文件出來,認真負責的去說下我如何從完全不了解到一步步堅持走來的過程。

ok,那就下次再期待吧!一起努力,共同進步,每天收穫一點。

對了,在此也貼上測試程式吧,如下,至於makefile,這個還是自己去思考,否則完全看別人的,記憶不深刻,留給自己去琢磨:

#include

#include

#include

#include

int main (void) 

;  fd = open("/dev/my_beep",o_rdwr); 

if (fd < 0) 

while(1) 

close (fd); 

return 0; 

OK6410裸機程式 hello world

上面已經解決 了幾個問題。現在我們的狀態 可以在pc ok6410 之間進行tftp傳輸,確定了一下可用的位址 空間,下面我們來說一下printf除錯 因為沒有jlink,只能用printf除錯,你也許會問,我們自己實現printf麼?答曰 不是,我們只是弄個hello world,何必那麼認真呢?...

OK6410 LCD驅動移植

今天完成了 ok6410 的lcd 驅動移植,那麼直接進入正題,我的操作環境是 主機 xp系統,vmware ubuntu 10.10 虛擬機器。開發板 ok6410,a板,256m 2g lcd 飛凌4.3 寸tft wxcat43,480 272 如果你是參考這篇博文來移植的話,我還是要強調一下...

ok6410LCD測試程式

1.在螢幕上分別顯示紅綠藍三個長方形 自定義結構體用來在使用者空間裡管理幀緩衝的資訊 typedef struct fd dev fb dev t 實現緩衝裝置的開啟和關閉操作的介面 int fb open fb dev t fbd,char fbn 獲取lcd的可變引數 ioctl fbd fd,...