下面將之前的按鍵驅動改寫為platform裝置。
1、建立資料夾key+platform
2、在資料夾key+platform下建立裝置檔案keydevice.c。
#include
#include
#include
#include
#include
#include
module_author("wjb");
module_license("dual bsd/gpl");
static struct platform_device *my_device;
static int __init my_device_init(void)
static void my_device_exit(void)
module_init(my_device_init);
module_exit(my_device_exit);
3、在資料夾key+platform下建立驅動檔案keydriver.c。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
module_author("wjb");
module_license("dual bsd/gpl");
#define device_name "pf_key_dev"
struct button_irq_desc;
static struct button_irq_desc button_irqs = ,,,
,,,};
static volatile char key_values = ;
static declare_wait_queue_head(button_waitq);
static volatile int ev_press = 0;
static irqreturn_t buttons_interrupt(int irq, void* dev_id)
return irq_retval(irq_handled);
}static int s3c24xx_buttons_open(struct inode* inode, struct file* file)
err = request_irq(button_irqs[i].irq, buttons_interrupt, irq_type_edge_both, button_irqs[i].name, (void *)&button_irqs[i]);
if(err)
}if(err)
disable_irq(button_irqs[i].irq);
free_irq(button_irqs[i].irq, (void*)&button_irqs[i]);
}return -ebusy;
}ev_press = 1;
return 0;
}static int s3c24xx_buttons_close(struct inode* inode, struct file* file)
free_irq(button_irqs[i].irq, (void*)&button_irqs[i]);
}return 0;
}static int s3c24xx_buttons_read(struct file* filp, char __user *buff, size_t count, loff_t *offset)
else
}ev_press = 0;
err = copy_to_user(buff, (const void*)key_values, min(sizeof(key_values), count));
return err ? -efault : min(sizeof(key_values), count);
}static unsigned int s3c24xx_buttons_poll(struct file* file, struct poll_table_struct *wait)
}static struct file_operations dev_fops = ;
static struct miscdevice misc = ;
static int my_probe(struct device* dev)
static int my_remove(struct device* dev)
static struct platform_driver my_driver = ,
};static int __init my_driver_init(void)
static void my_driver_exit(void)
module_init(my_driver_init);
module_exit(my_driver_exit);
4、makefile
ifneq ($(kernelrelease), )
obj-m := keydriver.o keydevice.o
else
kdir := /usr/src/linux-2.6.32.2
all:
make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
5、執行make。
得到keydevice.ko和keydriver.ko。
6、編寫應用程式。
其實此時的應用程式和之前的應用程式是一樣的,只是修改下裝置名字就好了。
7、將生成的應用程式以及keydevice.ko和keydriver.ko拷貝到開發板上的某個目錄下。
執行insmod keydevice.ko和insmod keydriver.ko以後,我們發現/dev下已經多了個裝置pf_key_dev。同時,在/sys/bus/platform/devices也發現了我們的裝置pf_key_dev,在/sys/bus/platform/drivers也發現了我們的裝置驅動pf_key_dev。
執行應用程式,效果和之前的一模一樣。
按鍵驅動 platform裝置的例子
下面將之前的按鍵驅動改寫為platform裝置。1 建立資料夾key platform 2 在資料夾key platform下建立裝置檔案keydevice.c。include include include include include include module author wjb mod...
驅動案例三 platform按鍵驅動(一 裝置)
plat device.c include include include include include include include include include static struct resource s3c buttons resource 0 start s3c24xx pa g...
platform裝置驅動之按鍵掃瞄(cdev裝置)
一 開發環境 1 硬體平台 fs2410 2 主機 ubuntu 10.10 3 核心版本 linux 2.6.35 4 交叉編譯工具鏈 arm none linux gnueabi 二 詳細 1 button device.c platform device include include inc...