![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 驱动编程
文章平均质量分 88
liduxun
这个作者很懒,什么都没留下…
展开
-
kconfig与Makefile运行机制
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢?我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下转载 2014-08-22 09:50:52 · 1036 阅读 · 0 评论 -
嵌入式Linux内核I2C子系统详解
1.1 I2C总线知识1.1.1 I2C总线物理拓扑结构 I2C 总线在物理连接上非常简单,分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制,来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时,这两根线一般被上面所接的上拉电阻拉高,保持着高电平。1.1.2 I2C总线特征转载 2014-11-01 17:36:06 · 921 阅读 · 0 评论 -
device tree 介绍
1.device tree 用法介绍:http://devicetree.org/Device_Tree_Usage2.内核内关于device tree的文档 /Documentation/devicetree/原创 2015-12-29 17:36:53 · 528 阅读 · 0 评论 -
ARM Linux系统调用详细分析
文件:linux-2.6.30.4/arch/arm/kernel/entry-common.Slinux-2.6.30.4/arch/arm/kernel/calls.S在entry-common.S中包含了上次calls.S,这里简单分析前两次:第一次:在entry-common.S中:.equ NR_syscalls,0#define CALL(x) .equ原创 2015-08-31 00:39:18 · 8776 阅读 · 4 评论 -
spinlock与中断、抢占的关系
在kernel中,一个线程获得了spinlock,那么这个线程可以被interrupt吗?可以,spinlock 并没有关中断,貌似spinlock_irqsave 才关中断了。tips1:spin_lock_irqsave关中断后,为什么要再禁止抢占呢,不多余吗?static inline unsigned long __raw_spin_lock_irqsave(raw_spinl转载 2015-08-21 13:27:27 · 8649 阅读 · 0 评论 -
CPU流水线的探秘之旅
作为程序员,CPU 在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。 CPU 是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有 12 级流水线还是 18 级流水线,甚至是更深的 31 级流水线时,这到些都意味着什么呢? 应用程序通常会将 CPU 看作是黑盒子。程序中的指令按照顺序依次进入 CPU,执行完之后再按顺序依次从 CPU 中转载 2015-01-04 16:49:48 · 703 阅读 · 0 评论 -
cdev 与inode ,file_operations,kobject map的关系
本文所说的Inode是struct inode结构体,并不是在inode块中的inode结点。 Char Device Driver 相关数据结构:struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_h转载 2014-10-21 14:41:17 · 1330 阅读 · 0 评论 -
container_of 宏
container_of 宏在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the转载 2014-09-09 16:17:04 · 530 阅读 · 0 评论 -
物理地址与虚拟地址(2)
虚拟地址和物理地址的概念 CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下转载 2014-10-28 17:04:59 · 661 阅读 · 0 评论 -
物理地址与虚拟地址
本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。——这个概念应该是这几个概念中最好理解的一个,但是值得一提的是,虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字转载 2014-10-28 17:08:42 · 1291 阅读 · 0 评论 -
物理地址与虚拟地址(3)
Windows 2000 使用基于分页机制的虚拟内存。每个进程有4GB的虚拟地址空间。基于分页机制,这4GB地址空间的一些部分被映射了物理内存,一些部分映射硬盘上的交换文件,一些部分什么也没有映射。程序中使用的都是4GB地址空间中的虚拟地址。而访问物理内存,需要使用物理地址。 下面我们看看什么是物理地址,什么是虚拟地址。 物理地址 (physical address): 放在转载 2014-10-28 17:07:52 · 1113 阅读 · 0 评论 -
Kbuild Makefiles详解 (翻译linux下Documentations/kbuilt/makefiles)
kbuild,即kernel build,用于编译Linux内核文件。kbuild对makefile进行了功能上的扩充,使其在编译内核文件时更加高效,简洁。大部分内核中的Makefile都是使用Kbuild组织结构的kbuild Makefile。 下面将分两部分介绍,首先介绍Linux的命令工具make及其所操作的makefile,它负责将源代码编译成可执行文件;然后介绍kbuild m转载 2014-08-20 17:50:14 · 1545 阅读 · 1 评论 -
GNU C 对标C的扩展
Linux 系统上可用的C编译器是GNU C编译器,它建立在自由软件基金会的编程许可证的基础上,因此可以自由发布。GNU C对标准C 进行一系列扩展,以增强标准C的功能。1.零长度数组GNU C允许使用零长度数组,在定义变长对象的头结构时,这个特性非常有用。例如:struct var_data{int len;char data[0];};char da原创 2014-08-19 17:53:09 · 546 阅读 · 0 评论 -
Kconfig与Kbuild Makefile 的驱动方向简单解析
首先我们来学习什么Makefile,什么是Kconfig ,什么是.config Makefile:一个文本形式的文件,其中包含一些规则告诉make编译哪些文件以及怎样编译这些文件。 Kconfig:一个文本形式的文件,其中主要作用是在内核配置时候,作为配置选项。 .config:文件是在进行内核配置的时候,经过配置后生成的内核编译原创 2014-08-21 15:26:58 · 1523 阅读 · 1 评论 -
为什么 volatile 关键字不能在 kernel 中使用(linux kernel 文档翻译)
为什么 volatile 关键字不能在 kernel 中使用 使用C语言的程序员以前总认为 volatile的意思是这个变量可能会在当前线程外的其他地方被改变(中断,其他device或CPU线程等)。因此他们有时会尝试在kernel中把votatile用于处理共享数据结构。换一种方式说,他们之前一直认为volatile是一种简单的原子操作方式,但这是错误的。在kernel中对volati翻译 2016-02-18 13:54:04 · 1223 阅读 · 0 评论