Linux驱动
文章平均质量分 83
申小白
这个作者很懒,什么都没留下…
展开
-
linux 下ARC的中断机制
virq (Linux的irq), generic_handle_irq参数是irq号,这个是linux 中断号,irq_to_desc()根据irq号找到对应的struct irq_desc。然后调用irq_desc->handle_irq处理对应的中断, 会先调用idu_cascade_isr的中断处理函数(一级中断函数),这是一个idu提供的标准中断,linux 正常流程会先进入Start_kernel 函数, 然后进入Init_IRQ进行初始化,后面会进入Irqchip_init函数,原创 2023-02-01 17:36:37 · 821 阅读 · 1 评论 -
Linux 文件属性以及修改
Linux 文件属性Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。具体情况如下:通过 ls -lih 可以知道文件属性,具体形式如下:第一列:inode第二列:文件种类和权限;第三列: 硬链接个数;第四列: 属主;第五列:所归属的组;第六列:文件或目录的大小;第七列和第八列:最后访问或修改时间;第九列:文件名或目录名inode 的值是:10227361文件类型:文件类型是d,表示这是一个是目原创 2021-08-23 11:01:18 · 1848 阅读 · 0 评论 -
关于中断顶半部和底半部
在中断处理过程中需要考虑怎样在处理例程内完成耗时的任务。 一般来说,中断需要完成一定数量的工作,但中断处理例程又需要尽快结束而不能使中断阻塞的时间过长。这两个需求是相互矛盾的,怎么解决?Linux 给出了答案。 Linux(连同很多其他系统)通过将中断处理例程分成两个部分来解决这个问题。顶半部:是实际响应中断的例程,也就是用request_irq注册的中断例程,一般这个部分只会置起处理...原创 2018-05-24 07:00:07 · 601 阅读 · 0 评论 -
configure: error: no termcap library found--树莓派
树莓派安装gdb: 树莓派系统环境:4.9.80-v+ 注:这边的操作是直接在树莓派上进行的,没有使用交叉编译首先去官方网站下载gdb的源码包, wget http://ftp.gnu.org/gnu/gdb/ 我下载的gdb-7.8.tar.gz版本的源码包,解压开来,进入到源码包的根目录下。对于一个源码包,拿到手里首先要阅读的就是README,然后看一下INSTALL文件,这个文件...原创 2018-06-07 07:16:33 · 2194 阅读 · 0 评论 -
scatter/gather I/O
发散/汇聚映射 通用DMA框架还提供了一种特殊类型的流DMA映射机制–发散/汇聚映射。该机制允许一次为多个缓冲区创建DMA映射。其原型如下: int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction); 各参数含义如下:dev:设备数据结构...转载 2018-06-29 13:57:56 · 3663 阅读 · 0 评论 -
树莓派 camera学习
首先升级了树莓派系统并应用了最新的固件。可以输入以下命令来操作:sudoapt−getupdatesudoapt−getupdate sudo apt-get update sudo apt-get upgrade 运行树莓派配置工具来激活摄像头模块:$ sudo raspi-config 选中 Interfacing options,将camera 选为enable。之...原创 2018-06-10 17:47:55 · 629 阅读 · 0 评论 -
vim之函数跳转功能
vim之函数跳转功能很多人使用vim的时候, 会发现函数跳转的功能没有,怎么办?vim提供了强有力的函数跳转的插件功能!首先要安装ctags, 在linux下直接输入sudo apt-get install exuberant-ctags接着,在源文件目录树(这里是在~/linux/drivers/mmc/core/目录下)执行如下命令:ctags -R .即可在~/lin...原创 2018-07-23 07:23:58 · 11280 阅读 · 1 评论 -
如何在内核中重新编译某一个ko模块
例如:SDIO 模块1、用 lsmod 查看sdhci 相关的模块。2、rmmod sdhci-pci 和 sdhci3、make modules SUBDIRS=drivers/mmc4、find. -name *.ko 查找生成的.ko文件5、insmod sdhci-pci.ko 和sdhci.ko这样可以只是编译drivers/mmc 目录下的ko模块...原创 2018-10-31 10:29:55 · 1789 阅读 · 0 评论 -
Linux内核编译过程
准备工作硬件:笔记本系统: Ubuntu18.04下载内核1、先安装ubuntu18.04的系统。2、到内核官网下载最新的内核code: https://www.kernel.org/如图所示下载最新kernel 例如 Linux-4.19:3、将下载的内核 Linux-4.19 保存到 /usr/src/ 目录下: (/usr/src 一般就是...原创 2018-11-01 15:21:25 · 8844 阅读 · 0 评论 -
大端、小端转换
大端、小端转换http://oss.org.cn/kernel-book/ldd3/ch11s04.html小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在乎它操作的数据的字节序. 但是, 有时候一个驱动需要使用单个字节建立一个整型数或者相反, 或者它必须与一个要求一个...转载 2018-11-22 14:04:41 · 2900 阅读 · 0 评论 -
Linux下SDIO驱动架构分析
持续更新中…Linux下SDIO驱动架构分析最近在写一个SDIO的driver,参考了Linux下的SDIO driver这边做一个总结:首先是源码存放的位置,Linux中和驱动相关的代码放在/driver中,其中SDIO 相关的code 放在 /driver/mmc中注:这边需要提一下mmc是一种存储卡协议,EMMC 使用的就是mmc 协议,而sd 协议则是另一种协议(两者类似),由于历...原创 2019-01-19 08:41:25 · 3645 阅读 · 3 评论 -
Linux下命令行对磁盘测速
测试方式:使用dd指令,对磁盘进行连续写入,不使用内存缓冲区,每次写入8k的数据,总共写入20万次,产生1.6G大小的文件。测试指令:dd if=/dev/zero of=/data01/test.dbf bs=8k count=200000 conv=fdatasync正确的使用dd进行磁盘读写速度测试dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,...转载 2019-05-13 09:19:13 · 7054 阅读 · 0 评论 -
linux 中四种IO调度器
Linux 2.6 内核包含4个IO调度器,分别是Noop IO scheduler、Anticipatory IO scheduler、Deadline IO scheduler 与 CFQ IO scheduler。Noop IO scheduler 是一个简化的调度程序,它只作基本的合并与排序。Anticipatory IO scheduler是目前内核中默认的IO调度器,它拥有...原创 2018-05-28 11:03:29 · 3965 阅读 · 0 评论 -
Linux学习自旋锁,信号量
自旋锁实际上是一种忙等,对于自旋锁有两点需要注意一下: 1、当锁不可用时,CPU一直循环执行“测试并设置”(测试并设置:是原子性操作)该锁直到可用而取得该锁,CPU在自旋等待时不做任何有用的工作,只是进行等待。因此只有在占用锁的时间极短的情况下,使用自旋锁才是合理的。当临界区很大或有共享设备时,需要较长时间占用锁,使用自旋锁会降低系统的性能。 2、自旋锁可能导致系统死锁,引起这个问题常见的情况...翻译 2018-04-24 22:03:45 · 165 阅读 · 0 评论 -
C语言的标记化结构初始化语法
在看Linux driver时,发现code的中关于file_operations被初始化为如下形式: struct file_operations scull_fops ={ .owner = THIS_MODULE, .llseek = scull_llseek, .read = scull_read, .writ...原创 2018-03-23 22:34:41 · 499 阅读 · 0 评论 -
linux内核--container_of
最近学习了一下Container_of的使用,给大家分析一下code的实现:container_of的作用是,通过结构体中的成员,来获取结构体的地址,原理上很简单就是:结构成员的地址-其在结构体中的偏移量。 首先我们来看这第一行code,求结构体成员的地址:const typeof(((type *)0)->member) *__mptr = (ptr));这其实很简单...原创 2018-03-24 10:49:25 · 141 阅读 · 0 评论 -
vim 无法高亮显示的解决方案
打开/etc/vimrc(/etc/vim/vimrc不同版本,可能不一样)在文档最后添加下面内容:syntax on如图所示:我添加了高亮显示和显示行数syntax onset nu修改完成之后重启linux生效$ reboot还可以通过添加下面命令实现新功能"语法高亮syntax on"显示行号set nu"修改默认注释颜色hi...原创 2018-03-21 07:53:16 · 15149 阅读 · 0 评论 -
yum 和 apt-get 的比较
yum 与 apt-get 比较rpm 包和deb包是两种Linux系统下最常见的安装包格式,在安装一些软件或服务的时候免不了要和它们打交道。rpm包主要应用在RedHat系列包括 Fedora等发行版的Linux系统上,deb包主要应用于Debian系列包括现在比较流行的Ubuntu等发行版上。我们知道如果要安装现成的这两种包的话,安装rpm包的命令是“rpm -参数”,安装deb包的命...转载 2018-03-21 07:26:41 · 6306 阅读 · 0 评论 -
Tail 命令的学习
tail命令用于输入文件中的尾部内容。tail命令默认在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为“-”,则读取标准输入。注意:如果表示字节或行数的N值之前有一个”+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示1 048576(1M)。 ...转载 2018-03-21 07:03:46 · 135 阅读 · 0 评论 -
printk 打印级别学习
查看当前控制台的打印级别 cat /proc/sys/kernel/printk 4 4 1 7 其中第一个“4”表示内核打印函数printk的打印级别,只有级别比他高的信息才能在控制台上打印出来,既 0-3级别的信息修改打印 echo “新的打印级别 4 1 7” >/proc/sys/kernel/printk不够打印级别的信息会被写到日志中...转载 2018-03-20 07:50:44 · 1422 阅读 · 0 评论 -
内存分配---kmalloc
kmalloc 内存分配引擎是一个功能强大的工具,下面我们来讲解一下这个函数。 Kmalloc 函数分配内存时有几个特点: 1、获取内存空间时不会对内存空间进行清零,也就是说,分配给它的区域仍然保持着原有的数据。 2、它分配的区域在物理内存中也是连续的。3、kmalloc最常用的标志是GFP_KERNEL,它表示内存分配(最终总是调用get_free_pages来实现实际的分配,这也是G...原创 2018-03-11 18:44:52 · 4293 阅读 · 0 评论 -
wget命令 网络应用
wget命令用来从指定的URL下载文件。wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性,如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。 语法wget(选项)(参数)选项-a<日志文件>:在指定的日志文件中...转载 2018-03-16 07:35:44 · 358 阅读 · 0 评论 -
Linux 内核变更导致驱动经常出现的错误记录
1: error: CFLAGS was changed in xxx. Fix it to use ccflags-y。解决方法: export KBUILD_NOPEDANTIC=1解决方法: 修改Makefile中的 CFLAGS 为 EXTRA_CFLAGS 或 ccflags-y2: linux/config.h no found file or folder解决方法...原创 2018-04-04 06:55:09 · 3691 阅读 · 0 评论 -
linux学习---char设备结构
下图为字符设备驱动的结构框图,图中最重要就是:cdev结构体。本质上讲写Char驱动就是对cdev结构进行定义: 下面小白带你们到<linux/cdev.h>中看一下它的结构: cdev 中定义了六个成员,其中有三个需要我们自己定义。 第一个 struct module *owner /*所属模块*/, ; 这个很简单直接赋值为THIS_MODULE;接下来这两...原创 2018-04-17 07:59:45 · 493 阅读 · 0 评论 -
GCC 用法详解
gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。语法gcc(选项)(参数)选项-o:指定生成的输出文件;-E:仅执行编译预处理...转载 2018-05-01 21:44:11 · 3367 阅读 · 0 评论 -
主设备号与次设备号代码分析---MAJOR、MINOR
<linux/kdev.h>内容如下:#ifndef _LINUX_KDEV_T_H#define _LINUX_KDEV_T_H#ifdef __KERNEL__#define MINORBITS 20#define MINORMASK ((1U << MINORBITS) - 1)#define MAJOR(dev) ((unsigned int) ...原创 2018-03-23 20:58:43 · 3300 阅读 · 0 评论