LED字元裝置驅動

2021-06-01 09:09:41 字數 2648 閱讀 1803

一、實驗環境

開發機環境

作業系統:ubuntu 10.10

交叉編譯環境:arm-linux-gcc 4.4.1,安裝位置 /usr/local/arm/4.4.1/

6410板子核心原始碼路徑:/work/linux-2.6.36.2-v1.05/      

目標板環境:ok6410-a     linux2.6.36

二、實驗原理

控制led是最簡單的一件事情,我們學習led驅動程式,就相當於學習其他程式語言是的「hello world」程式一樣,是乙個入門的程式。

學習驅動程式,必須要對硬體有所了解,接下來看幾個與硬體相關的材料。

ok6410  led原理圖

ok6410  led原理圖

從上面的原理圖可以得知,led與cpu引腳的連線方法如下,低電平點亮。

led1 -gpm0

led2 -gpm1

led3 -gpm2

led4 -gpm3

從資料手冊可以找到相應的控制方法。這裡我們以led1為例,介紹一下led1的操作方法,其他的類似,請大家自行分析。

通過上面可以得知,需要先將gpm0設定為輸出方式。將相應的暫存器進行配置。

然後將gpmdat暫存器的第0位置0燈亮,置1燈滅。

三、實驗步驟

1、編寫驅動程式

driver_led.c

#include

#include

#include

#include /* copy_to_user,copy_from_user */

#include

#include

#include

#include

#include

#include

//#define led_major 240

#define device_name "ok6410_leds"

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

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

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

return count;

}int led_release (struct inode *inode, struct file *filp)

struct file_operations led_fops =;

static struct miscdevice misc = ;

int __init led_init (void)

printk ("ok!\n");

return 0;

}void __exit led_exit (void)

module_init(led_init);

module_exit(led_exit);

makefile檔案

ifneq ($(kernelrelease),)

obj-m := ok6410_led_new.o

else

kdir := /home/doublechen/forlinx/linux-2.6.36.2-v1.05

all:

make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul*

endif

2、編寫測試程式

test.c

#include

#include

#include

#include

int main (void)

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

if (fd < 0)

while(1)

close (fd);

return 0;

} 3、編譯驅動程式與測試程式

編譯驅動程式

#make

編譯測試程式

#arm-linux-gcc  test.c  -o  test

將開發板的ip位址修改,與主機在同乙個網段。確保pc的tftp服務開啟。

smdk6410#   tftp -l /lib/modules/2.6.36.2/driver_led.ko -r driver_led.ko  -g  192.168.1.111        192.168.1.111為伺服器ip

smdk6410#   tftp -l test  -r test  -g  192.168.1.111         

5、測試

載入驅動   #insmod  /lib/modules/2.6.36.2/driver_led.ko

測試  ./test

[root@forlinx6410]# ./test

此時可以看到ok6410板子上的led0在閃爍。

解除安裝驅動  #rmmod   driver_led

字元裝置驅動 Led

驅動檔案 使用linux3.2.81核心 include include include include include include include include include include include static struct class ledsdrv class 類結構體 st...

字元裝置驅動 LED型

字元驅動程式 對於led型別的字元裝置驅動函式編寫 1 建立乙個file operation結構體,裡面會有點燈操作的各個硬體操作函式 2 編寫乙個drv init 函式 3 要對drv init函式進行修飾為入口函式,告訴核心,載入驅動時進行掛接 4 有init函式,那麼也會有出口函式exit m...

字元裝置驅動 LED驅動程式

int main open sys.open led.open write sys.write led.write 第一步 驅動功能實現 static int first drv open struct inode inode,struct file file static ssize t firs...