2 Gick

尚未进行身份认证

暂无相关简介

等级
TA的排名 5k+

register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()函数的区别

https://blog.csdn.net/welbell_uplooking/article/details/83654312

2019-11-17 15:25:00

Linux驱动加载后kernel panic的oops信息分析

kernel panic表示Linuxkernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息。首先看一下出错的kernel panic 现象,下面是一个kernel panic的出错log:如上崩溃信息,可知发生崩溃的函数为proslic_api_char_dev_init函数,偏移为0xf4的位置...

2019-11-14 09:27:27

class_create() 、class_create()详解

在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/dev目录下创建相应设备节点,并在卸载模块时删除该节点,当然前提条件是用户空间移植了udev。内核中定义了struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_cre...

2019-11-07 19:54:35

udev 和 mdev 总结

关于udev和mdev之间的区别与联系我发现自己现在还没有把它完整的给区分开来和联系起来.设备文件系统有devfs,mdev,udevmdev是udev的简化版本,是busybox中所带的程序,最适合用在嵌入式系统,而udev一般用在PC上的linux中,相对mdev来说要复杂些,devfs是2.4内核引入的,而在2.6内核中却被udev所替代,他们有着共同的优点,只是de...

2019-11-07 19:41:21

linux内核sysfs详解

https://blog.csdn.net/skyflying2012/article/details/11783847

2019-11-03 14:50:34

platform_driver_register( )过程追踪

以下代码源于linux3.1.9。platform_driver_register( ) 是内核中非常著名的函数 。platform_driver_register( )负责注册平台驱动程序,如果在内核中找到了使用驱动程序的设备,调用probe( )。刨去参数检查、错误处理,platform_driver_register的主要过程如下:。。。{ 。。。 retur...

2019-09-28 14:59:08

Linux kernel debug技巧----开启DEBUG选项

kernel的source code中有很多使用pr_debug/dev_dbg输出的日志信息(例如device tree解析的代码,drivers/of/fdt.c)。默认情况下,kernel不会将这些日志输出到控制台上,比如dev_dbg定义如下:#if defined(CONFIG_DYNAMIC_DEBUG)#define dev_dbg(dev, format, ...) ...

2019-09-25 20:23:32

Linux 下C语言获取文件大小

Linux 下C语言获取文件大小C语言是一种比较底层的语言,有时在其他语言中很容易操作的事情,在c语言中就比较麻烦,例如获取一个文件的大小。Java中File类有个length函数,Python中os.path包中有个getsize函数,C语言中却没有直接对应的函数获取文件大小。 目前,网上有一种流传很广的方法,读取文件到内存,然后跳转到文件末尾,查看跳转的长度。代码如下:...

2019-09-18 11:18:12

perl子程序详解

定义子程序:使用关键字sub,例如sub marine{$n+=1;print "Hello,sailor number $n!\n";}子程序可以定义在程序的任意位置,如果定义了两个重名的子程序,后面的会覆盖掉前面的可以在子程序中使用任何全局变量调用子程序:可以在任意表达式中使用子程序名(前面加上&)来调用,如&mari...

2019-09-11 11:36:47

用户层和内核交互小方法

proc_create的使用方法proc文件系统是个有用的东东。创建一个proc虚拟文件,应用层通过读写该文件,即可实现与内核的交互。proc虚拟文件是如何创建的呢?先看看比较简单的,创建proc文件夹。调用以下函数,即可实现proc文件夹的创建:struct proc_dir_entry *proc_mkdir(const char *name, struct proc_dir_...

2019-09-11 09:32:05

高通平台电源管理regulator介绍

1. 前期参考资料文档链接: 1).https://blog.csdn.net/longwang155069/article/details/53129378 2).https://blog.csdn.net/longwang155069/article/details/531614682. 高通sdx20平台上电后check regulator如下,一...

2019-08-21 10:23:30

linux内核kallsyms机制分析

一、前言 Linux内核是一个整体结构,而模块是插入到内核中的插件。尽管内核不是一个可安装模块,但为了方便起见,Linux把内核也看作一个模块。那么模块与模块之间如何进行交互呢,一种常用的方法就是共享变量和函数。但并不是模块中的每个变量和函数都能被共享,内核只把各个模块中主要的变量和函数放在一个特定的区段,这些变量和函数就统称为符号。 因此,内核也有一个module结构,叫做kernel...

2019-08-18 17:02:02

I2C总线时序以及ACK和NACK(NAK)

额外资料:https://www.jianshu.com/p/ded5a26bf3aa关于i2c的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都要求在接收到每一个字节后产生一个响应。因此,the master device 必须产生一个额外的时钟脉冲(第九个脉冲)用以和这个响应位相关联。在这个脉冲期间,发出响应的从设备必须将SDA拉低并在时钟脉冲的高电平期间保持住。...

2019-08-17 14:13:58

内核调试 /proc/kmsg 和 dmesg

dmesg 打印内核启动过程的所有信息,/proc/kmsg也是打印内核的信息, 但是与dmesg 有不同, 第一次执行/proc/kmsg 打印到目前位置的所有内核信息,再次执行/proc/kmsg,不打印打印过了的信息,打印第一次执行之后的信息,下面举个例子:第一次执行dmesg打印:ABC第一次执行/proc/kmsg打印:ABC第二次执行dmes...

2019-08-09 14:54:53

高通uart调试总结

配置驱动选项1.1 首先通过原理图确定其串口号,比如UART1、UART3_HS,同时查看该串口引脚是否有复用功能,比如用作SIM卡引脚。如果有复用,需要在设备树配置中取消复用功能的选项,然后选中串口功能,高通平台设备树路径为:kernel\msm-xxx\arch\arm\boot\dts\qcom或者kernel\msm-xxx\arch\arm64\boot\dts\qcom,这个路径视...

2019-07-09 16:27:53

STM32笔记

1.51单片机的供电电压为5V,STM32的供电电压一般为3.3V2.总线是指一个主设备下面挂接多个从设备,通过一条通信线进行通信。比如SPI总线、IIC总线。3.不同通信协议的UART:4.spi总线5.IIC驱动&应用6.晶体管(三极管)的作用:开关作用、放大作用。三级管是电流控制器件,场效应管是电压控制器件。7.发光二极管的正向导通电压为0.7...

2019-07-01 23:31:39

平台设备驱动框架二

从Linux 2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。通过bus(实质是一个链表)的.match来匹配,匹配上再调用drive中的probe函数:Linux platform drive...

2019-06-30 15:40:59

Linux电源管理-Linux regulator framework

1.kernel中有关regulator framework的介绍写的相当好(Documentation\power\regulator\*),先看官方文档。2.窝窝科技regulator介绍:http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html...

2019-06-28 16:37:29

从windows到linux的换行转换工具dos2unix

同学们也许知道,windows中的文本文件的换行符是"\r\n",而linux中是"\n"。由于换行符的不同,所以有的时候会发生一些莫名其妙的状况。至于具体什么状况我就不举栗子了,场景要说起来比较多。反正具体的情况是酱婶的:你在windows下写了一个文本文件:拷贝到linux下之后,用cat -v afile.txt查看文件,结果变成了酱紫:^M什么鬼??结果也许会演变成...

2019-06-20 08:57:39

led驱动程序框架

//led_app.c#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <stdlib.h>#include <sys/ioctl.h>#define LED_MAGIC 'L'#define LED_ON _IOW(LED_MAGIC, 0...

2019-06-16 16:05:53

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。