LED驱动程序外部框架

简介: LED驱动程序外部框架

led驱动程序外部框架

1.为led编写入口函数和出口函数

入口函数

static int __init led_init(void)
{
  printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
  major = register_chrdev(0, "100ask_led", &led_fops);
  /* ioremap */
  led_class = class_create(THIS_MODULE, "myled");
  device_create(led_class, NULL, MKDEV(major, 0), NULL, "myled"); /* /dev/myled */
  return 0;
}

入口函数所做工作有:

1.打印内核消息

2.为file_operations注册设备,并返回系统随机分配的主设备号

4.还要根据硬件设备地址为物理地址分配虚拟地址

3.创建led_class和device_class让系统自动创建设备节点

出口函数

static void __exit led_exit(void)
{
  device_destroy(led_class, MKDEV(major, 0));
  class_destroy(led_class);
  unregister_chrdev(major, "100ask_led");
}
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");

出口函数所做工作:

1.销毁设备和类

2.注销设备节点

3.解除物理地址到虚拟地址的映射

最后三行作用分别是将led_init和led_exit修饰为入口函数和出口函数。并遵守GPL协议。

2.编写file_operations结构体

static struct file_operations led_fops = {
  .owner    = THIS_MODULE,
  .write    = led_write,
  .open   = led_open,
};

3.实现file_operations结构体内部函数

static int led_open(struct inode *inode, struct file *filp)
{
  /* enable gpio
   * configure pin as gpio
   * configure gpio as output 
   */
  return 0;
}

open函数作用:

1.使能相应引脚

2.给相应引脚设置模式

3.给相应引脚设置输出或者是输入

以上都是通过查看芯片手册获得数据。然后再通过地址映射ioremap得到虚拟地址,再对虚拟地址进行操作。

static ssize_t led_write(struct file *filp, const char __user *buf,
       size_t count, loff_t *ppos)
{
  char val;
  int ret;
  /* copy_from_user : get data from app */
  ret = copy_from_user(&val, buf, 1);
  /* to set gpio register: out 1/0 */
  if (val)
  {
    /* set gpio to let led on */
  }
  else
  {
    /* set gpio to let led off */
  }
  return 1;
}
目录
相关文章
|
Kubernetes API 调度
Kubernetes 架构解析:理解其核心组件
【8月更文第29天】Kubernetes(简称 K8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用。它提供了一个可移植、可扩展的环境来运行分布式系统。本文将深入探讨 Kubernetes 的架构设计,包括其核心组件如何协同工作以实现这些功能。
965 2
|
存储 Go
No.13 golang中channel(管道)常见使用场景?(上)
No.13 golang中channel(管道)常见使用场景?
397 0
|
4天前
|
云安全 监控 安全
|
2天前
|
存储 机器学习/深度学习 人工智能
打破硬件壁垒!煎饺App:强悍AI语音工具,为何是豆包AI手机平替?
直接上干货!3000 字以上长文,细节拉满,把核心功能、使用技巧和实测结论全给大家摆明白,读完你就知道这款 “安卓机通用 AI 语音工具"——煎饺App它为何能打破硬件壁垒?它接下来,咱们就深度拆解煎饺 App—— 先给大家扒清楚它的使用逻辑,附上“操作演示”和“🚀快速上手不踩坑 : 4 条核心操作干货(必看)”,跟着走零基础也能快速上手;后续再用真实实测数据,正面硬刚煎饺 App的语音助手口令效果——创建京东「牛奶自动下单神器」口令 ,从修改口令、识别准确率到场景实用性,逐一测试不掺水,最后,再和豆包 AI 手机语音助手的普通版——豆包App对比测试下,简单地谈谈煎饺App的能力边界在哪?
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1156 7
|
11天前
|
机器学习/深度学习 人工智能 数据可视化
1秒生图!6B参数如何“以小博大”生成超真实图像?
Z-Image是6B参数开源图像生成模型,仅需16GB显存即可生成媲美百亿级模型的超真实图像,支持中英双语文本渲染与智能编辑,登顶Hugging Face趋势榜,首日下载破50万。
734 42
|
15天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1176 41
|
15天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
942 78
大厂CIO独家分享:AI如何重塑开发者未来十年
|
3天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。

热门文章

最新文章