S3C2440 平台的spi ad7888驅動程式

2021-05-22 11:31:09 字數 1702 閱讀 5983

首先定義乙個struct ad7888 ;

來描述我的裝置附加資訊

先理下邏輯:

[1]module_init(spi_ad7888_init);

[2]static int __init spi_ad7888_init(void) {}(在這個函式裡應實現 初始化主裝置號及字元裝置註冊最後呼叫平台裝置註冊函式spi_register_driver(spi_ad7888_driver))

[3]關於struct spi_driver spi_ad7888_driver這個結構體,需要填寫的項有.probe .remove .driver其中.driver 又包含.name.owner 等等。其中.name這個是關鍵,平台裝置驅動程式的匹配就是根據這個name和device裡面的.name作比較,當然,這裡有點不同,spi的match會調到後面講的spi_board_info中的.modalias做比較。

[4]接著填寫probe和remove函式,我在spi_ad7888_driver結構體中,將.probe=spi_ad7888_probe。那麼spi_ad7888_probe中實現的功能有:

分配乙個struct ad7888結構體空間,這個結構體在上面定義

注:以下省略了所有的出錯處理~實際應用中不能缺少。

static int __devinit spi_ad7888_probe(struct spi_device *spi)

至此probe的函式實現完了,應該要填寫struct file_operations ad_fop這個結構體了,和所有字元裝置一樣

這裡還是那些open ,read,write,ioctl,release這幾個基本操作~接合實際硬體,對於這個spi ad 7888多通道的晶元來說,write的功能的實現還不如去實現ioctl,所以我這裡省去了write的實現。

[5]struct file_operations ad_fop=;

先看看open函式

static int ad_op(struct inode *inode,struct file *filp)

接下來要乙個乙個填寫,其他的功能函式我就省略了,只實現乙個read函式,其他依次類推,應該很容易弄出來。

[6]static int ad_rd(struct file *filp,int __user *buf,size_t count,loff_t *offset)

up(&chip->lock);

return 0;

}好了,驅動程式寫完了,編譯完成後~就能用了嗎?當然不行了~還有一件重要的事情沒做~就是spi_device是什麼時候生成的啊?

上面的函式裡面只有struct *spi_device 連 struct ad7888這個自定義的函式裡面也只有struct *spi_device 並沒有分配它的空間,那麼它在**實現?

linux的裝置管理模型是很巧妙的~

在linux-2.6.24/arch/arm/mach-s3c2440/ 的mach-smdk2440.c

有這麼一段:static struct spi_board_info spi_board_info __initdata =,};

ok再在static void __init smdk2440_machine_init(void)

好了,到這裡~如果你的核心中開啟了spi master控制器的話,編譯驅動新增到核心,就可以實現讀取spi的驅動了。。。

Qt4 4 3 在s3c2440平台的移植

首先,從 qt embedded linux opensource src 4.4.3。下面是詳細的移植步驟 1.解壓縮 tar zxf qt embedded linux opensource src 4.4.3.tar.gz cd qt embedded linux opensource src...

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...

s3c2440系統時鐘

1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...