Linux kernel
文章平均质量分 86
Tommy_wxie
Tommy_wxie
展开
-
Linux curses库使用
相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他转载 2017-08-09 15:57:17 · 2674 阅读 · 0 评论 -
Linux inotify功能及实现原理
1. inotify主要功能它是一个内核用于通知用户空间程序文件系统变化的机制。众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是这种需求转载 2015-04-20 14:27:38 · 1589 阅读 · 0 评论 -
Linux下inotify机制简介
1.inotify机制简介:inotify是Linux内核提供的一个文件系统变化通知机制,从2.6.13版本的内核开始提供,比如你在创建一个文件时它可以通知你哪个文件被创建了,删除文件时通知你哪个文件被删除了,修改文件时通知你哪个文件被修改了,关闭文件时哪个文件被关闭了,是可写关闭还是不可写关闭等等。这个机制在某些特定用途下是很必要的,比如桌面搜索引擎,一般当我们不记得某一文件放在哪个地方时,转载 2015-04-20 14:21:46 · 2414 阅读 · 0 评论 -
SELinux管理与配置
1.1 SElinux概述SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控 制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用 SELinux 的人使用的都是SELinux就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo原创 2015-03-23 17:09:31 · 1435 阅读 · 0 评论 -
linux device tree源代码解析
//Basedon Linux v3.14 source codeLinux设备树机制(Device Tree)一、描述ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如转载 2015-01-17 16:54:19 · 2943 阅读 · 0 评论 -
Linux设备节点创建》用户空间ueventd创建设备节点规则
说明:本文基于Android2.3和Linux2.6,其余版本仅供参考。一、devfs、udev和sysfs是什么关系?linux2.6之前使用devfs设备文件系统,它存在与内核空间;linux2.6之后使用udev设备文件系统,它存在与用户空间、但严重依赖与sysfs文件系统。二、Android(使用linux2.6以后的设备节点创建策略)设备节点的创建 在Android转载 2014-10-15 19:03:52 · 1571 阅读 · 0 评论 -
Android 之 Ashmem驱动原理
Android应用程序中使用匿名共享内存, 主要是通过应用程序框架层提供的MemoryFile接口来使用的, MemoryFile 接口是通过JNI方法调用到系统运行时库层中的匿名共享内存C接口, 最终通过这些C接口来使用内核空间中的匿名共享内存驱动模块。 c接口进入内核,分析Android系统的匿名共享内存Ashmem驱动程序的源代码,深入了解它是转载 2014-10-09 17:54:09 · 2878 阅读 · 0 评论 -
android之ION内存储器管理器
为什么需要ION回顾2011年末[2],LWN审查了android kernel patch[3],以期望将这些patch合并到kernel主线中。但是PMEM(android实现的 一个内存分配器)使这个愿望破灭了。为什么PMEM不被linux 社区接受的原因在[3]中有讲到。从那开始,PMEM很明确会被完全抛弃,取而代之的是ION内存管理器。ION是google在Android4.0 IC转载 2014-09-05 10:11:46 · 3703 阅读 · 0 评论 -
dts文件解析
1. dtb文件解析,生成资源单项列表-------------------------------------------------------------------start_kernel() --> setup_arch() --> unflatten_device_tree()该函数可以解析dtb文件,构建一个由device_node结构连接而成的单项链表。如下在此函数执行原创 2014-02-11 13:58:03 · 11019 阅读 · 0 评论 -
ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach转载 2014-02-10 16:06:11 · 2230 阅读 · 0 评论 -
ARM Linux为什么要引进Device Tree
1. 原因 A lot of very similar C code to support each and every board. Linux kernel老的Probing机制 关键是: 要提供一个board file,用于registers SOC的各个设备. 要提供一转载 2013-12-18 17:01:34 · 3536 阅读 · 0 评论 -
理解printk函数
理解printk函数Printk函数是在开发驱动过程中经常用到的一个函数,作用就是在串口上输出内核的信息。这个常用的函数的执行过程未必大家都和清楚,下面的文章分析一下printk的执行过程,并说明printk函数的一些特点。 下面是printk的执行过程,重要的步骤有如下几个1. printk调用vprintk函数,首先是禁止抢占,并且关闭中断;2. 调用v转载 2013-11-29 16:17:43 · 2547 阅读 · 0 评论 -
linux clk模型
本模块是对平台(CPU 内部集成)的所有时钟源进行建模,提供对时钟源(clk)的操作接口。Clocking rate (Crystal/DPLL/ARM core): 26.0/332/500 MHz clk,clocksource, 锁相环(phase lock loops: pll.),多个时钟源,晶振,脉冲频率,时钟频率,晶振漂移,clk表示C转载 2013-11-28 17:33:12 · 3230 阅读 · 0 评论 -
Make menuconfig错误解决
Ubuntu 12.04下执行make menuconfig的时候报如下错误:www.linuxidc.com @www.linuxidc.com:~/work/linux_3.9.5/linux-3.9.5$ make menuconfigHOSTLD scripts/kconfig/mconfscripts/kconfig/mconf.o: In function `show_h转载 2013-11-04 17:09:24 · 1404 阅读 · 0 评论 -
Android kernel wakelock分析
1. Linux kernel wakelock 定义A wake_lock prevents the system from entering suspend or other low power states when active. If the type is set to WAKE_LOCK_SUSPEND, the wake_lock prevents a full system转载 2013-11-04 14:25:51 · 2406 阅读 · 0 评论 -
linux通知链相关
一.头文件[cpp] view plaincopyprint?#include #include 二.结构体[cpp] view plaincopyprint?//通知块 struct notifier_block { int (*notifier_call)(struct notifier_block *,转载 2013-10-30 15:54:42 · 997 阅读 · 0 评论 -
深入探索 Kdump,第 4 部分: kdump 的亲密战友 crash
简介: crash 是目前广泛使用的 linux 内核崩溃转储文件的分析工具,掌握 crash 的使用技巧,对于分析定位内核崩溃的问题,有着非常重要的作用。本文首先介绍了 crash 的基本概念和安装方法,其次详细介绍了如何使用 crash 工具分析内核崩溃转储文件,包括各种常用调试命令的使用方法,最后以几个实际工作中遇到的真实案例向读者展示了 crash 的强大功能。在这篇文章中,既有详细的工具转载 2013-10-17 16:33:52 · 2276 阅读 · 0 评论 -
深入探索 Kdump,第 1 部分:带你走进 Kdump 的世界
Kdump 是一种基于 kexec 的 Linux 内核崩溃捕获机制,将 kernel 崩溃前的内存镜像保存,程序员通过分析该文件找出 kernel 崩溃的原因,从而进行系统改进。本文首先介绍了 kdump 的基本概念,其次以 RHE6.2 和 SLES11 为例介绍如何安装和配置 kdump。Kdump 的基本概念什么是 kexec ?Kexec 是实现 kdump 机制的关键,它包转载 2013-10-17 16:31:21 · 1845 阅读 · 0 评论 -
转载_Linux内核OOPS调试
以前在写驱动的时候 ,遇到比较多的kernel panic oops 问题,然后 问一些 同事 ,比较多的回答都是加 printk,其实用 GDB 的中的一个功能是能很方便地调试这些问题的。整理了一下,把自己给一家培训学校写的课件 贴上来。•第一章 调试 • •1.1. 工作环境配置 • •1 )安装好编译用的 kernel-source :RedHat转载 2013-10-09 19:20:28 · 8507 阅读 · 1 评论 -
signal_pending函数解析
经常我们在睡眠的代码中 会看到这样的例子: if (signal_pending(current)) { ret = -ERESTARTSYS; return ret; } 关于 -ERESTARTSYS 到底是什么意思? -ERESTARTSYS表示信号函数处理完毕后重新执行信号函数前的某个系统转载 2013-10-08 19:33:45 · 11841 阅读 · 0 评论 -
wait_event_interruptible 使用方法
1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue转载 2013-10-08 19:32:13 · 7334 阅读 · 1 评论 -
Android 电源管理 -- wakelock机制
Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠.PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的转载 2013-09-29 12:21:03 · 1607 阅读 · 0 评论 -
V4L2应用程序框架
V4L2是V4L的升级版本,linux下视频设备程序提供了一套接口规范。常用的结构体在内核目录include/linux/videodev2.h中定义struct v4l2_requestbuffers //申请帧缓冲,对应命令VIDIOC_REQBUFSstruct v4l2_capability //视频设备的功能,对应命令VIDIOC_QUERYCAPst转载 2013-09-08 10:47:08 · 1663 阅读 · 1 评论 -
NFC学习——NfcService 启动过程分析
在机器开机过程中,可以抓取到以下的正常logcat信息:[html] view plaincopy//setp1 I/NfcService( 3809): Starting NFC service D/NFCJNI ( 3809): NFC Service : loading JNI I/RegisteredCompone转载 2013-07-26 10:25:10 · 5310 阅读 · 0 评论 -
Android驱动之虚拟按键
1 背景nexus one工业设计简洁,类似于iphone只有一个按键的设计,只有中间的一个轨迹球。但是android标准键盘是有 HOME,MENU,BACK,SEARCH等,但是同时要保持工业设计。nexus one是这样解决问题的,显示屏是800X480,但是在电容触摸屏是8xx*480的就是比800要大的地方就变成了虚拟按键,模拟了android标准按键。 2 方案转载 2013-07-24 15:53:32 · 1602 阅读 · 0 评论 -
Linux 固件子系统----如何更新固件
在一般的使用中,可能会需要使用到升级固件这个功能,在linux的系统中提供了固件子系统这个设备模型来帮助快速的升级固件。在这里先将linux中提供的常用的接口来说明下:内核的固件接口:[cpp] view plaincopy#include int request_firmware(const struct firmware **转载 2013-07-24 15:49:42 · 1997 阅读 · 0 评论 -
Linux内核驱动基础(一)常用宏定义
__init和__initdata :仅用于模块初始化,在初始化结束后会丢弃,__init用来描述函数__initdata用来描述数据,比如说当内核启动完毕之后会打印如下语句Freeing unused kernel memory: 664k freed,多半就是__init宏和__initdata宏干的 __exit和__exitdata:会使那些内建到内核的模块省略掉clean转载 2013-07-23 19:04:29 · 3941 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统(一)GPIO的使用
一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用转载 2013-07-23 18:58:10 · 2574 阅读 · 1 评论 -
notifier chain — 内核通知链
大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发生时,链表上所有节点对应的函数就会被执行。所以对于通知链表来说转载 2013-07-10 14:09:26 · 1070 阅读 · 0 评论 -
select,poll,epoll区别
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问转载 2013-07-04 19:17:54 · 1184 阅读 · 0 评论 -
Bootloader与Kernel间参数传递机制 taglist
Tag list被用来在bootloader和linux kernel 之间传递参数,这里分析一下相关的数据结构,主要包括两个部分:Tag list 和Tag parser list。先来看Tag list:这个list是在bootloader中填充的,其数据结构定义在bootloader和linux kernel中均有定义,是一致的。我们来看linux kernel中的定义:转载 2013-06-27 14:55:33 · 2356 阅读 · 0 评论 -
要理解LINUX内存管理子系统,先要熟悉一些概念
页框, 页帧:传统上,把内存视为连续的字节,即内存为字节数组,内存单元的编号(地址)可作为字节数组的索引。分页管理时,将若干字节视为一页,比如4K bytes 此时,内存变成了连续的页,即内存为页数组,每一页物理内存叫页帧,以页为单位对内存进行编号,该编号可作为页数组的索引,又称为页帧号。页帧和页框是一个东西,英文page frame。页帧号表示物理内存的第几页, 页框表示实实在在的物理内存页。转载 2013-05-10 16:27:42 · 1622 阅读 · 0 评论 -
Linux内核中64位除法函数do_div
使用asm/div64.h中宏do_div #include unsigned long long x,y,result;unsigned long mod;mod = do_div(x,y);result = x; 64 bit division 结果保存在x中;余数保存在返回结果中。转载 2013-05-04 13:43:37 · 13585 阅读 · 0 评论 -
printk打印消息机制
2.1.4 printk打印消息机制在内核中,函数printk将消息打印到环形缓冲区__log_buf中,并将消息传给控制台进行显示。控制台驱动程序根据控制台的日志级别显示日志消息。应用程序通过系统调用sys_syslog管理环形缓冲区__log_buf,它可以读取数据、清除缓冲区、设置日志级别、开/关控制台等。当系统调用sys_syslog从环形缓冲区__log_buf读取数据时,转载 2013-04-30 09:16:20 · 1501 阅读 · 0 评论 -
linux 内核线程
创建内核线程: struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[]); 唤醒内核线程(可以唤醒所有进程(线程)): wake_up_process(struct task_struct *k);创建并运行内核线程: struc原创 2013-04-13 10:00:23 · 2164 阅读 · 0 评论 -
Linux中的工作队列
工作队列是实现延迟的新机制,从 2.5 版本 Linux 内核开始提供该功能。不同于微线程一步到位的延迟方法,工作队列采用通用的延迟机制, 工作队列的处理程序函数能够休眠(这在微线程模式下无法实现)。 工作队列可以有比微线程更高的时延,并为任务延迟提供功能更丰富的 API。 从前,延迟功能通过 keventd 对任务排队来实现, 但是现在由内核工作线程 events/X 来管理。原创 2013-04-11 11:02:14 · 1552 阅读 · 0 评论 -
linux 延时工作队列
INIT_DELAYED_WORK()是一个宏,我们给它传递了两个参数.&hub->leds和led_work.对设备驱动熟悉的人不会觉得INIT_DELAYED_WORK()很陌生,其实鸦片战争那会儿就有这个宏了,只不过从2.6.20的内核开始这个宏做了改变,原来这个宏是三个参数,后来改成了两个参数,所以经常在网上看见一些同志抱怨说最近某个模块编译失败了,说什么make的时候遇见这么一个错误:转载 2013-04-11 10:51:35 · 2162 阅读 · 2 评论 -
Linux内核源码分析--内核启动之(1)zImage自解压过程(Linux-3.0 ARMv7)
研究内核源码和内核运行原理的时候,很总要的一点是要了解内核的初始情况,也就是要了解内核启动过程。我在研究内核的内存管理的时候,想知道内核启动后的页表的放置,页表的初始化等信息,这促使我这次仔细地研究内核的启动代码。 CPU在bootloader的帮助下将内核载入到了内存中,并开始执行。当然,bootloader必须为zImage做好必要的准备: 1. CPU转载 2013-04-06 09:49:54 · 3765 阅读 · 0 评论 -
Linux内核启动:setup_arch
BootLoader可以向Linux传递参数,编译内核时也可以配置boot options。调试中使用的U-Boot bootargs如下:noinitrd root=/dev/mtdblock3 rw console=ttySAC0,115200 init=/linuxrc mem=64M内核版本:2.6.35.7内核的处理参数的整体过程如下:① u-bo原创 2013-04-05 11:25:57 · 1878 阅读 · 0 评论 -
自旋锁(spinlock) 解释得经典,透彻
获得自旋锁和释放自旋锁有好几个版本,因此让读者知道在什么样的情况下使用什么版本的获得和释放锁的宏是非常必要的。 如果被保护的共享资源只在进程上下文访问和软中断上下文访问,那么当在进程上下文访问共享资源时,可能被软中断打断,从而可能进入软中断上下文来对被保护的共享资源访问,因此对于这种情况,对共享资源的访问必须使用spin_lock_bh和spin_unlock_bh来保护。 当原创 2013-04-03 12:34:14 · 2783 阅读 · 0 评论
分享