- 博客(96)
- 问答 (1)
- 收藏
- 关注
原创 usb学习笔记
usb 驱动是基于usb core 的,设备插上之后,host 层自然会进行识别,设备驱动通过core层的接口操作设备,而不用直接面对usb硬件。对于应用层需要封装成一个usb 的设备。驱动是基于urb 数据进行操作的。
2023-09-11 22:17:29 340
原创 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 320
转载 在 Ubuntu 中调试和监控系统性能常用命令
top 命令可以用于实时监控进程的系统资源使用情况,比如 CPU、内存、I/O 等。pidstat 命令可以用于统计和显示进程的 CPU、内存、I/O 和上下文切换情况。mpstat 命令可以用于统计并显示 CPU 的使用情况。free 命令可以显示系统的内存使用情况,包括总内存量、已使用内存量、空闲内存量等。它可以列出打开的文件、套接字、管道等对象,并显示它们的状态信息。它可以显示进程的 PID、PPID、优先级、运行时间、CPU 占用率等信息。它可以显示当前系统的平均负载、活跃进程数、总进程数等信息。
2023-08-27 15:36:17 246
原创 cyclictest stress 工具 使用
1. Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。它可以测量由硬件、固件和操作系统引起的实时系统延迟2.stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试Cyclictest 准确且重复地测量线程的预期唤醒时间与它实际唤醒的时间之间的差异,以提供有关系统延迟的统计数据。它可以测量由硬件、固件和操作系统引起的实时系统延迟下载地址安装依赖库。
2023-08-27 15:34:16 574
原创 linux spi 发送数据时间过长
经过逻辑分析仪,测试发现是spi,片选引脚,没有及时拉起来,导致发送完数据,spi通信过程没有及时结束。通过修改对应驱动代码,将手动拉片选,修改为spi硬件拉片选,可以解决该问题。
2023-03-15 16:31:16 499
原创 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 327
原创 Linux 内核打印寄存器
linux 内核打印寄存器打印寄存器地址,需要ioremap,例如:printk(" reg: 0x%x \n", readl(ioremap(0x120c0020, 1)));
2022-04-19 14:49:56 713 1
原创 mmc 子系统研究
目录结构,文件介绍mmc 子系统目录为主要包含3个部分的内容 card core host 3个目录的内容,作用分别为:card层:将sd卡实现为块设备core层:实现不同的协议和规范,为host层的驱动提供了接口函数host层:手动实现具体的mmc和sd设备下面将通过代码具体介绍,这几层是如何实现上述功能的块设备驱动介绍基本概念块设备与字符设备的区别:字符设备按照字符流的方式被有序访问,如串口和键盘就都属于字符设备,如果一个硬件设备是以字符流的方式访问的话,那就应该将它归于字符设备
2022-04-06 19:53:16 440
原创 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 682
原创 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 720
原创 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 1412
原创 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 1621
原创 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 222
转载 linux驱动与应用程序进行交互
linux驱动与应用程序进行交互linux驱动里面的中断程序,里面可能需要通知应用程序,通常的做法是,使用fasync和netlink。使用fasync比较简单,是file_operation本来就支持的机制。一下,两篇博客有详细介绍,简单来说就是:在应用程序中,指定进程,和回调函数,在内核中断服务函数中,向应用程序发送SINGIO,通知应用程序。以下两篇博客介绍非常详细:https://blog.csdn.net/kingdragonfly120/article/details/10858647
2021-10-19 16:44:43 417
原创 驱动常见问题
使用misc子系统,写了一个pwm设备驱动,调用misc_register之后,dev目录下,无法看到设备解决办法:在rcS文件中加上mdev -s在kernel编译选项中增加选项
2021-10-18 16:24:53 116
原创 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 357
原创 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 1665
原创 海思gpio代码研究
/* * Copyright (C) 2008, 2009 Provigent Ltd. * * Author: Baruch Siach <baruch@tkos.co.il> * * 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 365
原创 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 408
原创 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 1024
原创 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 467
原创 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 463
原创 ubi 分区 升级 主备
ubi 分区这边只记录实战,其他博客上写的很常见的内容就不介绍啦。通常介绍的ubi使用都是例如左图中的方法,也就是flash设备,并不是所有的空间都被格式化为ubi的分区。仍有其他文件系统直接在mtd分区之上。而右图中,所有的flash都被格式化为ubi分区。而在ubi之上,会有多个卷,这才是呈现给用户的分区。但是实际上只有一个mtd。也就是说用户看到的分区,不直接是mtd的分区。这样的好处是:UBI 系统提供了基于大的MTD 分区的坏块管理和擦写均衡基于 UBI Volume 的升级接口,由 U
2021-07-22 20:29:46 920 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 522
原创 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 <
2021-07-16 20:35:40 215
原创 /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 136
原创 字符设备驱动和平台设备驱动对比
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 490
转载 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 802
转载 module_platform_driver 与 module_init
module_platform_driver 与 module_init
2021-06-30 14:59:33 219
转载 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 2841
原创 linux lvm 原理使用
基本概念:PE (Physical Extend) 物理拓展PV (Physical Volume) 物理卷VG (Volume Group) 卷组LV (Logical Volume) 逻辑卷原理:为了方便,系统存储设备的扩容和缩容,文件系统不直接建立在,存储设备之上。而是通过逻辑卷的方式将存储设备统一管理起来。文件系统建立在逻辑卷之上。所有的资源通过卷组VG统一管理,LV可以从VG,获取或者释放资源,对应扩容和缩容。关系对应图:使用:以下文档有详细的命令操作:htt
2021-06-23 14:39:01 80
空空如也
mini2440无法挂fs_mini_mdev.yaffs2?
2021-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人