
linux内核研究
申庆胜
这个作者很懒,什么都没留下…
展开
-
i2c命令使用
在處理音訊相關的問題時,我通常會找個方法來讀寫codec中register的值。幸好linux上也有這樣的工具 – i2c tools。先到lm-sensors下載soure code,然後cross compile成arm的執行檔,就可以放到板子來試試看了。i2c-tools中含有四個執行檔i2cdetect – 用來列舉I2C bus和上面所有的裝置i2cdump – 顯示转载 2015-06-16 15:55:02 · 8531 阅读 · 1 评论 -
android bluetooth 移植相关注意事项
bluedroid的通用架构框图:由上图可知,bluedroid包含如下的核心组件:Bluetooth core stack libraryHCI libraryVendor Specific HCI libraryUART, RFKILL,TUN/TAP and UHID device dri转载 2014-01-10 16:32:09 · 3152 阅读 · 0 评论 -
Android Bluetooth蓝牙开发\蓝牙协议\蓝牙通信例子_Android支持蓝牙4.0版本_BLE开发
一、Android Bluetooth现状在android官网可以了解到android4.2新增了部分新功能,但是对于BT熟悉的人或许开始头疼了,那就是Android4.2引入了一个新的蓝牙协议栈针。谷歌和Broadcom之间的合作,开发新的蓝牙协议栈,取代了基于堆栈的Bluez。因此市场上出现了老设备的兼容问题,很多蓝牙设备在android4.2手机上不能使用。New转载 2014-01-10 16:33:54 · 2775 阅读 · 0 评论 -
U-boot启动过程详解
一、U-BOOT的目录结构 u-boot目录下有18个子目录,分别存放管理不同的源程序。这些目录中所要存放的文件有其规则,可以分成三类。 ?第一类目录与处理器体系结构或者开发板硬件直接相关; ?第二类目录是一些通用的函数或者驱动程序; ?第三类目录是u-boot的应用程序、工具或者文档。 Board:和一些已有开发板相关的文件,比如Makefile和u-boot.lds等都和具转载 2013-12-25 10:38:52 · 650 阅读 · 0 评论 -
Android电池驱动
学习要点:1、电池驱动的架构;2、电池电压的获取,百分比的转换(包括不同用电情况下的分析);3、充电管理;当我们要写一个驱动的时候,首先要知道内核提供给驱动的接口,就是当驱动挂载到内核上的时候,内核怎么知道驱动中的信息的,如何来控制驱动。而内核提供给电池驱动的接口就是结构体power_supply。Battery驱动程序需要通过sys文件系统向用户空间提供接口,sys文件系统的路径转载 2013-12-12 16:10:02 · 996 阅读 · 0 评论 -
OMAP3630 Linux I2C总线驱动分析
1 Linux I2C驱动架构Linux下I2C驱动的架构图如下: 图1.1 Linux下I2C驱动架构 如上图所示,每条I2C总线会对应一个adapter,而每条I2C总线上则可以有多个client,在linux kernel中,通过I2C core层将I2C client与I2C adapter关联起来,Linux 中I2C驱动代码位于drivers/i2c目录转载 2013-12-10 17:29:11 · 1115 阅读 · 0 评论 -
PowerPC扁平设备树FDT(转)
IBM、Sun等厂家的服务器最初都采用了Firmware,用于初始化系统配置,提供操作系统软件和硬件之间的接口,启动和运行系统。后来为了标准化和兼容性,IBM、Sun等联合推出了固件接口IEEE 1275标准,让他们的服务器如IBM PowerPC pSeries,Apple PowerPC,Sun SPARC等均采用Open Firmware,在运行时构建系统硬件的设备树信息传递给内核,进行系统转载 2013-11-26 11:33:50 · 1146 阅读 · 0 评论 -
make menuconfig/.config/Kconfig解析
make menuconfig/.config/Kconfig解析在对linux进行编译,常用的命令是make menuconfig,使用图形界面来对整个系统进行裁剪。当然,除了这条指令,还包括很多配置命令,比如make defconfig, make oldconfig等。这里主要就make menuconfig的执行过程进行解析。一.准备工作包括(交叉)编译环境的建立,原创 2013-11-19 17:02:19 · 899 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的IN和O转载 2013-09-16 15:37:50 · 661 阅读 · 0 评论 -
寄存器边际效应
寄存器边际效应 side effect,IO寄存器操作的边际效应。寄存器边际效应一 sideeffect(译为边际效应或副作用):是指读取某个地址时可能导致该地址内容发生变化,比如,有些设备的中断状态寄存器只要一读取,便自动清零。I/O 寄存器的操作具有sideeffect,因此,不能对其操作不能使用cpu缓存。 Linux内核中定义了很多宏,对硬件端口和寄存器进转载 2013-09-13 17:36:08 · 957 阅读 · 0 评论 -
Android编译系统详解(三)
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.youkuaiyun.com/mr_raptor/article/details/7540730++++++++++++++++++++++++++++++++++++++++++ Android编译系统详解(一):http://b转载 2013-08-14 11:31:03 · 737 阅读 · 0 评论 -
linux2.6内核Makefile详解
熟悉内核的Makefile对开发设备驱动、理解内核代码结构都是非常重要的linux2.6内核Makefile的许多特性和2.4内核差别很大,在内核目录的documention/kbuild/makefiles.txt中有详细的说明。给大家一个中文版的翻译=== 目录 === 1 概述 === 2 用户与作用 === 3 Kbuild文件转载 2013-08-26 15:49:56 · 890 阅读 · 0 评论 -
链接程序和库指南
原文出自:http://docs.oracle.com/cd/E19253-01/819-7050/chapter3-13/index.html链接程序和库指南Previous: 装入其他目标文件Next: 获取新符号符号查找如果dlopen(3C) 获取的目标文件引用全局符号,则运行时链接程序必须从构成进程的目标转载 2014-01-16 18:28:12 · 928 阅读 · 0 评论 -
arm中的request_mem_region
在s3c2410_wdt.c中有一行request_mem_region(res->start, size, pdev->name)而在devs.c中static struct resource s3c_wdt_resource[] = {[0] = {.start = S3C24XX_PA_WATCHDOG,.end = S3C24XX_PA_WATCHDOG原创 2014-02-21 10:54:44 · 2867 阅读 · 0 评论 -
ARM GIC中断控制器介绍
1 GIC : Generic Interrupt ControllerDistributor–detecting, disabling, prioritizing, directing interrupts to CPU(s).CPU interfaces–asserting an interrupt indication to the CPUSupport max to 1020 inte转载 2014-02-24 11:00:25 · 9972 阅读 · 2 评论 -
USB学习二:从USB设备插上到驱动probe调用流程分析(转)
http://blog.youkuaiyun.com/aaronychen/archive/2008/03/17/2192147.aspx本文将详细讲述2.6.22下的一个USB设备插上linux系统的PC后是如何一步一步调到我们的usb设备驱动的probe函数的, 我们知道我们的USB驱动的probe函数中的一个参数是interface结构, 因此一般来说, 一个USB设备中的任何一个接口都应该有转载 2014-12-29 17:14:29 · 645 阅读 · 0 评论 -
Linux USB驱动工作流程
1. USB主机在Linux驱动中,USB驱动处于最底层的是USB主机控制器硬件,在其之上运行的是USB主机控制器驱动,主机控制器之上为USB核心层,再上层为USB设备驱动层(插入主机上的U盘、鼠标、USB转串口等设备驱动)。因此,在主机侧的层次结构中,要实现的USB驱动包括两类:USB主机控制器驱动和USB设备驱动,前者控制插入其中的USB设备,后者控制USB设备如何与主机通信。Linu转载 2014-12-29 17:05:15 · 725 阅读 · 0 评论 -
linux USB 驱动框架及工作流程
网上查阅了很多关于USB的文章,大都是在介绍USB设备驱动,很少有关USB框架的资料。写USB驱动,首先要了解USB驱动的框架及其工作过程,这样就了解了自己写的驱动在整个框架的位置,及其调用规则。本blog前面也介绍过Linux的驱动框架模型,USB驱动做为Linux驱动的重要部分,当然也是遵守此模型。 关于USB bus的创建,内核是在/drivers/usb/core/usb.c中转载 2014-12-29 17:10:21 · 790 阅读 · 0 评论 -
Linux终端设备解析
虽然一直做嵌入式Linux,宿主机和开发板通信天天都在用tty设备通信,但是其实自己对TTY设备及终端的概念认识几乎是0。对于Linux内核的终端、tty、控制台等概念的认识很模糊。由于在学习的时候碰到了重定向console的问题,所以借机学习下tty的知识。以下是我对tty的认识总结,信息来源于网络和内核文档。参考资料见文章末尾。tty一词源于Teletypes,或Teletypewrite原创 2014-11-17 14:36:16 · 2415 阅读 · 0 评论 -
usb设备在sys子系统中的表示
首先,看一下/sys/bus/usb/devices/usb3下的目录结构 说明:usb总线上每个设备都以root hub的编号作为其名字的第一个号码,这个号码后跟着一个“-”字符还有设备所插入的端口号(port)。(3-0:1.0中3为root hub的编号,3-0表示设备所接入的root hub编号为3,插入到3号root hub的0端口。 “:”后跟usb配置(config转载 2014-10-23 13:45:15 · 1240 阅读 · 0 评论 -
Android4.4电池管理
一、概述 Android4.4的电池管理功能用于管理电池的充、放电功能。整个电池管理的部分包括Linux电池驱动、Android电池服务、电池属性和参数、电池曲线优化四个部分。 Linux电池驱动用于和PMIC交互、负责监听电池产生的相关事件,例如低电报警、电量发生变化、高温报警、USB插拔等等。 Android电池服务,用来监听内核上报的电池事件,转载 2014-09-28 14:50:51 · 916 阅读 · 0 评论 -
Linux串口编程详解
目录(?)[-]串口本身标准和硬件 什么是串行通信 什么是RS-232 信号定义 异步通讯 什么是全双工和半双工 什么是流控制 什么是BREAK 同步通讯 用户看到的串口和用户空间的串口编程 串口的设备文件 打开串口 打开文件的选项 给端口上写数据 从端口上读取数据 关闭串口 配置串口 POSIX终端接口 控制选项 设置波特率转载 2014-06-10 17:11:36 · 1149 阅读 · 0 评论 -
Linux USB Frequently Asked Questions
Linux USB Frequently Asked Questions$Revision: 1.69 $, last updated on $Date: 2007/08/27 14:28:18 $ by $Author: gowdy $.Getting StartedHow do I use my XXX USB device with Linux?How do I make s转载 2014-05-23 16:17:51 · 1351 阅读 · 0 评论 -
在make中有四种方式对变量赋值:
在make中有四种方式对变量赋值:1. :=运算符,如MAKE_DEPEND := $(CC) -M 这种方式叫做“简单展开”,因为在读到makefile中的这一行时等号右边就立即被展开了,等号右边引用的所有变量(如例子中的CC)也会被立即展开。其行为与一般编程和脚本语言相同。 当等号右边引用的变量(如例子中的CC)还没有被定义时,它被展开成空(nothing)而不转载 2014-04-23 10:32:23 · 3034 阅读 · 0 评论 -
繞過linux Driver Vermagic檢查
在開發kernel driver時,總是會遇到討人厭的vermagic檢查,只要目前在run的kernel版本跟driver編譯時用的kernel版本不一致,就沒辦法insmod。bash-3.2# insmod sdio.kosdio: version magic '2.6.28-271-gec75a15 preempt mod_unload modversions ARMv7 's转载 2014-04-23 15:32:07 · 5031 阅读 · 1 评论 -
驱动模块Makefile解析
先看一下代码ifeq ($(KERNELRELEASE),) KERNELDIR ?= /home/linux/linux-2.6.22.6 PWD := $(shell pwd) modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules modu转载 2014-04-22 11:21:14 · 657 阅读 · 0 评论 -
Android makefile 组织结构
下面是main.mk文件包含关系,本文档主要说明的就是这些文件里到底做了什么。(这个文件被根目录下的makefile文件包含) 一. main.mk BUILD_SYSTEM=build/core 1.检查版本号,设置环境变量(BUILD_SYSTEM)和缺省的目标。$(MAKE_VERSION) >=转载 2013-08-14 11:36:40 · 1185 阅读 · 0 评论 -
Android编译系统详解(二)
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.youkuaiyun.com/mr_raptor/article/details/7540066++++++++++++++++++++++++++++++++++++++++++ Android编译系统详解(一):http:转载 2013-08-14 11:30:21 · 816 阅读 · 0 评论 -
Android 编译系统(一):Android.mk的学习
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.youkuaiyun.com/mr_raptor/article/details/7539978++++++++++++++++++++++++++++++++++++++++++ Android编译系统详解(一):http:转载 2013-08-14 11:28:51 · 3046 阅读 · 0 评论 -
如何在内核中断上下文中分配内存
判断一个内存分配函数能否用在中断上下文中,主要看这个内存函数最终调用的伙伴系统算法的函数接口page_alloc(gfp_mask,order)的gfp_mask的内容,用在中断上下文中一般是GFP_ATOMIC,否则通常GFP_KERNEL作为内存分配标志。get_free_pages()也是根据传递的参数gfp_mask,决定这个分配函数是否能睡眠,所以传递的gfp_mask参数决定了是否原创 2013-05-14 10:59:22 · 2988 阅读 · 0 评论 -
如何进入系统调用
要想进入系统调用,一般通过c库函数。函数通过软中断号0x80从用户态进入内核态,调用相应的中断处理程序,通过传递的参数在内核态运行中断代码。通常系统调用靠c库支持。用户程序通过包含标准头文件并和c库链接,就可以使用系统调用。但是如果是自己在底层实现的系统调用,可能c库并不支持,很庆幸,linux本身提供了一组宏,用于直接对系统调用进行访问。它会设置好寄存器并调用陷入命令。这些宏就是_sysca原创 2013-05-14 11:15:35 · 1059 阅读 · 0 评论 -
kmalloc和vmalloc的区别
kmalloc分配连续的物理内存,但是大小有限制,从normal中分配。vmalloc分配不连续的物理内存,从高端内存分配。原创 2013-05-14 11:14:38 · 1437 阅读 · 0 评论 -
SRAM和SDRAM的不同点
SDRAM同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM转载 2013-05-14 11:13:30 · 1195 阅读 · 0 评论 -
PCM如何工作
PCM定义PCM中文称脉码调制,由A.里弗斯于1937年提出的,这一概念为数字通信奠定了基础,60年代它开始应用于市内电话网以扩充容量,使已有音频电缆的大部分芯线的传输容量扩大24~48倍。到70年代中、末期,各国相继把脉码调制成功地应用于同轴电缆通信、微波接力通信、卫星通信和光纤通信等中、大容量传输系统。80年代初,脉码调制已用于市话中继传输和大容量干线传输以及数字程控交换机,并在用户话机中转载 2013-05-14 11:12:17 · 1153 阅读 · 0 评论 -
如何获得设备分辨率使用命令行
cat /sys/class/graphics/fb0/virtual_size原创 2013-05-14 11:09:18 · 1535 阅读 · 0 评论 -
内核中!!双叹号的作用
/* * Q: * 在分析linux下的一个驱动的源代码时,有两个连续的!,如下: * ret = fusionee_new (fusion_devs[minor], * !!(file->f_flags & O_APPEND), &fusionee); * 其中的!!(file->f_flags & O_APPEND) * * A: * 当然是有用的,这样能够保证传入的值只有两种情况,(0)或(原创 2013-05-14 10:58:02 · 1574 阅读 · 0 评论 -
Introduction about the address type and difference
虚拟地址:指的是由程序产生的由段选择符和段内偏移地址两个部分组成的地址。为什么叫它是虚拟的地址呢?因为这两部分组成的地址并没有直接访问物理内存,而是要通过分段地址的变换机构处理或映射后才会对应到相应的物理内存地址。逻辑地址:指由程序产生的与段相关的偏移地址部分。不过有些资料是直接把逻辑地址当成虚拟地址,两者并没有明确的界限。线性地址:指的是虚拟地址到物理地址变换之间的中间层,是处理器可寻指原创 2013-05-14 10:50:03 · 853 阅读 · 0 评论 -
linux设备驱动归纳总结(四):5.SMP下的竞态和并发
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发。除了内核抢占和中断外,由于多处理起的缘故,它可以做到多个程序同时执行。所以,进程除了要防自己的处理器外,还要防别的处理器,这个就是这节要介绍的内容。xx转载 2013-05-17 10:48:53 · 850 阅读 · 0 评论 -
我理解的逻辑地址、线性地址、物理地址和虚拟地址
我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)2008年11月10日 星期一 01:37要过年了,发个年终总结贴,只是个人理解,不包正确哈。本贴涉及的硬件平台是X86,如果是其它平台,嘻嘻,不保证能一一对号入座,但是举一反三,我想是完全可行的。一、概念物理地址(physical address)用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。—转载 2009-06-26 14:46:00 · 842 阅读 · 0 评论 -
虚拟地址、线性地址和物理地址之间的关系
1.内核代码和数据的地址对于Linux 0.12内核代码和数据来说,在head.s程序的初始化操作中已经把内核代码段和数据段都设置成为长度为16MB的段。在线性地址空间中这两个段的范围重叠,都是从线性地址0开始到地址0xFFFFFF共16MB地址范围。在该范围中含有内核所有的代码、内核段表(GDT、IDT、TSS)、页目录表和内核的二级页表、内核局部数据以及内核临时堆栈(将被用作第1个任务,即转载 2009-06-26 15:02:00 · 4665 阅读 · 0 评论