Linux
文章平均质量分 73
hellowxwworld
这个作者很懒,什么都没留下…
展开
-
linux内核空间和用户空间通信
因网上已有很多介绍各种通信方式的示例代码,所以在本文中只是给出各种内核空间和用户空间通信方式的介绍说明。希望给像我一样的初学者提供一定的指导。因水平有限,欢迎各位批评指点。 1 概述Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x0000转载 2012-12-21 10:45:09 · 3147 阅读 · 0 评论 -
git 开发分支模型
一般使用以下分支模型来开发项目,能够使得本地 的相关修改基于辅服务器的最新版本,避免冲突。master 主分支:用于跟服务器同步,永远不要在里头更新,只做:git pullfeature feature 分支:用于开发某一个feature所建立的新分支 feature/bugfix: 用于fix某一个feature 的bugfixu原创 2013-09-02 15:43:18 · 937 阅读 · 0 评论 -
利用用平台GPIO LED调试
GPIO 驱动的 LED 由于操作简单和可视化即可以在板上直接看到其闪烁时长和频率,我们可以通过LED这种特性用于调试开发过程当中各种情景, 如统计某个中断出发频率,某些在linux 内核比较难以调试的环境, 比如休眠唤醒模式, soc各种低功耗模式等环境, 这样即使在普通串口打印不能正常工作的环境,我们也可以利用LED辅助这些环境下的调试。0 GPIO LED 设备驱动分析区分于keyb原创 2013-09-03 17:04:40 · 4440 阅读 · 1 评论 -
利用hardware watchdog debug kernel bug
本文根据watchdog特性讨论 内核开发过程当中watchdog更多的应用场景s3c2410硬件Watchdog通过利用内部定时器定时复位,通常用于检查调试cpu是否hung 或者关中断情况下while死循环导致系统无法正常运行。在内核编程中,可以通过内核线程定时给watchdog的复位清零, 使得watchdog计数器永远不会被复位,当内核出现cpu hung或者死循环导致无法调度时,内核原创 2013-09-03 21:06:26 · 2745 阅读 · 0 评论 -
内核container_of(ptr,type,member) 解析
container_of(ptr,type,member) 用于在已知结构体里面成员member和该成员指针ptr(就是地址)和结构体类型type, 返回该成员所在的结构体的指针(就是地址), 例如已知struct student a { char *name; int age;}int *page = &age;container_of(page, struct stu原创 2013-09-04 16:35:16 · 4484 阅读 · 0 评论 -
内核链表分析
借助上一篇文章container_of(ptr, type, member) 的实现,讨论分析链表在内核的实现。我们用以下的结构体来描述一个学生struct student { char *name; int age;}用链表来存储多个学生,则可以在结构体加上struct student *next 指向下一个学生struct student { char *原创 2013-09-04 19:45:30 · 1262 阅读 · 0 评论 -
watchdog 分析
本文分析s3c2410-s3c watchdog linux驱动。如图, S3C2440的Watchdog模块提供了三个寄存器来对Watchdog进行操作,他们分别是:定时器控制寄存器WTCON、定时器数据寄存器WTDAT和定时器计数寄存器WTCNT。注意:在对定时器数据寄存器WTDAT进行操作时必须在定时器控制寄存器WTCON使能之前写入一个计数目标值,当Watchdog使能原创 2013-09-03 20:59:24 · 2768 阅读 · 0 评论 -
内核通知链分析
内核通知链为内核子系统之间的事件通知机制,内核中用链表来维护通知链。应用实例:事件通知者:o 定义通知链表头static BLOCKING_NOTIFIER_HEAD(pm_chain_head);o 定义通知链注册函数,被通知者通过这个函数注册该通知链,通过pm_chain_head 链表头跟通知者关联起来int register_pm_notifier(struct notifie原创 2013-09-04 11:17:36 · 1673 阅读 · 0 评论 -
linux内核时间操作
linux内核是通过定时器中断来跟踪时间流;使用"HZ"宏表示1秒的时钟中断次数;并使用"jiffies"及"jiffies_64"变量来记录时钟中断次数,在系统引导时计数器初始化为0。 示例4_1#include linux/jiffies.h>unsigned long stamp;stamp = jiffies + HZ; /* 之后1秒 */while原创 2013-09-04 15:26:21 · 906 阅读 · 0 评论 -
信号量
信号量(semaphore)是用于保护临界区的一种常用方法。只有得到信号量的进程才能执行临界区代码,而没有得到信号量的进程进入休眠等待状态。1 定义信号量struct semaphore sem;include/linux/semaphore.hstruct semaphore{ spinlock_t lock; unsign原创 2013-09-04 20:41:14 · 4371 阅读 · 0 评论 -
内核线程
linux 内核线程拥有独立堆栈和优先级运行机制,内核线程跟用户空间进程一样用结构体struct task_struct来描述,所以从运行机制看,实际上就是一个进程,并且共享父进程资源,但是没有自己独立的进程空间,而且还不能跟用户空间交互,即current->mm 为空。创建内核线程o 利用kernel_thread() 创建使用该接口创建的线程,必须在该线程中调用daemonize(原创 2013-09-04 14:36:48 · 1523 阅读 · 0 评论 -
内核定时器
内核定时器可以实现定时执行某个事务,一个典型的应用就是使用内核定时器实现轮训操作,因为定时器到时后可以在定时器函数里面重新定时启用该定时器,达到循环启用定时器的作用,这样可以实现定时轮训硬件struct timer_list { /* * All fields that change during normal runtime grouped to the原创 2013-09-04 15:57:29 · 1198 阅读 · 0 评论 -
解析 Section Mismatch
Section Mismatch 可能引发非法内存访问,进而引发内核crush崩溃0 配置 Section Mismatch 检测CONFIG_DEBUG_SECTION_MISMATCH=y1 如何引发 Section Mismatch1.1 非法访问 __init section中的资源,因为带有__init 标记的section会在linux启动初始化完成后被free掉,这样原创 2013-08-31 16:27:15 · 1299 阅读 · 0 评论 -
regmap使用介绍
内核3.1引入一套新的API regmap,目的是提取出关于I2C SPI irq等相关注册、使能以及读写的公共部分,以提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。0 基础结构struct regmap_config { int reg_bits; // 寄存器地址的位数,必须配置,例如I2C寄存器地址位数为 8 int pad_bits; //原创 2013-08-31 15:33:33 · 30106 阅读 · 0 评论 -
Linux内核之进程优先级
注:本文参考的内核代码版本为3.3.5在进程控制块定义中,如下,每个进程有4个优先级成员变量,往往给初学者造成一些困惑。下面分实时进程和普通进程看看他们都用了哪些优先级?struct task_struct{ 删除了无关的成员变量int prio, static_prio, normal_prio; unsigned int rt_priority;} 实时转载 2012-12-21 10:45:24 · 1300 阅读 · 0 评论 -
巧用backtrace系列函数,在不具备gdb环境的Linux系统上大致定位段错误位置
1: 段错误产生的原因简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一旦一个程序发生了越界访问,系统就采取内存保护措施,并给那个程序发送SIGSEGV信号,程序接到那个信号后就知道segmentation fault出现了。想对”段错误”有更详细的了解可以去阅读“Linux下的段错误产生的原因及调试方法” 这篇转载 2012-12-20 15:19:30 · 1223 阅读 · 0 评论 -
ARM Linux内核驱动异常定位方法分析--反汇编方式
原文链接:http://blog.csdn.net/hunhunzi/article/details/7052032最近在搞Atmel 的SAM9x25平台,Linux系统,用于工业设备。这也是我首次参与工业设备的研发。在调试Atmel SAM9x25的Linux串口设备的时候,发现无论是读还是写,都会产生异常。相关的异常信息如下:=============================转载 2012-12-19 18:35:28 · 1353 阅读 · 0 评论 -
Linux 用户态与内核态的交互 ——netlink 篇
Linux 用户态与内核态的交互——netlink 篇作者:Kendo2006-9-3这是一篇学习笔记,主要是对《Linux 系统内核空间与用户空间通信的实现与分析》中的源码imp2的分析。其中的源码,可以到以下URL下载:http://www-128.ibm.com/developerworks/cn/linux/l-netlink/imp2.tar.gz参考转载 2012-09-28 13:23:31 · 568 阅读 · 0 评论 -
用户空间与内核空间数据交换的方式(7)------sysctl
sysctl是一种用户应用来设置和获得运行时内核的配置参数的一种有效方式,通过这种方式,用户应用可以在内核运行的任何时刻来改变内核的配置参数,也可以在任何时候获得内核的配置参数,通常,内核的这些配置参数也出现在proc文件系统的/proc/sys目录下,用户应用可以直接通过这个目录下的文件来实现内核配置的读写操作,例如,用户可以通过cat /proc/sys/net/ipv4/ip_forwa转载 2012-06-05 12:31:05 · 1160 阅读 · 0 评论 -
目标文件格式分析工具: ar,nm,objdump,objcopy,readelf
目标文件格式分析工具: ar,nm,objdump,objcopy,readelf前言如果普通编程不需要了解这些东西,如果想精确控制你的目标文件的格式或者你想查看一下文件里的内容以便作出某种判断,那么你可以看一下下面的工具:ar,nm,objdump,objcopy。具体用法请参考man在线手册。ar基本用法 ar命令可以用来创建、修改库,也可转载 2012-12-20 12:38:02 · 734 阅读 · 0 评论 -
利用dm-crypt内核模块对磁盘数据加密的尝试
如果当初冠希哥有用dm-crypt硬盘进行加密意识的话,广大人民群众无疑要少了很多的乐趣:)最近在ChinaUnix论坛上,一个自称买了我书的读者向网友求助,如何用dm-crypt对ramdisk中的数据进行加解密,当然他的需求不仅仅这么简单。说实话,关于dm-crypt这东西我还是第一次听说,虽然并没有为读者解决现实问题的义务,不过好在磁盘数据加密这种事情还不算太枯燥。我先google了一把,通转载 2012-12-11 16:41:41 · 1961 阅读 · 0 评论 -
嵌入式Linux通过帧缓存截图
嵌入式Linux通过帧缓存截图 - Embedded Linux Framebuffer Screenshot【目的】板子上已经可以运行Qtopia的demo和example了,想要将其qt的demo程序的画面截取下来,给其他人看。最原始的方法就是,找个相机,对着板子照几张即可。另外的办法,通过framebuffer去截图,截取运行中的qtdemo的画面,效果会更好,图片也转载 2012-09-28 13:23:46 · 1709 阅读 · 0 评论 -
根据内核Oops 定位代码
内核开发时有时候出现Oops,例如一个野指针会导致内核崩溃,如运行时出现以下log: 5.438972] bells bells: wm5102-aif1 samsung-i2s.0 mapping ok[ 5.443812] bells bells: Failed to add route OPCLK->Sub CLK_SYS[ 5.450499] Unable原创 2013-08-31 14:15:49 · 20318 阅读 · 5 评论 -
sudo时不需要每次都输入root密码
在ubuntu等linux发行版本,有时需要借助sudo取得root权限,但是每次都需要输入root密码,为了方便开发,可修改 /etc/sudoers这个文件,如下: # Members of the admin group may gain root privileges %admin ALL=(ALL) ALL w ALL=(ALL)NOPASSWD: AL原创 2013-08-31 14:49:55 · 7683 阅读 · 0 评论 -
linux驱动调试小结
一、一些基础1.驱动文件形式 --> *.ko2.安装命令 --> insmod 卸载命令--> rmmod 都需要root权限 ,也可用modprobe3.其他可能用到的命令: modinfo -- 查看模块信息 demsg --- 查看硬件信息 objdump---查看模块详细信息(功能很强大,具转载 2012-12-19 16:12:02 · 993 阅读 · 0 评论 -
内核延迟操作
内核延迟操作内核延迟分为长延迟和段延迟, 长延时一般以jiffies为单位, 短延时则以jiffy为单位, 对于不同延迟应该选用不同的实现方法。长延迟一般通过硬件时钟滴答来实现, 对于长延迟,可以使用等待队列机制#include long wait_event_timeout(wait_queue_head_t, condition, long timeout); // 休眠时不可中断原创 2013-09-04 15:24:32 · 909 阅读 · 0 评论