- 博客(46)
- 资源 (2)
- 收藏
- 关注
原创 字符设备驱动_3:register_chrdev_region() 简单字符设备驱动的实现
egist_chrdev_region() 函数接口注册同一类字符设备的多个子设备
2022-12-22 11:40:28
731
原创 字符设备驱动_2:register_chrcev() 简单字符设备驱动的实现
register_chrcev() 简单字符设备驱动的实现和注册过程梳理
2022-11-04 10:37:21
1463
原创 linux qume开发环境搭建
实验依照《奔跑吧linux内核》第一版进行,感谢大佬们的创作。1. 拉取kernel 4.0 codewget -c https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.gz2. 拉取busybox codewget -c https://busybox.net/downloads/busybox-1.24.0.tar.bz23. 解压 kernel 和 busyboxtar -xvf linux-4.0.tar.gz...
2022-05-20 17:39:38
650
原创 音频相概念扫盲——声音处理的过程
首先,需要认识到的是,生活中声音都是模拟信号,比如正弦信号等。但是CPU能处理的信号是数字信号,所以需要进行AD转化,输入到系统处理后,通过DA转换,然后输入到音频系统进行放大等播放出来。一、这里提到的几个过程进行简单描述1. AD转换对模拟信号进行 采样-----》保持-----》量化 ------》 编码采样还有许多参数,比如分辨率、采样精度、采样量程等,挑几个在音频中经常使用的描述一下(1)采样频率:AD转换器在单位时间内对模拟信号的采样次数。采样应该遵行采样定...
2022-05-09 20:04:58
1743
原创 Java JNI调用C语言中的函数
1、调用无参函数java codepublic class JNITest { static { /*加载*/ System.loadLibrary("mynative"); } public native static void JavaHello(); public static void main(String[] args) { /*java c库 函数建立联系*/ /*调用*/ JavaHello(); }}C code#i
2022-04-09 14:17:25
2627
原创 Android HAL 之HIDL 的hello world 实现
从事Android BSP开发一年有余,都是在驱动上的工作,每每涉及HAL层面的工作,总是“望而却步”却又心有不甘。前期系统性的学习了一些C++(记录整理后补上)后,再反过来看HAL相关的code,稍有熟悉感。趁热打铁,小试牛刀,尝试一下HIDL 的hal。平台介绍:firefly RK 3399 pc pro, 系统是Android10。第一步:创建文件夹# mkdir -p hardware/interfaces/hidltest/1.0第二步:新建 .hal 文件# touch
2022-04-06 21:11:32
3614
1
原创 USB 设备驱动之设备接入梳理(六)
话说上一章,介绍了host获取设备描述符的过程,主要的思路就是先获取9 bytes,从这9 bytes中获取配置描述符的长度,然后一次性获取全部的配置描述符,配置描述符其实是配置描述符信息 + 端口描述符信息的总和,在设备内存中的分布如下图所示。有些设备可能不只一个配置描述符(业界称之为:符合设备),也同样是这样的分布。 获取了配置描述符后,对其进行解析。static int usb_parse_configuration(struct usb_device *d...
2022-03-24 15:03:53
576
原创 海思3518E系列之sample代码的阅读记录
基于海思3518E平台,做实验学习和实践;从sample_venc.c开始,因为在板子上跑的就是sample_venc,并抓取到图像。对于一些关键字的定义:typedef unsigned char HI_U8;typedef unsigned short HI_U16;typedef unsigned int HI_U32;typedef signed char HI_S8;typedef short
2021-08-17 23:30:00
189
原创 USB 设备驱动之设备接入梳理(五)
继上一步获取到设备描述符之后,判断如果是HUB设备,则对其进行设置。 if (udev->descriptor.bDeviceClass == USB_CLASS_HUB && udev->bus_mA <= unit_load) { u16 devstat; status = usb_...
2021-05-20 16:13:58
856
原创 USB 设备驱动之设备接入梳理(四)
static inthub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1, int retry_counter){ struct usb_device *hdev = hub->hdev; struct usb_hcd *hcd = bus_to_hcd(hdev->bus); int retries, operations, retval, i; unsigned delay = H.
2020-12-20 12:01:08
999
原创 USB 设备驱动之设备接入梳理_hub_port_connect()函数(三)
hub_port_connect()函数断开该端口设备的连接。 if (udev) { if (hcd->usb_phy && !hdev->parent) usb_phy_notify_disconnect(hcd->usb_phy, udev->speed); usb_disconnect(&port_dev->child); }消除抖动,接入或拔出时,会有物理抖动,导致状态不稳定,所以需要消抖。if (!(po
2020-12-20 11:08:35
5351
1
原创 USB 设备驱动之设备接入梳理(二)
USB提供了一套自顶向下的识别方法,从hub_event出发,检查是否真的有端口发生了改变,如果坐实是port被触发了,则进入port_event。先去获取hub的状态if (hub_port_status(hub, port1, &portstatus, &portchange) < 0) return;最终也是调用get_port_stats()函数去获得想要的状态,hub也是一类usb设备,static int get_port_status(struct
2020-11-26 22:01:24
2593
原创 USB 设备驱动之设备接入梳理(一)
hub_event()的前世今生缘起 usb_hub_init()主要是注册驱动和创建工作队列注册hub驱动:if(usb_register(&hub_driver)<0){printk(KERN_ERR"%s:can'tregisterhubdriver\n",usbcore_name);return-1;}这里引入usb_driver 结构体,先看看hub是如何初始化的...
2020-11-25 22:27:19
1829
原创 USB设备的枚举过程分析——数据结构先行
USB枚举是host端为了配置(加载合适的驱动)device进行的一个重要配置,如果枚举成功,那么设备正常工作的可能性约为90%,是USB驱动程序中重要的一项配置。主要进行的操作就是获取配置描述符,解析配置描述符、解析端口描述符;简而言之就是从device端获取device性能和配置。 先介绍一下枚举过程中涉及的结构体和成员:第一个 usb 配置描述符struct usb_config_descriptor { __u8 bLength; ...
2020-11-23 23:41:44
596
原创 usb转串口——u_serial.c_2
将数据送到tty层,由tty继续处理,数据在req的buffer里面。static void gs_rx_push(unsigned long _port){ struct gs_port *port = (void *)_port; struct tty_struct *tty; struct list_head *queue = &port->read_queue; bool disconnect = false; bool do_push = fa...
2020-11-23 21:50:48
718
原创 usb转串口——u_serial.c_1
static int gs_buf_alloc(struct gs_buf *gb, unsigned size){ gb->buf_buf = kmalloc(size, GFP_KERNEL); if (gb->buf_buf == NULL) return -ENOMEM; gb->buf_size = size; gb->buf_put = gb->buf_buf; gb->buf_get = gb->buf_buf; return .
2020-11-19 23:31:57
753
原创 yocto 使用记录
基于 NXP imx6 平台搭建Qt5 BSP。1. NXP imx6 yocto 编译 编译文件系统: MACHINE=xxx(目标板名字) DISTRO=fslc-framebuffer . setup-environment build_fb(目标文件夹) bitbake fsl-image-qt5编译后生成的 镜像位于build_fb/tmp/deploy/images/qt 交叉编译工具链生成 MACHINE=xxx(目标板名字) D...
2020-07-14 11:55:04
662
原创 scp + expect 实现全自动传送文件
嵌入式工作中总会有各种需求,比如这次,客户希望在板子上实现scp免确认,直接传送文件。那是经过一番折腾,可算是实现了,前因后果,且看下面慢慢道来。 scp 工作模式 ,当用scp 传送文件时,首次总会让确认$ scp vimrc xxx@192.168.9.250:~The authenticity of host '192.168.9.250 (192.168.9.250)' can't be established.ECDSA key fingerpr...
2020-05-10 11:57:14
1398
原创 Led驱动架构理解
作为一个驱动工程师,每每遇到问题,总是抓耳挠腮,查找许久。是否有一些本质的特性,能让工作变得轻松? 如果有,那可能是对驱动本质的理解,对器件工作特性的熟悉,首先了解本质基于2.6.3内核的led驱动框架来分析,并记录。...
2020-04-25 15:44:45
765
原创 request_mem_region 实践
功能: 通过request_mem_region 和 ioremap,实现 led 驱动,led功能如前面《字符设备注册实例》代码示例#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/fs.h>#...
2020-04-18 08:31:03
1001
原创 驱动中动态内存申请(request_mem_region)
利用动态内存生气编写驱动,使得驱动的具有较强的移植性,内核中封装了一些函数以供驱动开发者使用,屏蔽了具体的细节。1. 动态获取内存的函数request_mem_region()#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name), ...
2020-04-15 07:46:39
4108
原创 字符设备注册实例
实验平台:s5pv210开发板 + kernel2.6功能:驱动三颗led,led1 led2,共用一个fops,led3单独使用一个fops。当open led1/led2 时,led1 和 led2 同时亮,open led3 时, led3亮;release 对应熄灭。#include <linux/module.h>#include <linux/kernel...
2020-04-08 07:40:59
161
原创 Linux驱动复习_字符设备的注册
1. 字符设备相关结构体include/linux/cdev.hstruct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned in...
2020-04-06 14:07:49
173
基于 linux kernel4.0 的qume 环境
2022-07-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人