驱动代码:
#include <linux/module.h>
#include #include #include #include #include #include #include #include #define DEVICE_NAME 'beep3' #define BEEP_MAGIC 'k' #define BEEP_START_CMD _IO (BEEP_MAGIC, 1) #define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2) static void beep3_stop(void) { printk('in the beep3_stop!!n'); s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT); gpio_set_value(S5PV210_GPD0(0), 0); } static void beep3_start(void) { printk('in the beep3_start!!n'); s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT); gpio_set_value(S5PV210_GPD0(0), 1); } static long beep3_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) { printk('in the beep3_ioctl!!n'); switch ( cmd ) { case BEEP_START_CMD: { printk('in the start_cmd!!n'); beep3_start(); break; } case BEEP_STOP_CMD: { printk('in the stop_cmd!!n'); beep3_stop(); break; } default: { break; } } return 0; } static struct file_operations beep3_fops = { .owner = THIS_MODULE, .unlocked_ioctl = beep3_ioctl, }; static struct miscdevice beep3_misc_dev = { .minor = MISC_DYNAMIC_MINOR, .name = DEVICE_NAME, .fops = &beep3_fops, }; static int __init beep3_dev_init(void) { int ret; ret = gpio_request(S5PV210_GPD0(0), DEVICE_NAME); if (ret) { printk('request GPIO %d failedn',S5PV210_GPD0(0)); return ret; } s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT); gpio_set_value(S5PV210_GPD0(0), 0); ret = misc_register(&beep3_misc_dev); printk(DEVICE_NAME 'tinitializedn'); return ret; } static void __exit beep3_dev_exit(void) { beep3_stop(); misc_deregister(&beep3_misc_dev); } module_init(beep3_dev_init); module_exit(beep3_dev_exit); MODULE_LICENSE('GPL'); MODULE_AUTHOR('mhb@SEU'); MODULE_DESCRIPTION('S5PV210 beep Driver'); 测试实例: #include #include #include #include #include #include #include #define BEEP_MAGIC 'k' #define BEEP_START_CMD _IO (BEEP_MAGIC, 1) #define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2) int main(int argc ,char* argv[]) { int m_fd=0;// m_fd = open('/dev/beep3', O_RDONLY); ioctl(m_fd, BEEP_STOP_CMD); while(1) { printf('enter any key to start !!n'); getchar(); ioctl(m_fd, BEEP_START_CMD); printf('start success!!n'); printf('enter any key to stop !!n'); getchar(); ioctl(m_fd, BEEP_STOP_CMD); } close(m_fd); return 0; }
上一篇:喜羊羊系列【设备 - 驱动器 编译进内核】
下一篇:如何将驱动加入内核
推荐阅读最新更新时间:2026-03-24 19:26
- 支持 BLE 连接、由 4mA 至 20mA 电流回路供电的现场发送器参考设计
- AM2DM-0515DH60-NZ ±15 Vout、2W 双路输出 DC-DC 转换器的典型应用
- LTC6261IDC 音频耳机桥式驱动器运算放大器的典型应用
- LTC1775CS 2.5V/5A 可调输出降压稳压器的典型应用电路
- AD8601ARTZ-REEL7 符合 PC100 标准的线路输出放大器的典型应用
- 一种基于分立的 315MHz 振荡器解决方案,用于使用 BFR182 射频双极晶体管的远程无钥匙进入系统
- 使用 ROHM Semiconductor 的 BD49E39G-TR 的参考设计
- AM30EW-2405SZ 5V 三路输出 DC/DC 转换器的典型应用
- LTC3564 的电池在 1.2A 应用中达到 1.2V
- AL1676EV2,基于 AP1676 高亮度降压 LED 驱动控制器的评估板

java8 jdk for linux i586
Linux技术手册
智能机械臂
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号