Linux
cookiesmm
努力努力,继续努力
展开
-
GPIO sysfs接口配置GPIO管脚,GPIO测试中断驱动步骤
如果一个gpio管脚可能并不需要这么麻烦,因为一时间只可能有一个管脚的中断,但是我当时写的是可以同时支持配置3个gpio管脚,因此我觉得比较麻烦,就没有用锁,而是直接在中断处理函数,在函数里对中断号进行一些处理,判断对应的中断是否来源此时正在去使能的中断号,同时enable_irq之前也做了判断。之前是写过一个测试驱动,在加载驱动的时候,是可以配置哪一个gpio管脚、并且可以配置gpio中断、输入输出方向,是否中断屏蔽,甚至还有去毛刺的功能,可通过加载驱动配置对应的寄存器实现。原创 2024-03-19 16:04:33 · 860 阅读 · 0 评论 -
Linux的kernel command line
操作系统启动日志搜索kernel command line可查询command line,可查询grub里的启动命令的一些启动参数。原创 2023-11-17 17:23:12 · 67 阅读 · 0 评论 -
dmidecode
dmidecode可以通过DMI去获取到主机的硬件信息。例如,查看BIOS的信息。原创 2024-03-15 15:12:36 · 321 阅读 · 0 评论 -
SPI开源工具
(2)加载spidev.ko的bufsiz(缓存)默认是4096个字节,这个大小确实会影响spi的传输,我尝试过加载驱动的时候增大,timeout就不会出现了,但是这个大小也是有限制的,我理解应该是不能超过你的可用内存大小,但是具体是多少就不知道了。2、spidev_test是一个用户态工具,源码在linux已开源,通过/dev/下生成的spidev节点,系统调用内核的接口去实现spi的通信。(3)通过参数指定和物理环回这两个方法通过spidev_test命令输出的结果是不一样的。原创 2024-03-15 17:37:25 · 485 阅读 · 0 评论 -
IOMUX实现管脚切换
如图所示,芯片内部集成各个模式,通过IOMUX实现管理,跟GPIO的pinmux是类似的,IOMUX是通过配置对应寄存器不同的值切换不同的模式,根据不同的模块协议去发送对应的脉冲模拟对应的模块。对外只有一个pad引脚(真实可见的)。IOMUX的作用就是可以节省芯片资源,通过一个管脚实现多个低速总线模块的功能,甚至还能解决I2C挂死的问题(具体可参考我I2C防挂死方案的博客)。原创 2023-12-11 11:19:50 · 185 阅读 · 0 评论 -
USB协议学习笔记
内核中使用结构 struct usb_host_endpoint 来描述,该结构包含真是的端点信息在另一个结构中(struct usb_endpoint_descriptor)每个USB设备都必须有一个控制端点(端点0),每个端点的方向是固定且是单向的(除了端点0)。主机到从机为OUT端点,从机到主机为IN端点。Linux提供了一个子系统叫USB核,便于驱动与USB核的交互。USB通信的基本方式就是端点,主机跟端点的数据传输就是管道(pipe)。接口(interface)端点(endpoint)原创 2023-11-29 09:55:59 · 122 阅读 · 0 评论 -
GPIO sysfs接口
可通过GPIO sysfs接口去配置GPIO的方向,电平等值。原创 2023-11-24 17:51:53 · 38 阅读 · 0 评论 -
i2c-tools使用指导
i2cdetect、i2ctransfer工具使用指导。原创 2023-11-24 17:50:19 · 411 阅读 · 1 评论 -
GPIO power button
通过GPIO物理按键(按下按键),向CPLD发送信号,CPLD通知CPU触发中断,调用内核对应的中断处理函数实现shutdown。如实现方案有问题可提出建议,该博客只是个人参与过该方案的一个浅浅的理解,记录一下而已。GPIO实现power button功能。GPIO节点信息可通过BIOS上报。原创 2023-11-17 18:16:07 · 46 阅读 · 0 评论 -
USB协议学习
USB中文网 - USB技术开发交流 (usbzh.com)原创 2023-11-03 18:28:36 · 26 阅读 · 0 评论 -
I2C防挂死方案
只需要配置寄存器,可切换不同的模块,通过按照发送对应模块协议发送对应的脉冲去模拟对应的总线信号。1、CPU读取对端数据(如果是往对端写数据,总线是CPU拉着的,这时候CPU异常复位,总线也会跟着复位,触发不了挂死)在I2C总线通信的时候,如果对端器件没有复位端,在通信过程中CPU异常,导致数据没传输完,可能会造成类似挂死的状态。1、CPU异常复位可在使用i2ctransfer读取对端数据的时候,配置软复位寄存器触发挂死。5、该方案只是一个更优化的方案,是一个可选方案,并不是一个必须方案。原创 2023-11-03 18:20:47 · 477 阅读 · 1 评论 -
ftrace使用
spidev_test -s /dev/spidev0.1 (运行用户态工具,驱动调用到spidev_ioctl接口)7. 加卸载驱动,或者运行实例,让驱动程序走到要追踪的函数接口。2. 选用 function_graph 追踪器。1. 去到ftrace的目录。9. 查看trace日志。6. 打开ftrace。8. 关闭ftrace。3. 设置追踪的函数。4. 设置追踪的深度。原创 2023-09-04 15:18:49 · 49 阅读 · 1 评论 -
umount failed解决方法
检查修复文件系统:(fsck.ext4可检查和修复文件系统的完整性,坏块,丢失的链路,无效的inode等问题)当卸载文件系统失败的时候,有可能是块设备的缓冲区没有清空导致的。解决方法:umount -l /mnt。-l可强行将现在文件系统的缓存写回设备。插拔u盘的时候,盘符是有可能改变的。原创 2023-08-29 23:53:56 · 680 阅读 · 1 评论 -
启linux操作系统的时候限制内存
可以在grub的启动命令后面加入mem=XXXM这个参数即可。原创 2023-08-29 23:44:56 · 73 阅读 · 1 评论 -
替换内核rpm包
重启系统。原创 2023-08-29 23:41:09 · 61 阅读 · 1 评论 -
yum源配置
yum源所在路径:原创 2023-08-29 23:34:49 · 27 阅读 · 1 评论 -
devmem: mmap: Operation not permitted报错解决方法之一
config文件中设置了CONFIG_STRICT_DEVMEM=n才能获得对整个memory的访问权限,在默认情况下,CONFIG_STRICT_DEVMEM=y,这也就是为什么有的寄存器可以配置,有的却配置不了的原因。1、在/kernel/arch/arm64/configs/目录下,找到CONFIG_STRICT_DEVMEM该配置项所在的文件并且把值修改成n,再编译一个内核替换掉环境上的内核,即可正常使用devmem工具。原创 2023-08-29 23:29:26 · 2058 阅读 · 1 评论 -
服务器配置samba账号
3、检查samba状态(输入命令后打印有enable和running)5、修改密码(输入两次密码,第二次重复确认)4、打开samba配置文件,添加用户。1、先确定服务器上是否有yum源。6、本地创建映射网络驱动器。-a后面指定的是用户名。原创 2023-08-29 23:01:05 · 479 阅读 · 1 评论 -
dump acpi DSDT表
可查看操作系统下所有的acpi表。dump dsdt表。原创 2023-08-29 20:34:15 · 159 阅读 · 1 评论 -
Linux指令
readelf 可查看ELF格式文件的工具,查看二进制可执行文件、共享库、目标文件等。可以显示ELF文件各种信息,包括文件头、节表、符号表、重定位表等。strings 可用于在二进制文件提取ASCII字符串。包含程序的信息、调试信息、错误信息等。ldconfig 可用于配置、更新共享库。原创 2023-08-28 17:06:46 · 12 阅读 · 0 评论 -
call trace定位方法之一
calltrace是内核Oops问题的一部分,它是内核在发生错误时输出的一段调用栈信息,用于帮助开发人员定位问题。calltrace一般都是软件导致的问题。calltrace是提醒出现这个问题的风险性,而不是等出现这个问题才报calltrace,所以并不是所有的calltrace都会导致系统挂死。导致calltrace的原因有很多,常见的有:踩空指针,访问不存在的地址空间,中断异常等。addr2line -r tpm_tis_spi.ko 0x32c(最后的参数就是算出来的实际的符号的地址)原创 2023-08-14 22:23:57 · 3660 阅读 · 0 评论 -
request_irq 请求一个普通中断
在Linux内核中,requset_irq函数用于请求中断处理程序(IRQ)服务。其中,irqflag参数用于指定中断处理程序的类型,可以是IRQF_SHARED、IRQF_PROBE、IRQF_DISABLED、IRQF_SAMPLE_RANDOM等。例如GPIO,irqflag参数也可以等于GPIO的管脚的中断触发模式(rising、falling、both、high、low)。当irqflag参数为0时,表示请求的中断处理程序是一个普通的中断处理程序,没有特殊的标志或属性。原创 2023-08-14 21:31:36 · 106 阅读 · 0 评论 -
kill -9 杀不掉进程解决方法
当进程进入内核态的时候,通常会关闭中断(为了保证内核代码的原子性和可靠性),也会屏蔽所有的信号(防止信号处理程序在内核执行期间被调用,否则会导致不可预期的结果),包括SIGKIL,所以这个时候回使用kill -9发起的信号也一样会被屏蔽。但是信号会被记录在进程的信号挂起队列,进程切换回用户态的时会立即触发信号处理程序。在Linux中当你用kill命令向进程发送信号,并不是杀死的意思,-9表示无条件退出,但由进程自行决定是否退出,这就是为什么kill -9 终止不了系统进程和守护进程的原因。原创 2023-08-14 21:19:46 · 4420 阅读 · 0 评论