Kernel之init相关[TOC] 主要记录一些整体的概念、框架和简单介绍,不涉及具体的原理和实现细节 背景在看驱动代码的时候经常会看到module_init、subsys_initcall等xxx_init相关的代码,以前只知道是该驱动最开始入口函数的地方,并没有深究到底层去,最近刚好又碰到,就想看看底层是什么样的,于是就有了此文。 xxx_init相关初始化函数这里主要列举了module_init和subsys_initcall相关实现,其他类似 subsys_initcall: C ifndefMODULE /.../ /不是模块时/ definesubsys_initcall(f...

Linux之系统调用1、背景在应用开发中,我们经常会去操作IO设备,文件,网络,内存等,基本上都是通过高级语音(C/C,JAVA等)提供的一些标准库或API去操作,那这些是怎么和操作系统联系在一起的呢?答案就是今天的主角–系统调用。 这里我们只讨论: 硬件:Arm64系统:Linux系统(Kernel-5.15-rc1)高级语言:C(glibc-2.34)模式:64位(即未定义CONFIG_COMPAT)2、什么是系统调用Linux系统分为内核态和用户态,两者是相互隔离的。为了防止各种应用程序可能对系统资源的破坏,用户态的应用程序是没有权限直接去访问系统资源的,当需要访问时,就需要通过系统调...

问题背景Kernel:v5.4.131ACPI有SPCR表最近遇到一个问题:单用户模式,arm64平台,显示器进不了console,只显示部分log或只有光标在闪烁,而接的调试串口可以正常进console;MIPS和X86没有这个问题,可以正常在显示器进console 原因分析单用户模式下,首先看下ARM64和X86下dmesg关于console的差异: ARM64:LOG printk:console[ttyAMA0]enabled X86:LOG printk:console[tty0]enabled 你会看到ARM64下面使用串口为首选console,而X86是tty0。 .....

一个静态全局变量初始化引发的讨论背景 最近在提交的一个补丁,引发了一个静态全局变量初始化的讨论,主要还是理论基础不够扎实,特此记录 具体的情况是这样的:在一个补丁中,我定义了一个静态的全局变量,来存储启动参数传过来的值。开始补丁中的这部分是这样的: staticboolalc269_restore_verbs=false; 但使用补丁检查工具检查时,报如下的错误: ./scripts/checkpatch.pl0001-xxx.patch ERROR:donotinitialisestaticstofalse 后面就在提交补丁的时候,把这个初值去掉了,然后在群里引起了一阵讨论。 通过...

wap相关概念zram 内核文档:Documentation/admin-guide/blockdev/zram.rst    zram:CompressedRAMbasedblockdevices   ThezrammodulecreatesRAMbasedblockdevicesnamed/dev/zram   (=0,1,…).Pageswrittentothesedisksarecompressedandstored   inmemoryitself.Thesed...

使用 都是通过/dev/watchdog设备节点来操作使用通过命令 写入除大写字母‘V’外的任意字符,开启看门狗,每44秒内需要写入一次(喂狗)echoA>/dev/watchdog开启看门狗,并且内核会每隔22秒自动喂一次狗echoV>/dev/watchdog 通过应用程序 示例如下: include<stdio.h> include<stdlib.h> include<unistd.h> include<fcntl.h> intmain(void) { /通过open来启动watchdog/ intfd=open("/de...

背景 以前业余用nRF52832做了个物联网小项目(蓝牙微微网),做了些相关的调试记录nRF52832寄存器类型   Task:任务寄存器,可以由程序或事件触发  Event:事件寄存器,事件可以产生中断和触发任务  Register:普通寄存器,和一般单片机的寄存器一样 JlinkKeil keil5带的驱动过高为v6.16,手头上的jlink固件为V8,所以要下载4.9的驱动,最后用的是V6.12j,可以在jlink官网上下载。替换MDK(MDK524)安装目录下的Segger文件夹, 报Clone,重刷jlink的V8固件,...

背景及问题 最近在从低版本的内核向高版本的内核移植驱动,碰到了如下类似的报错: error:thisstatementmayfallthrough[-Werror=implicit-fallthrough=] 是与fallthrough相关的,查看代码,发现以前用的是: /fallthrough/ 新版本的好像不行了,改为下面的就OK了: fallthrough; 关于fallthrough fallthrough属性主要用于switch语句中 如果当前case分支中不加break,便会..... 作者:Shell

背景 最近在用docker搭个开发环境,参照的是之前记录的那个笔记:Docker相关 发现在拉取镜像的时候有点问题,即使用如下命令 dockerpullubuntu:18.04 报错:   “net/http:TLShandshaketimeout” 这个主要是因为docker默认镜像拉取地址为国外仓库,会存在网络上的各种问题,你懂的解决 只需要将拉取地址换为国内容器镜像仓库即可,这里使用阿里云的 阿里云需要自己创建自己独有的容器镜像加速器地址,具体步骤如下:   获取加速器地址 ....... 作者:Shell

电量计驱动的简易框架背景最近调试了一个电量计的问题,顺便把电量计驱动的框架简单梳理了一下 Kernel:5.15以cw2015电量计的驱动为例整体框架代码主要位于:drivers/power/supply/,powersupplyclass的实现,具体的电量计、充电IC等设备驱动都在此目录下 整体框架大致如下: 作者:Shell

btmon获取hci数据流程背景最近在看蓝牙相关的驱动代码,追到hci接收数据处理函数hci_rx_work()(net/bluetooth/hci_core.c),瞄到下面一段代码: C ... while((skb=skb_dequeue(&hdev->rx_q))){ /Sendcopytomonitor/ hci_send_to_monitor(hdev,skb); ... } 在hci发送数据的处理函数hci_send_frame()中也有类似的代码片段: C ... /Timestamp/ __net_timestamp(skb);/Sendcopytomon...

Kernel之通知链背景最近在调触摸屏,看代码时偶然看到了通知链相关的代码,加上之前刚好了解了一点通知链相关的东东,所以特此记录下。在触摸屏驱动中的主要功能就是在开关屏的时候通知TP进行resume和suspend操作,大致的伪代码如下,以我看的elan的TP驱动为例: C ... /通知链的事件回调函数,收到通知TP进行resume和suspend操作/ staticintfb_notifier_callback(structnotifier_blockself, unsignedlongevent,voiddata) { structfb_eventevdata=data; intbl...

SPI接口的ADC驱动调试背景最近在学习IIO子系统,顺带调试了个SPI接口的ADC驱动,所以在这简单记录下。这里只简单介绍了适配一个简单SPI接口ADC驱动的流程,不过多深入框架子系统,更多关于IIO子系统的介绍,请见下一篇: 驱动开发dtsdts主要修改或新增以下几点: spimaster控制器相关配置spi设备节点配置引脚复用配置如spi节点配置例子: DTS &spi0{ status="okay"; num-cs=<1>;/Totalnumberofchipselects/aaa:aaa@0{ status="okay"; reg=<0>;/Chi...

fb的notifier背景最近调试了一个BUG:一个平板使用hall传感器检测键盘保护套的开合,但是发现有时候合上保护套时,屏幕并没有关闭。 最后发现是CONFIG_FB=y配置没打开,导致hall传感器驱动里的fb的notifier没起作用,从而使获取的suspend/resume的状态异常,具体的细节不在这详述了,这里主要想扩展并记录下这个fb的notifier。 使用有时候,我们需要监听显示屏的一些事件,根据事件的状态来进行一些操作,比如常见的关闭显示屏时,触摸屏进入休眠等等 确认内核配置确认已打开CONFIG_FB_NOTIFY配置,只要CONFIG_FB打开默认就打开了CONFIG...

Kconfig相关 背景 以前准备写一下Linux内核里的Kconfig,但一直迟迟没有动手,最近在看Openharmony相关的东西,发现它也可以通过Kconfig和Kconfiglib进行可视化配置,所以想借此机会在这一起记录一下 作用 define配置宏主要用来使能/关闭代码,如下面: defineCONFIG_TEST_ENABLE ifdefCONFIG_TEST_ENABLE ......... endif 或来定义配置参数,如下: defineCONFIG_TEST_SHOW_STRING"Test123" defineCONFIG_TEST_SHOW_INT(123)...

OpenHarmony基于HDF简单驱动开发实例 背景 OpenHarmony-3.0-LTS qemu_small_system_demo liteos_a qemu 添加配置 device/qemu/arm_virt/liteos_a/hdf_config/device_info/device_info.hcs device_info新增: sample_host::host{ hostName="sample_host"; sample_device::device{ device0::deviceNode{ policy=2; priority=100; preload=1; ...

Linux之PWM风扇驱动 背景 该驱动主要是用于PWM模块去驱动散热风扇,使用通用的PWM接口,只要主控Soc的PWM模块使用的是标准通用的PWM框架,则可以适用于任何主控Soc,与具体的硬件无关。 用户空间接口 驱动程序给用户空间提供了相应hwmon的sysfs接口: /sys/class/hwmon/hwmon-x/,主要是对PWM的读写操作和风扇转速的读操作: C staticintpwm_fan_write(structdevicedev,enumhwmon_sensor_typestype, u32attr,intchannel,longval) { struc...

Linux之IR驱动 背景 在光谱中波长自760nm至400um的电磁波称为红外线,它是一种不可见光。红外遥控成本很低,以前广泛应用在电视,空调等电器的控制上面,现在随着蓝牙遥控器慢慢普及,红外遥控越来越少,但在某些场景,还保留着红外通信 红外属于media子系统里面的rc(remotecontrol)模块,所以相关驱动代码目录为 drivers/media/rc/ 相关内核文档: Documentation/devicetree/bindings/media/gpio-ir-receiver.txt Documentation/devicetree/bindings/me...

背景 在网上用9.9淘的一块ESP32-C3(RISC-V)的小开发板上,用的CH343的USB转串口。最近打算学习用Rust开发ESP32-C3,在Ubuntu上搭建开发环境的时候发现,Ubuntu20.04上默认使用的是CDC-ACM驱动,即生成的节点为/dev/ttyACM0,但是用Rust开发ESP32-C3,需要使用VCP驱动,于是在网上找到了官方(WCH-南京沁恒)的一份Linux驱动源码: 里面的文档也说明了使用CDC-ACM驱动的一些局限性: TheCDC-ACMdriverhaslimitedcapabilitiestocontrolspecificdevices.Thi...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~