![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux基础学习
Linux基础学习
raoxu_1154492168
这个作者很懒,什么都没留下…
展开
-
linux spi 发送数据时间过长
经过逻辑分析仪,测试发现是spi,片选引脚,没有及时拉起来,导致发送完数据,spi通信过程没有及时结束。通过修改对应驱动代码,将手动拉片选,修改为spi硬件拉片选,可以解决该问题。原创 2023-03-15 16:31:16 · 620 阅读 · 0 评论 -
linux phy yt8512工作不正常问题排查
linux phy 问题排查原创 2023-03-15 16:23:16 · 1525 阅读 · 0 评论 -
Linux 内核线程的创建与销毁
Linux 内核线程的创建与销毁原创 2023-03-15 15:55:34 · 215 阅读 · 0 评论 -
模拟spi代码
Linux 驱动 模拟 spi原创 2022-12-30 15:15:44 · 375 阅读 · 0 评论 -
Linux 内核打印寄存器
linux 内核打印寄存器打印寄存器地址,需要ioremap,例如:printk(" reg: 0x%x \n", readl(ioremap(0x120c0020, 1)));原创 2022-04-19 14:49:56 · 787 阅读 · 1 评论 -
mmc 子系统研究
目录结构,文件介绍mmc 子系统目录为主要包含3个部分的内容 card core host 3个目录的内容,作用分别为:card层:将sd卡实现为块设备core层:实现不同的协议和规范,为host层的驱动提供了接口函数host层:手动实现具体的mmc和sd设备下面将通过代码具体介绍,这几层是如何实现上述功能的块设备驱动介绍基本概念块设备与字符设备的区别:字符设备按照字符流的方式被有序访问,如串口和键盘就都属于字符设备,如果一个硬件设备是以字符流的方式访问的话,那就应该将它归于字符设备原创 2022-04-06 19:53:16 · 487 阅读 · 0 评论 -
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 · 753 阅读 · 0 评论 -
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 · 766 阅读 · 0 评论 -
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 · 1450 阅读 · 0 评论 -
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 · 1766 阅读 · 0 评论 -
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 · 242 阅读 · 0 评论 -
linux驱动与应用程序进行交互
linux驱动与应用程序进行交互linux驱动里面的中断程序,里面可能需要通知应用程序,通常的做法是,使用fasync和netlink。使用fasync比较简单,是file_operation本来就支持的机制。一下,两篇博客有详细介绍,简单来说就是:在应用程序中,指定进程,和回调函数,在内核中断服务函数中,向应用程序发送SINGIO,通知应用程序。以下两篇博客介绍非常详细:https://blog.csdn.net/kingdragonfly120/article/details/10858647转载 2021-10-19 16:44:43 · 440 阅读 · 0 评论 -
驱动常见问题
使用misc子系统,写了一个pwm设备驱动,调用misc_register之后,dev目录下,无法看到设备解决办法:在rcS文件中加上mdev -s在kernel编译选项中增加选项原创 2021-10-18 16:24:53 · 121 阅读 · 0 评论 -
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 · 395 阅读 · 0 评论 -
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 · 1679 阅读 · 0 评论 -
海思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 · 402 阅读 · 0 评论 -
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 · 441 阅读 · 0 评论 -
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 · 1158 阅读 · 0 评论 -
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 · 528 阅读 · 0 评论 -
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 · 506 阅读 · 0 评论 -
ubi 分区 升级 主备
ubi 分区这边只记录实战,其他博客上写的很常见的内容就不介绍啦。通常介绍的ubi使用都是例如左图中的方法,也就是flash设备,并不是所有的空间都被格式化为ubi的分区。仍有其他文件系统直接在mtd分区之上。而右图中,所有的flash都被格式化为ubi分区。而在ubi之上,会有多个卷,这才是呈现给用户的分区。但是实际上只有一个mtd。也就是说用户看到的分区,不直接是mtd的分区。这样的好处是:UBI 系统提供了基于大的MTD 分区的坏块管理和擦写均衡基于 UBI Volume 的升级接口,由 U原创 2021-07-22 20:29:46 · 997 阅读 · 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 · 558 阅读 · 0 评论 -
/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 · 145 阅读 · 0 评论 -
字符设备驱动和平台设备驱动对比
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 · 528 阅读 · 0 评论 -
RK3399平台入门到精通系列讲解 - 总目录
RK3399平台入门到精通系列讲解 - 总目录https://xuesong.blog.csdn.net/article/details/109522945转载 2021-07-05 09:17:17 · 179 阅读 · 0 评论 -
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 · 849 阅读 · 0 评论 -
module_platform_driver 与 module_init
module_platform_driver 与 module_init转载 2021-06-30 14:59:33 · 241 阅读 · 0 评论 -
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 · 2988 阅读 · 0 评论 -
linux lvm 原理使用
基本概念:PE (Physical Extend) 物理拓展PV (Physical Volume) 物理卷VG (Volume Group) 卷组LV (Logical Volume) 逻辑卷原理:为了方便,系统存储设备的扩容和缩容,文件系统不直接建立在,存储设备之上。而是通过逻辑卷的方式将存储设备统一管理起来。文件系统建立在逻辑卷之上。所有的资源通过卷组VG统一管理,LV可以从VG,获取或者释放资源,对应扩容和缩容。关系对应图:使用:以下文档有详细的命令操作:htt原创 2021-06-23 14:39:01 · 82 阅读 · 0 评论 -
linux 有待需要搞清楚的问题
linux里面reboot的过程原理是什么?以一种驱动为例,简述boot,kernel,用户态如何使用这个设备。原创 2021-06-17 20:49:18 · 70 阅读 · 0 评论 -
Linux文件系统理解
Linux文件系统理解Linux系统中文件系统的基本原理是比较简单的,简单的理解就是2次映射的过程。一次是根据文件名找到inode节点,第二次是根据inode节点找到文件存储数据的位置https://zhuanlan.zhihu.com/c_1070639237568786432...原创 2021-06-02 14:58:24 · 75 阅读 · 0 评论 -
uboot 环境变量存放在哪里,如何修改
问题 :如何找到saveenv,这个环境变量的数据是保存在那里的1. uboot 下搜索 saveenv(./common/env_eeprom.c:int saveenv(void)./common/env_nand.c:int nand_saveenv(void)./common/env_flash.c:int saveenv(void)./common/env_flash.c:int saveenv(void)2. 在uboot/common 目录下找,Makefile中加载了那个.c文原创 2021-05-31 10:35:52 · 5879 阅读 · 0 评论 -
制作根文件系统
经过验证,安装这篇文章的操作方式,可以制作根文件系统https://blog.csdn.net/LEON1741/article/details/54848842原创 2021-05-30 19:30:45 · 58 阅读 · 0 评论 -
linux /sys /dev 的理解
参考文章https://blog.csdn.net/zuodenghuakai/article/details/92668565https://blog.csdn.net/GCE7212201/article/details/53339699?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-ut原创 2021-05-23 22:49:37 · 325 阅读 · 0 评论 -
linux 设备树
问题是linux为什么需要引入设备树:http://www.bubuko.com/infodetail-2505401.html该文章,浅显易懂解决这个问题。为什么使用,一句话解释,就很简单:用户不能直接使用代码去设置设备信息,而是通过dts配置文件的方式,用户更改配置文件,由内核将配置文件解析为设备信息。这样内核中,就不会有很多的设备信息的代码,变成一份设备信息代码,多份配置信息文件。...原创 2021-05-12 18:33:26 · 51 阅读 · 0 评论 -
linux 文件系统的理解
linux 文件系统的理解使用df可以查看所有分区的挂在情况#df -TFilesystem Type 1K-blocks Used Available Use% Mounted on/dev/mtdblock5 squashfs 3904 3904 0 100% /devtmpfs devtmpfs 18544 0 18544 0% /de原创 2021-05-12 14:37:58 · 100 阅读 · 1 评论 -
uboot增加命令
分析源码首先从common/main.c里面开始分析:查看函数:void main_loop (void) {...run_command (s, 0);...这里会调用到run_command执行串口命令:int run_command (const char *cmd, int flag) { ...1360 /* Look原创 2021-05-05 13:00:53 · 423 阅读 · 0 评论 -
nand flash驱动调试学习
参考的知识博客nand flash学习原创 2021-04-30 14:39:04 · 283 阅读 · 0 评论 -
如何在linux下修改添加设备驱动
概述在linux下修改驱动有两种方式,一种是编译出.ko文件,通过insmod动态加载驱动程序。还有一种方式就就是直接将驱动编译进内核。最终达到的效果就是,可以在内核的配置菜单中,对我们添加的模块进行编译。过程背景知识:linux是采用,总线,设备,驱动的方式进行管理的。其中一个驱动可以对应多个设备。添加设备如果是linux3.0以上,支持设备树的:修改arch/arm/boot/dts 下面对应dts文件注意如果没有设备树,需要自己区填充i2c_board_info,添加设备的信息添加驱动原创 2021-04-28 19:02:50 · 1199 阅读 · 0 评论 -
ubuntu 常见问题
nfs: server 192.168.1.100 not responding, still trying 解决办法板子上的挂载命令有问题,按照一下修改:mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.199.142:/home/wxp/nfs_root /mntubuntu 重启nfs服务sudo /etc/init.d/nfs-kernel-server restart配置nfs服务配置nfs服务...原创 2021-04-25 20:40:19 · 103 阅读 · 0 评论