【转] 嵌入式驱动开发

正点原子嵌入式linux驱动开发——RGB转HDMI 正点原子linux驱动开发的学习笔记,这一篇是RGB转HDMI 阅读详情

2.4内核注册驱动要用:
int register_chrdev (unsigned int major, const char *name, struct file_operations *fops);
2.4内核注销驱动要用:
int unregister_chrdev( unsigned int major, const char *name );
2.4内核驱动注册完后,要用以下代码创建设备文件
   static devfs_handle_t devfs_handle;
   devfs_handle = devfs_register( NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,
                           BUTTON_MAJOR,&sbc2410_buttons_fops, NULL);
2.4内核驱动要用以下代码移除设备文件:
devfs_unregister( devfs_handle);
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
2.6驱动i注册设备号要用:
(1)如果主设备号事先知道,要用:
int register_chrdev_region( dev_t first, unsigned int count, char *name );
(2)如果主设备号为0,则要用动态分配:
int alloc_chrdev_region( dev_t *dev, unsigned int firstminor,
            unsigned int count, char *name );
2.6释放设备号要用:
void unregister_chrdev_region( dev_t first, unsigned int count );
2.6内核字符设备驱动注册要用:
struct cdev *my_cdev = cdev_alloc();
my_cdev->ops = &chr_fops;
void cdev_init( struct cdev *cdev, struct file_operations *fops);
int cdev_add( struct cdev *dev, dev_t num, unsigned int count);
2.6内核字符设备驱动移除要用:
void cdev_del( struct cdev *dev );
2.6内核驱动注册完后,要用以下代码创建设备文件
devfs_mk_cdev( MKDEV(LED_MAJOR, LED_MINOR),
      S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP, DEVICE_NAME);
2.6内核驱动要用以下代码移除设备文件:
devfs_remove(DEVICE_NAME);
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
以上也可以用命令创建设备文件:
mknod /dev/设备文件名 字符设备(c是字符设备,b是块设备)   主设备号 次设备号
例如:mknod /dev/testChar c  100 0
删除设备入口:
    rm /dev/testChar
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
2.4驱动总体编写框架:
static int __init my_init(void)
{
//注册设备驱动
register_chrdev (unsigned int major, const char *name, struct file_operations *fops);
//创建设备文件
static devfs_handle_t devfs_handle;
   devfs_handle = devfs_register( NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,
                           BUTTON_MAJOR,&sbc2410_buttons_fops, NULL);
}
static int __exit my_exit(void)
{
//移除设备文件
devfs_unregister( devfs_handle);
//注销设备驱动
unregister_chrdev( unsigned int major, const char *name );
}
module_init( my_init );
module_exit( my_exit );
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------
2.6驱动总体编写框架:
static int __init my_init(void)
{
//分配设备编号
if(主设备号)
{
  sbc2440_leds_dev = MKDEV (LED_MAJOR, LED_MINOR);
  result = register_chrdev_region (sbc2440_leds_dev, count, DEVICE_NAME);
}
else
{
  result = alloc_chrdev_region (&sbc2440_leds_dev, LED_MINOR, count, DEVICE_NAME);
  LED_MAJOR = MAJOR (sbc2440_leds_dev);
}
//注册字符设备驱动
sbc2440_leds_cdev = cdev_alloc();
if (sbc2440_leds_cdev != NULL)
{
  cdev_init (sbc2440_leds_cdev, &sbc2440_leds_fops);
  sbc2440_leds_cdev->ops = &sbc2440_leds_fops;
  sbc2440_leds_cdev->owner = THIS_MODULE;
  if (cdev_add (sbc2440_leds_cdev, sbc2440_leds_dev, count) )
   printk (KERN_NOTICE "Someting wrong when adding sbc2440_leds_cdev!/n");
  else
   printk ("Success adding sbc2440_leds_cdev!/n");
}

//创建设备文件
devfs_handle = devfs_register( NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,
                           BUTTON_MAJOR,&sbc2410_buttons_fops, NULL);
}
static int __exit my_exit(void)
{
//移除设备文件
devfs_remove(DEVICE_NAME);
//注销字符设备
cdev_del (sbc2440_leds_cdev);
//释放设备编号:
unregister_chrdev_region (sbc2440_leds_dev, count);
}
module_init( my_init );
module_exit( my_exit );
------------------------

驱动程序的编译:
    驱动程序在编译之前,所使用的内核必须要经过编译,否则驱动程序不能编译。
驱动有用函数
set_irq_type函数
在set_irq_type(irq,type)中的type如下:
#define IRQT_NOEDGE (0)
#define IRQT_RISING (__IRQT_RISEDGE) 上升沿有效
#define IRQT_FALLING (__IRQT_FALEDGE) 下升沿有效
#define IRQT_BOTHEDGE (__IRQT_RISEDGE|__IRQT_FALEDGE) 双边沿有效
#define IRQT_LOW (__IRQT_LOWLVL) 低电平有效
#define IRQT_HIGH (__IRQT_HIGHLVL)  高电平有效
#define IRQT_PROBE (1 << 4)
按键驱动总结:
set_gpio_mode_user(k->gpio_port, GPIO_MODE_IN );
up = read_gpio_bit(k->gpio_port);
s3c2410_gpio_cfgpin(k->gpio_port, k->gpio_set);
set_irq_type( k->irq_no, IRQT_RISING );
以上这段代码的功能是:
第一条是设置GPIO端口的使用模式,在此为输入模式,总共有4种模式,分别为:
1,GPIO_MODE_IN(输入模式)
2,GPIO_MODE_OUT(输出模式)
3,GPIO_MODE_ALT0(第三功能)
4,GPIO_MODE_ALT1(第四功能)
第二条是读取gpio端口的信号。
第三条是初始化端口
第四条是设置中断触发方式。
实现了从io口读取信号,在此为上升沿读取有效。
在申请中断之前,必须对端口进行初始化,否则端口不能使用。在中断处理程序的最后,还要对端口进行复位,即恢复到申请中断前初始化时的状态。
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP
S_IRUSR
  Permits(允许) the file's owner to read it.
S_IWUSR
  Permits the file's owner to write to it.
S_IRGRP
  Permits the file's group to read it.
S_IWGRP
  Permits the file's group to write to it.

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/unbutun/archive/2009/01/08/3732343.aspx

嵌入式Linux下TC358743 HDMI转MIPI CSI-2驱动开发全解析 在嵌入式系统开发中,视频采集是连接物理世界与数字处理的关键环节,其核心在于将外部视频信号转换为处理器可理解的数据流。这一过程依赖于视频采集驱动,它作为硬件与操作系统间的桥梁,遵循V4L2(Video4Linux2)框架标准,通过I2C控制流与MIPI CSI-2数据流分离的架构实现高效通信。驱动设计的价值在于确保视频数据能够稳定、低延迟地传输,是构建智能零售、工业视觉及无人机图传等实时视频处理应用的基石。本文聚焦于TC358743这款高性能HDMI转MIPI CSI-2桥接芯片,深入剖析其在嵌入式Linux 阅读详情

相关推荐

嵌入式Linux下TC358743 HDMI转MIPI CSI-2驱动开发与调试全攻略

在嵌入式多媒体系统中,MIPI CSI-2接口是连接图像传感器与主处理器的关键高速串行总线标准,广泛应用于摄像头视频流传输。其工作原理基于差分信号对(D-PHY)实现低功耗、高带宽的数据传输,技术价值在于为移动和嵌入式设备提供了标准化的图像数据接口。V4L2(Video for Linux 2)作为Linux内核的视频设备驱动框架,统一了视频设备的访问和控制模型,是开发摄像头、采集卡等驱动的基础。通过V4L2子设备(subdev)模型,可以构建复杂的媒体处理流水线。在嵌入式视频采集场景中,经常需要将HDMI

weixin_30697239的博客 334

Linux驱动学习记录 devfs_mk_cdev

Linux驱动学习记录阅读(12) 评论(1) 发表时间:2008年08月21日 21:13 本文地址:http://qzone.qq.com/blog/61096542-1219324420     2.4内核注册驱动要用:int register_chrdev (unsigned int major, const char *name, st

6461

嵌入式Linux下TC358743 HDMI转MIPI CSI-2 V4L2驱动开发实战

在嵌入式多媒体终端开发中,视频采集是核心功能之一,其原理是通过驱动将物理视频信号转换为系统可处理的数字流。V4L2(Video for Linux 2)是Linux内核的标准视频框架,它定义了统一的接口来管理视频设备。对于HDMI等高清视频输入,常需借助桥接芯片转换为MIPI CSI-2等嵌入式接口,这要求开发者深入理解芯片手册与内核驱动框架。其技术价值在于实现了复杂视频硬件在资源受限环境下的稳定驱动,为工业视觉、医疗影像等应用提供了基础。本文聚焦于**TC358743**这款热门桥接芯片,详细解析了在嵌入

weixin_30904593的博客 308

devfs_mk_cdev与devfs_register引用

http://www.360doc.com/content/10/0830/13/169163_49868495.shtml

firstime_tzjz的专栏 1043

CH340驱动程序详解:TTL转USB在嵌入式开发中的应用

先说结论:便宜、稳定、驱动成熟、即插即用。这几个关键词让它在过去十年里成为无数开发板和量产产品的首选串口桥接方案。南京沁恒微电子推出的CH340系列,本质上是一个高度集成的USB-to-UART桥接芯片。它能把标准USB 2.0全速信号(12Mbps)转换成TTL电平的异步串行通信信号,直接对接MCU的RX/TX引脚。无需外部晶振,内置上电复位和ROM配置,真正做到了“免驱+免配”。

weixin_31459297的博客 1357

感应电机无速度传感器FOC控制原理与Simulink仿真实践

无速度传感器FOC控制是电机驱动领域的重要技术,通过算法重构实现仅依赖电气参数的闭环控制。其核心原理基于电机数学模型,利用Clark/Park变换和滑模观测器估算转子位置和转速。这种技术在工业伺服系统中具有显著价值,能有效降低系统成本并提高可靠性。典型应用场景包括纺织机械、风机驱动等需要精确转速控制的设备。本文以感应电机为例,详细解析了无感FOC的Simulink实现方法,特别关注滑模观测器设计和双闭环控制策略,为工程师提供可直接复用的参数调优经验。

weixin_29189987的博客 259

Linux 设备驱动之init&exit

最近在学习有关Linux驱动方面的知识,将所学总结记录下来,方便后期复习。

LX_0729的博客 408

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 174

linux驱动中的__init和__exit

当一个驱动程序或内核模块被加载时,其包含的 __init 函数会被调用。类似地,当一个驱动程序或内核模块被卸载时,其包含的 __exit 函数会被调用。该宏使用了 GCC 的属性语法,将函数的代码段标记为 .init.text,以便在模块被加载时进行初始化操作。使用 __init 宏可以确保在模块被加载时对驱动程序或内核模块进行必要的初始化操作,例如分配需要的内存、注册设备等。使用 __exit 宏可以确保在模块被卸载时对驱动程序或内核模块进行必要的清理操作,例如释放分配的内存、关闭设备等

RyanLee90的博客 1692

【STC32G12K128开发板】——从零到一:Keil C251开发环境全攻略

本文详细介绍了为STC32G12K128开发板搭建Keil C251开发环境的完整流程。从环境准备、软件安装、驱动配置到创建第一个工程并下载程序,提供了避坑指南和实用技巧,帮助开发者高效入门这款基于251内核的国产32位单片机开发。

weixin_29192141的博客 363

Yolov26 在 Rk3588 上的 Rknn Onnx 部署实践(c++)

本文介绍了YOLOv26在RK3588平台的C++推理部署方案。重点包括:1)扩展Ultralytics导出格式,新增RKNN_ONNX专用导出选项;2)重构Detect Head结构,使其更适合RKNN推理;3)提供C++侧后处理实现建议。该方案保留了Ultralytics训练生态,通过优化模型结构输出,将解码等操作移至C++端,充分发挥Rockchip NPU性能。适用于RK3588/RK356x等平台,需配合rknn-toolkit2使用,为YOLOv26的嵌入式部署提供完整解决方案。

qq_64366203的博客 2177

字符设备的编写一

字符设备是Linux驱动中三大设备之一,字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和write的系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似备)就是两个字符设备,它们能很好的说明“流”这种抽象概念。字符设备可以通过文件节点来访问,比如/dev/tty1和/dev/lp0等。

weixin_52849254的博客 681

Python入门之机器学习(非常详细)篇幅拉满,一般人看不完!

什么是机器学习?监督学习 supervised learning;非监督学习 unsupervised learning;半监督学习 semi-supervised learning;强化学习 reinforcement learning;监督学习是不断向计算机提供数据(特征),并告诉计算机对应的值(标签),最后通过大量的数据,让计算机自己学会判断和识别。例如Google Photo,你在APP中输入狗,这时就会弹出与狗相关的图片,这背后使用的算法就是监督学习。

xiaolinyui的博客 2万+

【亲测免费】 CH340 USB转TTL驱动:让您的嵌入式开发更顺畅

CH340 USB转TTL驱动:让您的嵌入式开发更顺畅 【下载地址】CH340USB转TTL驱动安装指南 CH340 USB转TTL驱动安装指南 项目地址: https://gitcode.com/open-source-tool...

gitblog_09806的博客 620

A Macro- and Micro-Hierarchical Transfer Learning Frameworkfor Cross-Domain Fake News Detection

近年来,社交媒体上假新闻的快速和广泛传播对人们的日常生活构成了越来越大的威胁[6, 14, 19]。为了有效打击假新闻,自动检测假新闻变得至关重要[39]。新闻内容[11, 16, 20, 27]和用户互动(即用户互动)[1, 24, 34]。基于这些类型的数据,提出了单领域假新闻检测,它从新闻文章、用户互动或两者中提取有效特征,以识别单个新闻领域内新闻的真实性(即新闻是真是假)(例如,政治新闻或娱乐新闻)。

qq_52053775的博客 155

YOLOv11改进策略【卷积层】| ICCV-2023 LSK大核选择模块 包含二次独家创新

LSK module是。

Limiiiing的博客 1382

【免费下载】 FT231X USB转串口驱动:嵌入式开发者的福音

FT231X USB转串口驱动:嵌入式开发者的福音 【下载地址】FT231XUSB转串口驱动 本仓库提供了一个名为 `ft231x_usb_uart 驱动.zip` 的资源文件,该文件包含了 FT231X USB 转串口驱动的相关内容。此驱动适用于嵌入式开发中需要使用 USB 转串口功能的场景。 ...

gitblog_09777的博客 4364

深入YOLOv8内部核心:用RepNCSPELAN4深度重构主干网络,即插即用的高效涨点方案

本文提出了一种改进YOLOv8目标检测模型的方法,通过在YOLOv8中引入RepNCSPELAN模块来提高检测性能。该模块融合了RepVGG重参数化思想与CSP-ELAN结构,在保持推理速度的同时增强特征表达能力。实验结果表明,改进后的RepNCSPELAN-YOLOv8相比原模型在多项指标上均有提升:准确率从0.84提高到0.86,召回率从0.72提升至0.81,mAP50和mAP50-95也分别提高了0.06和0.04。文章详细介绍了模块设计原理和移植步骤,包括配置文件创建、代码修改等关键环节,为YOL

FJN110的博客 186

从零实现USB转485驱动在嵌入式开发板上的部署

深入讲解如何从零开始开发并部署usb转485驱动,适用于嵌入式开发场景,详细剖析驱动架构与硬件通信机制,帮助开发者快速掌握usb转485驱动的实际应用技巧。

weixin_42596011的博客 524

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

嵌入式开发利器:USB转RS232串口驱动及secureCRT使用指南

嵌入式开发利器:USB转RS232串口驱动及secureCRT使用指南 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在嵌入式开发过程中,串口通信是不可或缺的一环。然而,随着现代笔记本电脑逐渐取消物理串口,开发者们面临着如何与嵌入式设备进行通信的难题。为了解决这一问题,我们推出了嵌入式USB转RS232九针串口线驱动及串口软件secureCRT的使用指南项目。该项目不...

gitblog_06537的博客 657

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

linux驱动开发能转嵌入式开发,Linux 嵌入式驱动开发:hello world

1、代码编写,只有一个文件,内容如下文件名为:mini2440_hello_module.c#include#includestaticint__initmini2440_hello_module_init(void){printk("Hello,Mini2440moduleisinstalled!\n");return0;}staticvoid__exitmini24...

weixin_34910465的博客 330

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【转】嵌入式Linux之我行——LED驱动在2440上的实例开发

嵌入式Linux之我行——LED驱动在2440上的实例开发 一、开发环境主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand 编译器:arm-linux-gcc-4.3.2二、实现步骤1. 硬件原理图分析。由原理图得知LED电路是共阳极的,并分别由2440的GPB5、GPB6、GPB7、GPB8口控制的  2.

Linux Driver,Go! 1177

【转】嵌入式Linux网络驱动程序的开发及实现原理

 随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成千上万的计算机专家和爱好者的青睐。在嵌入式领域,通过对Linux进行小型化裁剪后,使其能够固化在容量只有几十兆字节的存储器芯片或单片机中,成为应用于特定场合的嵌入式Linux系统。Linux强大的网络支持功能实现了对包括TCP/IP在内的多种协议的支持,满足了面向21世纪的嵌入式系统应用联网的需求

wswifth的专栏 1705

Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)

文章目录驱动介绍Hello World1. 包含头文件编译第一种方法第二种方法 之前也算是一直在学习嵌入式Linux的开发,裸机开发,uboot配置,系统编译,驱动开发,Qt开发, 这一套一知半解的看下来对于怎么开发Linux,还是一头雾水 ,没有一个明确的认知,所以对于这方面的知识打算从头重新建立一个完整的学习框架,这次更加去注重理论的理解和相通性。 驱动介绍 驱动分为四个部分 头文件 驱动模块的入口和出口 声明信息 功能实现 Hello World 1. 包含头文件 编译 第一种方法 把驱动编译成

“逛丢一只鞋”的博客 1万+

嵌入式入门学习笔记4:[转]什么是嵌入式底层驱动开发和嵌入式底层软件开发...

嵌入式入门学习笔记4:[转]什么是嵌入式底层驱动开发和嵌入式底层软件开发 我们知道嵌入式操作系统(Embedded System)是指以应用为中心、以计算机技术为基础,软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式开发分两种,一种是硬件开发,一种是软件开发。简单来说,嵌入式底层驱动开发就是针对嵌入式操作...

王强的博客 6369

HDMI转MIPI驱动板:旋转镜像功能在嵌入式显示系统的定制开发与应用

本文详细解析HDMI转MIPI驱动板在嵌入式显示系统中的核心功能与应用,重点介绍其硬件级旋转与镜像功能的实现原理及实际价值。通过智能零售、VR设备、车载系统等定制化案例,展示如何通过驱动板快速实现多角度旋转和镜像显示,显著降低开发成本并提升显示灵活性,满足4K高清输出的工业级稳定性要求。

oauth7security的博客 1079
上一篇: 基于x86的madplayer移植构建脚本
下一篇: 嵌入式系统中断服务子程序(ISR)
linux510zcf
博客等级 码龄18年 11粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值