LED燈驅動編寫全過程

2021-06-03 00:24:09 字數 3488 閱讀 4895

led驅動實驗步驟:

準備工作(led驅動):

1    準備測試的工具

2    準備相關字元裝置驅動的知識

3    準備相關驅動(led)檔案

4    準備相關的硬體知識,獲取硬體開發人員提供的led介面。

driver/char

psled_player 701

kill 701

./ledtest 0 0

./ledtest 0 1

./ledtest 0 2

./ledtest 0 3

./ledtest 1 0

./ledtest 1 1

./ledtest 1 2

./ledtest 1 3

./dxctest 0 0

./dxctest 0 1

led0~led3, gpb5~gpb8

(12  make menuconfig,把m改為*,make zimage)

寫**:

1     核心模組的要素完成

2     初始化函式,確認主裝置號,次裝置號。

3     初始化函式,分配記憶體

4     初始化函式,安裝cdev

5     實現file操作函式

obj-$(config_myled_mini2440) += myled.o

int main()

fp = open("/dev/dfsgdsg", 0)

ioctl(fp, atoi(argv[1]), atoi(argv[2]));

return;

arm-linux-gcc 54te.c -o dxctest

具體操作:

led驅動**:(myled_driver.c)

#include

#include

#include

#include /* printk() */

#include /* kmalloc() */

#include /* everything... */

#include /* error codes */

#include /* size_t */

#include /* o_accmode */

#include /* cdev...*/

#include /* writel(),readl()... */

#include /* cli(), *_flags */

#include /* copy_*_user */

#include /* wake_up_interruptible()... */

#include /* udelay() */

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define device_name   "myled"  //巨集定義裝置名稱

static int led_major =   0;  //初始化主裝置號

static int led_minor =   0;  //初始化次裝置號

struct cdev  *led_device;  //定義cdev結構體指標

//下面的兩個陣列是處理器相關的資訊

static unsigned long led_table = ;

static unsigned int led_cfg_table = ;

//裝置開啟函式

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

return 0;

}//裝置關閉函式

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

//裝置操作函式

static int myled_ioctl (struct inode *inode, struct file *filp,

unsigned int cmd, unsigned long arg)

s3c2410_gpio_setpin(led_table[arg], !cmd);

return 0;

default:

return -einval;}}

struct file_operations led_fops =    //字元驅動和核心的介面:file_operations結構體

;static void __exit my_led_exit(void)    //模組結束函式

/* cleanup_module is never called if registering failed */

unregister_chrdev_region(devno, 1);    //取消註冊裝置號

return;

}static int __init my_led_init(void)  //模組入口函式

led_device = kmalloc(sizeof(struct cdev), gfp_kernel);  //為裝置分配記憶體

if (!led_device)

memset(led_device, 0, sizeof(struct cdev)); //清空記憶體

cdev_init(led_device, &led_fops);  //字元裝置初始化函式:把為裝置分配的記憶體與操作裝置的結構相關聯

led_device->owner = this_module;

result = cdev_add (led_device, dev, 1);  //裝置增加

if (result)

return 0;

}module_init(my_led_init);  //模組入口函式

module_exit(my_led_exit);  //模組出口函式

module_license("gpl");

測試的應用程式(testled.c):

#include

int main(int argc,char *argv)

fp=open("/dev/myled",0);

if(fp<0)

printf("test:%d\n",atoi(argv[1]));

if(atoi(argv[1])<8)

if(atoi(argv[1])==8)

if(atoi(argv[1])==9)

if(atoi(argv[1])==10)

if(atoi(argv[1])==11)

if(atoi(argv[1])==12)

if(atoi(argv[1])==13)

}

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...

鳥瞰linux的檔案讀寫全過程

讀寫檔案,是作為乙個作業系統所提供的最基本介面之一。我們就從寫檔案過程 open,write,close這幾個介面來說起,描述寫檔案的那些事兒。平時,我們做應用程式的時候,常常用到讀寫檔案的函式介面,就拿寫檔案來說,我們用c c 編寫時,用到了以下的函式介面 1 file fopen const c...

VC6編寫ActiveX控制項全過程

by rush date 2011年6月22日 20 07 56 vc編寫activex控制項全過程 1 新建控制項工程 在新建專案時,選擇新建activex控制項,如下圖所示 其他的基本可以選擇預設屬性,然後我們就可以進入自己新建的工程了,如右下圖所示。方框中標出的是新建控制項之後自帶的三個類。我...