android驅動例子(LED燈控制)

2021-06-19 19:24:49 字數 4032 閱讀 4826

2011-04-12 09:34

994人閱讀

收藏舉報

本例子,講述在android2.1上完全自已開發乙個驅動去控制硬體口並寫應用測試該驅動,通過這樣乙個例子,解析android下的驅動開發流程的應用呼叫流程,可以說是很好的入門引導

要達到的效果:通過android的應用,呼叫驅動程式,在開發板上控制4個led的亮滅。

一、硬體原理

如上圖,通過4個io口控制這led,低電平led亮,

這4個io口分別是gpm1, gpm2, gpm3, gpm4,

二、驅動程式

1、在kernel資料夾下的driver目錄,新鍵驅動資料夾

# cd kernel_android_2.6.28.6/drivers

進到開發板的kernel目錄,建驅動資料夾

2、在/driver/ledtest目錄下,新建leddriver.c ,leddriver.h , kconfig, makefile 等4個檔案

leddriver.c

leddriver.h檔案

leddriver.h檔案

ssize_t gpio_vib_read(struct file * file,char * buf,size_t count,loff_t * f_ops);

ssize_t gpio_vib_write (struct file * file,const

char * buf, size_t count,loff_t * f_ops);

static

int gpio_vib_ioctl(struct inode *inode, struct file *file, unsigned

int cmd, unsigned

long arg);

ssize_t gpio_vib_open(struct inode * inode,struct file * file);

ssize_t gpio_vib_release(struct inode * inode, struct file * file);

static

int gpio_vib_ctl_init(void);

kconfig檔案

kconfig 檔案

config ledtest

tristate "led test for armeasy"

default n

help

this is a led driver for armeasy with s3c6410

makefile檔案

makefile檔案

obj-$(config_ledtest)+=leddriver.o

3、在核心配置裡選單裡加入本驅動的配置項

達到的效果是,可以通過核心配置來選擇是否把本驅動編譯進核心裡,也就是出現在make menuconfig 後出來的介面裡,可以參考9.8章1)在arch/arm/kconfig檔案裡 menu "device drivers"與 endmenu之間新增

source "drivers/ledtest/kconfig"

2)在drivers/kconfig menu "device drivers" 和 endmenu之間新增

source "drivers/ledtest/kconfig"

3)修改/drivers/makefile檔案

obj-$(config_ledtest) +=ledtest/

4、編譯驅動

在kernel目錄下,終端輸入

#make menuconfig

「device drivers」 下面會看到 「led test for armeasy」,選擇它,

儲存並退出

#make

這樣,就會在/drivers/ledtest目錄下得到leddrivr.ko檔案,它就是驅動目標檔案,已級編譯進了zimage 裡了,只要用這個kernel燒錄到開發板,開機就會自動載入本驅動,

ps,如果發現如上編譯,沒有在ledtest目錄下生成leddriver.ko檔案,也就是本根沒有去編譯本驅動,那就把ledtest目錄入到/drivers/misc目錄下,相應的修改misc下面,然後,在makefile裡,不用選直接寫成obj-y += leddriver.o,這樣強制的包含進去編譯。

三、 應用程式(測試驅動)

用c語言寫乙個應用,測試上面寫的驅動是否工作正常,這是一般的驅動開發流程

主要有兩個檔案:android.mk和ledtest.c

1、在$(your_android)/external/ledtest/目錄編寫ledtest.c檔案,

ledtest.c

ledtest.c

#include

#include

#include

// contact the open(),close(),read(),write() and so on!

#define device_name "/dev/vib"

//device point

#define led_on  

0x11

#define led_off  

0x22

int main(int argc,char **argv)

else

ret = close(fd); //close device

printf("ret = %d \n",ret);

printf("close gpio_led test \n");

}return 0;}

2、在$(your_android)/external/ ledtest /目錄編寫android.mk檔案。這是android makefile的標準命名,不要更改。android.mk檔案的格式和內容可以參考其他已有的android.mk檔案的寫法,針對helloworld程式的android.mk檔案內容如下:

android.mk

local_path:= $(call my-dir)

include $(clear_vars)

local_src_files:= \/par 

hello.c

include $(build_executable)

注意上面local_src_files用來指定原始檔;

local_module指定要編譯的模組的名字,下一步驟編譯時就要用到;

include $(build_executable)表示要編譯成乙個可執行檔案,如果想編譯成動態庫則可用build_shared_library,這些可以在

$(your_android)/build/core/config.mk查到。

3、 回到android源**頂層目錄進行編譯:

例如我這裡的實際操作是

****************************************====
platform_version=2.1-update1
target_build_variant=eng
target_build_type=release
host_arch=x86
host_build_type=release
****************************************====
install: out/host/linux-x86/bin/soslim
install: out/target/product/generic/system/lib/libdl.so
install: out/target/product/generic/system/lib/libstdc++.so
4、如上面的編譯結果所示,編譯後的可執行檔案存放在

6、開電,在啟動進入android的過程中,串列埠終端 按回車,進入命令列模式

7、拷貝可執行檔案到根目錄

8、執行程式

通過上面的步驟,可以看到開發板上相應的led在閉,每秒鐘閃一次!

LED燈驅動的編寫

led燈驅動的編寫 一 原理圖 led2 gpx2 7 led3 gpx1 0 led4 gpf3 4 led5 gpf3 5 輸出 0滅 1亮 二 晶元手冊 gpx2con 0x11000c40 31 28 0x1 gpx2dat 0x11000c44 7 0 1 gpx1con 0x11000c...

使用驅動程式點亮LED燈

在最開始之前先來梳理一下點亮led程式的框架 1 通過對驅動程式的框架分析,我們知道第一步都要從入口函式開始,第乙個驅動裡我寫的入口函式很簡單,只是完成了必要操作 這裡的話就要進行改進。2 要點亮led首先要對led使用的引腳進行配置,引腳的模式只用配置一次,所以該部分工作放在開啟裝置檔案時進行,因...

小結 stm32 驅動LED燈

使用位帶操作,位帶操作就是把每個位元膨脹成乙個32位的字,當訪問這些字的時候就訪問這些位元位。然後,埠使能 pb5 pe5 led io void led init void gpio setbits gpiob,gpio pin 5 這個必須要寫,取位址。gpio setbits gpiob,gp...