自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 问答 (1)
  • 收藏
  • 关注

原创 xhci 数据结构

在枚举USB设备的过程中,系统软件会在主机内存中为该设备分配设备上下文数据结构,并将其初始化为“0”。xHC保留对设备上下文的所有权,直到使用“禁用插槽命令”禁用了设备插槽为止。如果针对设备插槽的命令成功执行,则xHC将在生成Command Completion Event 之前更新输出插槽上下文,以反映其正在主动使用的参数值来管理设备。xHC报告的插槽状态标识设备的当前状态,并与USB规范中描述的USB设备状态紧密对应。作为设备上下文成员,xHC使用插槽上下文数据结构将设备参数的当前值报告给系统软件。

2024-04-08 17:36:40 565 2

转载 调试Linux系统挂起和休眠问题的最佳实践

调试Linux系统挂起和休眠问题的最佳实践

2023-09-24 22:47:22 161

原创 usb学习笔记

usb 驱动是基于usb core 的,设备插上之后,host 层自然会进行识别,设备驱动通过core层的接口操作设备,而不用直接面对usb硬件。对于应用层需要封装成一个usb 的设备。驱动是基于urb 数据进行操作的。

2023-09-11 22:17:29 351

原创 pcie 总结

补充:将基地址寄存器全部位写1,但是基地址寄存器有的位是只读的并且默认是0,所以可以通过先写全1再读取的方式来计算需要申请的地址空间大小;(5)在PCIE地址空间中申请1M大小的地址,将首地址写到基地址寄存器中,CPU分配PCI地址,写到PCI设备的BAR里;(4)则设备需要申请的内存地址空间是2的20次方,也就是1M空间;lspci -s 00:1f.6 -vvv 查看某个设备所有信息。(1)读取出基地址寄存器的值,知道设备要申请内存地址空间;dev为PCI设备的软件抽象,bar的取值为0 ~ 5。

2023-09-08 17:31:07 354

转载 在 Ubuntu 中调试和监控系统性能常用命令

top 命令可以用于实时监控进程的系统资源使用情况,比如 CPU、内存、I/O 等。pidstat 命令可以用于统计和显示进程的 CPU、内存、I/O 和上下文切换情况。mpstat 命令可以用于统计并显示 CPU 的使用情况。free 命令可以显示系统的内存使用情况,包括总内存量、已使用内存量、空闲内存量等。它可以列出打开的文件、套接字、管道等对象,并显示它们的状态信息。它可以显示进程的 PID、PPID、优先级、运行时间、CPU 占用率等信息。它可以显示当前系统的平均负载、活跃进程数、总进程数等信息。

2023-08-27 15:36:17 285

原创 cyclictest stress 工具 使用

1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。它可以测量由硬件、固件和操作系统引起的实时系统延迟2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。它可以测量由硬件、固件和操作系统引起的实时系统延迟下载地址安装依赖库。

2023-08-27 15:34:16 630

原创 单片机 fft参考文章

stm32

2023-06-25 16:12:54 68

原创 linux spi 发送数据时间过长

经过逻辑分析仪,测试发现是spi,片选引脚,没有及时拉起来,导致发送完数据,spi通信过程没有及时结束。通过修改对应驱动代码,将手动拉片选,修改为spi硬件拉片选,可以解决该问题。

2023-03-15 16:31:16 541

原创 Linux硬件定时器定时不准

linux 硬件定时器不准

2023-03-15 16:28:25 351

原创 linux phy yt8512工作不正常问题排查

linux phy 问题排查

2023-03-15 16:23:16 1331

原创 Linux 内核线程的创建与销毁

Linux 内核线程的创建与销毁

2023-03-15 15:55:34 199

原创 linux spi 应用ioctl 使用举例

经过测试可以使用的demo代码。

2023-03-15 15:29:23 1411

原创 编译使用动态库, 编译ko makefile

【代码】编译使用动态库。

2023-03-15 15:24:44 140

原创 i2c io拓展驱动代码

flags = I2C_M_RD, //标志,I2C_M_RD表示主机向主机读数据。.buf = data, //读取的数据存放的地址。.len = len, //要读取的数据的长度。\param[in] dev_addr:I2C设备地址。\param[in] dev_addr:I2C设备地址。.buf = ®_addr, //要写的数据的地址。.addr = dev_addr, //设备地址。.addr = dev_addr, //设备地址。

2023-03-15 14:44:43 345

原创 模拟spi代码

Linux 驱动 模拟 spi

2022-12-30 15:15:44 363

原创 Linux 内核打印寄存器

linux 内核打印寄存器打印寄存器地址,需要ioremap,例如:printk(" reg: 0x%x \n", readl(ioremap(0x120c0020, 1)));

2022-04-19 14:49:56 729 1

原创 mmc 子系统研究

目录结构,文件介绍mmc 子系统目录为主要包含3个部分的内容 card core host 3个目录的内容,作用分别为:card层:将sd卡实现为块设备core层:实现不同的协议和规范,为host层的驱动提供了接口函数host层:手动实现具体的mmc和sd设备下面将通过代码具体介绍,这几层是如何实现上述功能的块设备驱动介绍基本概念块设备与字符设备的区别:字符设备按照字符流的方式被有序访问,如串口和键盘就都属于字符设备,如果一个硬件设备是以字符流的方式访问的话,那就应该将它归于字符设备

2022-04-06 19:53:16 455

原创 linux tf 卡驱动理解

mmc 驱动框架梳理tf卡读取异常重启逻辑问题进展:a. 查找代码发现,在mmc_blk_issue_rw_rq函数中可以找到数据读取数据异常时的处理机制,其中部分代码如下: static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *rqc) { ... mmc_start_req(card->host, areq, (int *) &statu

2022-02-28 09:23:41 697

原创 linux可执行文件剪裁

linux可执行文件剪裁查看sdk的代码时发现,linux内核编译出来的ko文件,并没有直接只用,实际使用的ko文件,不内核编译出来的文件小了很多,查看编译脚本发现是使用arm-buildroot-linux-uclibcgnueabihf-strip,进行剪裁的,用法举例:find ./ -name "*.ko" | xargs arm-buildroot-linux-uclibcgnueabihf-strip --strip-unneeded 详细的内容,可以参看下面的博客https://

2022-02-09 14:32:49 725

原创 Linux 虚拟内存 交换空间

从查看内存开始通过proc查看#cat /proc/meminfo MemTotal: 220976 kBMemFree: 206188 kBMemAvailable: 205556 kBBuffers: 204 kBCached: 1412 kBSwapCached: 0 kBActive: 2232 kBInactive: 14

2021-11-18 20:07:01 1425

原创 i2c_designware i2c_designware.2: timeout waiting for bus ready

linux i2c 使用问题经过测试,多个线程同时使用i2c进行读写,会导致i2c崩溃打印如下:i2c_designware i2c_designware.2: timeout waiting for bus ready使用互斥锁,或其他同步方式可以解决改问题。使用互斥锁方式举例如下: pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&lock); /* i2c 读写操作 */

2021-11-18 13:57:16 1650

原创 i2c子系统深入理解(二)

i2c子系统整理的图参考上图,可以整理上看清i2c子系统的脉络框架。下面后部分代码跟踪,或补充各个细节的地方。代码补充这里是不使用设备树情况下,设备信息的代码 static struct i2c_board_info mini2440_i2c_devs[] __initdata = { { I2C_BOARD_INFO("24c08", 0x50), .platform_data = &am

2021-11-05 11:35:37 224

转载 linux驱动与应用程序进行交互

linux驱动与应用程序进行交互linux驱动里面的中断程序,里面可能需要通知应用程序,通常的做法是,使用fasync和netlink。使用fasync比较简单,是file_operation本来就支持的机制。一下,两篇博客有详细介绍,简单来说就是:在应用程序中,指定进程,和回调函数,在内核中断服务函数中,向应用程序发送SINGIO,通知应用程序。以下两篇博客介绍非常详细:https://blog.csdn.net/kingdragonfly120/article/details/10858647

2021-10-19 16:44:43 421

原创 驱动常见问题

使用misc子系统,写了一个pwm设备驱动,调用misc_register之后,dev目录下,无法看到设备解决办法:在rcS文件中加上mdev -s在kernel编译选项中增加选项

2021-10-18 16:24:53 117

原创 i2c子系统 深入理解(一)

关于i2c子系统从以下5个问题开始设备是如何通过vfs的接口调用到驱动的file_operation的一句话简单来讲就是,统一设备模型是基于kobject和ktype的。而统一设备模型最重要的就是设备和驱动,struct device和struct device_driver driver;struct device { ...struct kobject kobj;...}其中设备的结构体中就包含了kobject函数调用流程为:vfs---->sysfs---->kob

2021-10-05 00:13:54 362

原创 mini2440 pwm驱动测试代码

介绍使用混杂设备,移植网上别人的代码,修改头文件,修改编译错误,测试okpwm 驱动代码#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/poll.h>#include <linux/interru

2021-10-03 15:18:39 1666

原创 海思gpio代码研究

/* * Copyright (C) 2008, 2009 Provigent Ltd. * * Author: Baruch Siach <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published

2021-08-27 18:08:07 373

原创 uboot malloc失败问题记录

uboot malloc失败问题记录在uboot中使用malloc分配4K的内存数据,发现分配失败。判断是堆栈的空间太小啦。因此需要扩大内存,以海思的芯片为例,修改内存的方式为:./include/configs/hi3536c.h#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 128*1024)...

2021-08-23 16:38:48 417

原创 nand flash知识小节

基础概念以uboot打印的信息为例:SPI Nand(cs 0) ID: 0xc2 0x12 Name:"MX35LF1GE4AB"Block:128KB Page:2KB Chip:128MB*1 OOB:64B ECC:4bit/512 ECC provided by Flash Memory Controllerblock : 块大小,128Kb,每个块有64页page:页大小,2Koob:oob大小为,64字节,包含坏块标记,ecc校验数据ecc:类型为4bit/512,代表不同的

2021-08-12 15:20:26 1061

原创 jffs2,根文件系统为只读,问题解决

解决办法,在uboot里面指定根文件系统为,读写。增加rootfs rw。#define CONFIG_BOOTARGS “mem=42M console=ttyAMA0,1152 00 clk_ignore_unused root=/dev/mtdblock6 rootfs rw rootfstype=jffs2 \mtdparts=hi_sfc:512K(boot),256K(env),128K(flagA),128K(flagB),4M(kernelA),4M(kernelB),6M(root

2021-08-05 20:17:40 477

原创 linux中如何增加tag,传递参数

uboot中增加参数修改arch/arm/include/asm/setup.h将tag结构体增加新的内容/* 新增的参数类型 */#define ATAG_HWCFG 0x5441000a ***//关键字段,区分不同的tag***struct tag_env_hwcfg { char ac_env_hwcfg_info[1]; /* this is the minimum size */};struct tag { struct tag_header hdr; union {

2021-07-29 20:14:01 472

原创 ubi 分区 升级 主备

ubi 分区这边只记录实战,其他博客上写的很常见的内容就不介绍啦。通常介绍的ubi使用都是例如左图中的方法,也就是flash设备,并不是所有的空间都被格式化为ubi的分区。仍有其他文件系统直接在mtd分区之上。而右图中,所有的flash都被格式化为ubi分区。而在ubi之上,会有多个卷,这才是呈现给用户的分区。但是实际上只有一个mtd。也就是说用户看到的分区,不直接是mtd的分区。这样的好处是:UBI 系统提供了基于大的MTD 分区的坏块管理和擦写均衡基于 UBI Volume 的升级接口,由 U

2021-07-22 20:29:46 945 1

原创 linux tmpfs

简介tmpfs是一种虚拟内存文件系统,而不是块设备。是基于内存的文件系统,创建时不需要使用mkfs等初始化。由于都是在内存里面,所以重启之后,数据就会都没掉,但是在内存里面就有好处,速度快,因此现在有些Linux发行版本就默认将/tmp目录挂载tmpfs上。默认挂载的大小是物理内存的一半,也可以手动指定大小挂载直接使用mount命令就可以挂载mount tmpfs -t tmpfs -o size=2G -o mode=1777 /tmp开机自动挂载就需要写到/etc/fstabtmpfs

2021-07-20 17:15:12 532

原创 app操作flash

//通过mtd实现linux下只读文件系统中的flash应用层读写文件#include <unistd.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <sys/stat.h>#include <fcntl.h>#include <stdint.h>#include &lt

2021-07-16 20:35:40 222

原创 /proc用户和内核之间通信

常用函数 19 extern struct proc_dir_entry *proc_mkdir(const char *, struct proc_dir_entry *); 20 extern struct proc_dir_entry *proc_mkdir_data(const char *, umode_t, 21 struct proc_dir_entry *, void *); 30 static inline struct pr

2021-07-06 17:29:43 137

原创 字符设备驱动和平台设备驱动对比

gpio 字符设备驱动#define GPIO_OFT(x) ((x) - 0x56000000)#define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050)))#define GPFDAT (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000054)))/* 应用程序对设备文件/dev/leds执行open(...)时, * 就会调用s3c24

2021-07-06 11:10:50 501

转载 RK3399平台入门到精通系列讲解 - 总目录

RK3399平台入门到精通系列讲解 - 总目录https://xuesong.blog.csdn.net/article/details/109522945

2021-07-05 09:17:17 167

原创 hisi spi nand flash驱动理解

flash 驱动流程/* chip 函数需要自己实现,没办法由mtd提供 */static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, 785 struct s3c2410_nand_mtd *nmtd, 786 struct s3c2410_nand_set *set) 787 { 788 struct nand_chip *chip

2021-07-01 18:32:27 816

转载 module_platform_driver 与 module_init

module_platform_driver 与 module_init

2021-06-30 14:59:33 224

转载 UBIFS文件系统

  一、UBIFS文件系统简介 UBIFS(Unsorted Block Image File System)无序区块镜像文件系统是用于固态存储设备上,UBIFS在设计与性能上均较YAFFS2、JFFS2更适合MLC(Multi-Level Cell) NAND FLASH。例如:UBIFS支持凑数(write-back), 其写入的数据会被缓存起来, 直到有必要写入时才写到flash, 这样大大降低...

2021-06-25 17:29:40 2890

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除