- 2024-11-030-ARM Linux驱动开发-字符设备
0-ARMLinux驱动开发-字符设备一、字符设备概述Linux系统中,设备被分为字符设备、块设备和网络设备等。字符设备以字节流的方式进行数据传输,数据的访问是按顺序的,一个字节一个字节地进行读取和写入操作,没有缓冲区。例如,终端(/dev/tty)、鼠标、键盘等设备都是典型的字符设备
- 2024-11-030-ARM Linux驱动开发-字符设备
0-ARMLinux驱动开发-字符设备一、字符设备概述Linux系统中,设备被分为字符设备、块设备和网络设备等。字符设备以字节流的方式进行数据传输,数据的访问是按顺序的,一个字节一个字节地进行读取和写入操作,没有缓冲区。例如,终端(/dev/tty)、鼠标、键盘等设备都是典型的字符设备
- 2024-10-23内核printk函数格式化输出类型
参考:https://docs.kernel.org/translations/zh_CN/core-api/printk-formats.html printk支持多种格式化输出,例如%p用于打印指针地址,但打印出的地址是哈希过的。以避免安全问题。打印出的地址是为了防止泄露内核内存布局信息,哈希处理后的地址不仅提供了唯一标识,还在64位机器
- 2024-09-213.4.4 __ipipe_init_early之再论虚拟中断
点击查看系列文章=》 InterruptPipeline系列文章大纲-CSDN博客3.4.4__ipipe_init_early之再论虚拟中断 根据《3.4.1.2IPIPE对Linux中断号的改造》的分析,IPIPE引入的虚拟中断virtualinterrupt的概念,其中前10个虚拟中断本质上是利用SGI实现的IPI中断。IPIPE在
- 2024-09-17printk 串口打印级别
打印级别格式:printk(KERN_EMERG"1111111KERN_EMERG\n");printk("<0>1111111KERN_EMERG\n");*******************************************************************************1.基本解决方法(如果这种方法不行,结尾处说明另一种小众原因)用到的命令1>cat/proc/sy
- 2024-09-02Chapter4 Writing Your First Kernel Module - LKMs Part 1
Chapter1KernelWorkspaceSetupChapter2Buildingthe5.xLinuxKernelfromSource,Part1Chapter3Buildingthe5.xLinuxKernelfromSource,Part2Chapter4WritingYourFirstKernelModule–LKMsPart1Chapter5WritingYourFirstKernelModule–
- 2024-08-08Linux源码阅读笔记20-PCI设备驱动详解
PCI基础PCI总线为高性能局部总线,主要解决外部设备之间以及外部设备与主机之间高速数据传输。在数字图形、图像等处理,以及告诉实时数据采集与处理等队数据传输速率要求高的应用中,采用PCI总线进行数据传输。PCI规范能够实现32位并行数据传输,工作频率为33MHz或66MHz,最大吞吐率
- 2024-07-02Linux源码阅读笔记08-进程调度API系统调用案例分析
kthread_create_on_nodekthread_create_on_node函数功能:指定存储节点创建新内核线程。源码如下:操作实战#include<linux/module.h>#include<linux/pid.h>#include<linux/sched.h>#include<linux/kthread.h>#include<linux/wait.h>intMyThreadFunc(void*
- 2024-04-3021_FT5X06触摸驱动实验
FT5X06触摸驱动实验msleep函数msleep()函数:用于让内核的当前进程(线程)休眠指定的时间(以毫秒为单位)。#include<linux/delay.h>voidmsleep(unsignedintmsecs);示例msleep(1000);//休眠1秒电容屏触摸驱动实验在Linux下编写电容触摸屏驱动。我们自己写一个触摸芯片
- 2024-04-3018_内核定时器
内核定时器一.Linux内核定时器概念不同于单片机定时器,Linux内核定时器是一种基于未来时间点的计时方式,以当前时刻为启动的时间点,以未来的某一时刻为终止点。比如,现在是10点5分,我要定时5分钟,那么定时就是10点5分+5分钟=10点10分。这个和咱们的手机闹钟很类似。比如你要定一个第二
- 2024-04-3017_Linux中断
Linux中断1.什么是中断?CPU在正常运行期间,由外部或者内部引起的事件,让CPU停下当前正在运行的程序,转而去执行触发他的中断所对应的程序,这个就是中断。举例:我现在正在厨房做饭,突然电话响了,然后我关火去接电话,接完电话在回去开火继续做饭,这个过程就是中断的一个过程。在这个看似
- 2024-04-3016_ioctl接口
ioctl接口structfile_operations{ ...... long(*unlocked_ioctl)(structfile*,unsignedint,unsignedlong); ......};1.什么是unlocked_ioctl接口?unlocked_ioctl就是ioctl接口,但是功能和对应的系统调用均没有发生变化。2.unlocked_ioctl和read/write函
- 2024-04-27字符设备,write一直返回-1的问题
在学习linux设备驱动时遇到的问题,请求大佬指点:1、insmodchar_dev.ko 2、mknod/dev/mydevicec24003、./test write返回-1,内核没有调用的device_write函数。 char_dev.c#include<linux/module.h>#include<linux/fs.h>#include<linux/cdev.h>#include
- 2024-04-2515_pinctl和gpio子系统
pinctl和gpio子系统1.什么是pinctrl和gpio子系统? pinctrl子系统是用来设置引脚的复用关系和电气属性的,gpio子系统是当pinctrl子系统把引脚的复用关系设置为gpio功能以后就可以使用gpio子系统来操作引脚了,比如引脚的输入输出,高低电平等2.LinuxPinctrl子系统提供的功能是
- 2024-04-2514_Linux 设备树
一.什么是设备树?设备树是一种描述硬件资源的数据结构。它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。有了初步概念之后,我们再来一起探讨设备树的起源。二.设备树的由来要想了解为什么会有设备树,设备树是怎么来的,我们就要先来回顾一下在没有设备树之前
- 2024-04-2513_Platform 设备驱动
Platform设备驱动1.什么是平台总线模型?平台总线模型也叫platform总线模型。是Linux内核虚拟出来的一条总线,不是真实的导线。平台总线模型就是把原来的驱动C文件给分成了俩个C文件,一个是device.c,一个是driver.c把稳定不变的放在driver.c里面,需要变得就放在了device.c里面。2
- 2023-12-18jz2400向内核申请中断
/iqr_testirq_traditional/#include<linux/module.h>#include<linux/init.h>#include<linux/kernel.h>#include<linux/irq.h>#include<linux/interrupt.h>#include<linux/gpio.h>#include<linux/delay.h>#inc
- 2023-12-14linux kernel modify printk buf size
linuxkernelmodifyprintkbufsizeconfigureCONFIG_LOG_BUF_SHIFTmodifycode:wyk@ubuntu:~/soc/linux$gitdiffkernel/printk/printk.cdiff--gita/kernel/printk/printk.cb/kernel/printk/printk.cindexfd337bf9b..aaa98a8eb100644---a/kernel/printk/
- 2023-12-07How to get printk format specifiers right (如何正确使用printk格式说明符)(翻译 by chatgpt)
原文:https://www.kernel.org/doc/html/latest/core-api/printk-formats.html#printk-specifiers如何正确使用printk格式说明符整数类型如果变量是Type类型,则使用printk格式说明符:signedchar%d或%hhxunsignedchar%u或%xchar
- 2023-11-19Linux驱动开发 驱动程序的具体编写及出口入口函数解析,printk打印内核信息
(文章目录)前言本文将带大家学习驱动程序的具体编写及出口入口函数解析。一、出口函数入口函数解析每一个驱动程序都是含有出口函数和入口函数的,装载驱动的时候先调用入口函数,卸载驱动的时候则调用出口函数。入口出口函数的形式如下:static__initinthello_dev_init(void)
- 2023-11-09Kernel之debug调试信息
Kernel之debug调试信息背景平时我们在调试内核或驱动的时候,需要打开或增加调试信息,最常见的比如dev_dbg()、pr_debug()等以内核v5.15为例,我们先来看一下上面2个日志打印函数在内核里面的大致定义:dev_dbg()[include/linux/dev_printk.h]C#ifdefined(CONFIG_DYNAMIC_DEBUG)||
- 2023-10-06Linux系统中驱动入门设备树DTS(经典)
设备树(DTS:devicetreesource),字面意思就是一块电路板上设备如上图中CPU、DDR、I2C、GPIO、SPI等,按照树形结构描绘成的一棵树。按照策略和功能分离的思路,就是驱动代码(功能)和设备树DTS配置文件(策略)分开来进行设计,这样针对不同的电路板,Linux驱动代码就不用动了,只需要改改DTS就可以,DTS
- 2023-09-27linux中backport printk和front printk的区别
在Linux内核中,"backportprintk"和"frontprintk"都是用于记录内核消息和调试信息的机制,但它们的工作方式和使用场景有一些区别。"backportprintk"是一种在内核中记录消息和调试信息的机制,可以将这些信息输出到控制台、串口、网络等目标。它通常用于在内核启动过程中的早期阶段,
- 2023-09-25printk格式错误出panic
检查dmesg的时候发现有这么个panic,但是设备没有重启:[1691135418.681314]cpu-0(014C64B3:1635):ffff8000205d1e4b:3C0108001851AC04000118FF6BF08100*<....Q......k...*[1691135418.681317]cpu-0(014C64B3:1635):ffff8000205d1e5b:E7E7504E4700A9FB86F50001020
- 2023-09-19Android 10 设置kernel log level
有时候kernellog内容过多/过少影响我们分析问题,因此需要对kernellog进行设置。查看平台默认kernelloglevel$cat/proc/sys/kernel/printk6617kernlelog级别为6617关闭所有kernellog$echo"0617">proc/sys/kernel/printk //往printk文件写入“