随笔分类 -  Linux 内核编程

详细介绍了Linux内核态编程的相关知识点,包括Linux内核模块,驱动编程,内核同步与互斥,内核的中断处理,系统调用等等
摘要:在调试上层程序时,经常会遇到的错误是段错误,当出现段错误时,系统往往只会给出一个 segmention error,而在没有更多的信息(默认不产生core dump),在这种情况下,可以通过修改内核启动参数来使能调试模式,让用户态出现段错误时,打印出更多的提示信息,有助于定位错误。 分析流程: 先从在内核态的段错误出发,当产生内核态的段错误时,通常会打印出如下字段:... 阅读全文
posted @ 2015-04-14 11:33 浩天之家 阅读(1211) 评论(0) 推荐(0) 编辑
摘要:本文将介绍如何移植linux-3.4.2内核到JZ2440开发板上的全过程,使用的交叉编译工具版本为 arm-linux-gcc-4.3.2.tar.bz2 下面来一步一步介绍如何移植。 由于kernel的启动参数是由Uboot传递的,关键的参数有 R0=0 R1=Mach-Type R2=Tag参数地址 其中,Mach-Type为内核支持板子的硬件型号,ta... 阅读全文
posted @ 2015-04-14 11:28 浩天之家 阅读(1223) 评论(0) 推荐(0) 编辑
摘要:下载最新版U-boot,建立Source Insight工程,在建立工程的时候注意,去掉一些很明显不属于硬件的分支代码。 例如,arch目录下面的除开arm子目录之外的其他目录,都可以不添加。 arm目录下,cpu子目录只需要添加和板子对于的体系结构代码即可。 例如,板子S3C2410是arm920t的... 阅读全文
posted @ 2015-04-13 20:50 浩天之家 阅读(3644) 评论(0) 推荐(0) 编辑
摘要:在嵌入式开发中,有时候需要进行源码级别的调试,可以设置断点,单步执行,相比于每步打印printf或者printk来说,更加友好。下面就来介绍这种调试方法。 gdb交叉调试类似于网络浏览器,本地PC为客户端,远程开发板为服务器端,双方都要统一编译工具链,版本最好保持一致。 --target 指定了目标机交叉编译器前缀,比如--target=arm-linux ,缺省值为... 阅读全文
posted @ 2015-04-10 11:10 浩天之家 阅读(12853) 评论(0) 推荐(1) 编辑
摘要:1 . 调试输入子系统 在调试输入子系统时,input_system,可以通过hexdump 来打开并且实时读取对于输入设备的值,数值关系如下图所示: 每一次按键事件上报后,都会有type为0的EV_SYN同步事件触发。value中的1表示按下,0表示松开,2代表重复类事件,设置按键中断为边沿触发,一次按键会触发两次中断。 如果开启了图形界面,可以打开图形界面... 阅读全文
posted @ 2015-04-08 21:55 浩天之家 阅读(1073) 评论(0) 推荐(0) 编辑
摘要:在进行嵌入式开发时,通常使用nfs,在开发板上面远程挂载主机上的目录,这样,省去了拷贝复制文件的过程,加快开发速度。在这里,给出自己在nfs相关的设置上出现的问题。 本机IP为:192.168.0.104 开发板IP为:192.168.0.200, 必须保证他们在同一网段内。 启动系统后的挂载命令: 我之前使用的是如下: ... 阅读全文
posted @ 2015-04-02 22:32 浩天之家 阅读(3613) 评论(0) 推荐(0) 编辑
摘要:本文转载自: http://blog.chinaunix.net/uid-9620812-id-3833377.html,如有需要,请移步访问。 Technorati 标签: Linux 软中断 ---------------------------------------我是分割线---------------------------------------- 一、软中断注册 和硬中... 阅读全文
posted @ 2015-03-06 16:40 浩天之家 阅读(1605) 评论(0) 推荐(1) 编辑
摘要:记录这个知识点的原因是因为项目中需要保存充电日志,因此,趁着这个机会,深入了解一下Linux的时间系统。 UTC:(Universal Time Coordinated) 协调世界时的缩写 内核中,获取UTC时间。 #include #include #include struct timex txc; struct rtc... 阅读全文
posted @ 2015-03-04 17:32 浩天之家 阅读(1324) 评论(0) 推荐(0) 编辑
摘要:Technorati 标签: current thread_info 在内核中,可以通过current宏来获得当前执行进程的task_struct指针。现在来简要分析以下: 最原始的定义如下: #define current get_current() #define get_current() (current_thread_info()->task) ... 阅读全文
posted @ 2015-01-28 14:09 浩天之家 阅读(4297) 评论(0) 推荐(0) 编辑
摘要:本文将就自己对内核同步机制的一些简要理解,做出一份自己的总结文档。 Linux内部,为了提供对共享资源的互斥访问,提供了一系列的方法,下面简要的一一介绍。 Technorati 标签: 互斥 Linux 为了更加清晰的了解Linux内核中为什么需要同步机制,先来简要分析以下 在内核中 并发的来源,简要概述如下: 1. 中断处理 当系统正... 阅读全文
posted @ 2015-01-27 07:52 浩天之家 阅读(666) 评论(0) 推荐(0) 编辑
摘要:Technorati 标签: Kernel 输入子系统 Input 在Linux中,输入设备(如按键、键盘、触摸屏、鼠标等)是典型的字符设备,其一般的工作机理,是底层在按键、触摸时,触发一个中断,或者驱动通过定时器定时查询,通过这两种方式通知CPU,CPU然后通过SPI、I2C或I/O接口读取键值、坐标等数据,放入缓冲区,字符设备驱动管理该缓冲区,向上提供read接口供应用程序使用。 ... 阅读全文
posted @ 2015-01-25 21:12 浩天之家 阅读(681) 评论(0) 推荐(0) 编辑
摘要:Technorati 标签: Linux platform Linux在2.6内核中,针对一系列设备驱动,提供新的管理框架,成为platform机制,推出的目的,在于隔离驱动的资源和实现,使得驱动更加独立,驱动使用的资源统一由内核来管理,这些资源包括驱动所使用的内存地址、中断号等等。 要为不同的驱动程序提供一个框架,首先要抽象出不同驱动所共有的东西,简单来说,驱动程序驱动外部硬... 阅读全文
posted @ 2015-01-24 22:22 浩天之家 阅读(1618) 评论(0) 推荐(1) 编辑
摘要:本文将简要介绍一下Linux内核中的伙伴分配算法。 Technorati 标签: 伙伴算法 算法作用 它要解决的问题是频繁地请求和释放不同大小的一组连续页框,必然导致在已分配页框的块内分散了许多小块的空闲页面,由此带来的问题是,即使有足够的空闲页框可以满足请求,但要分配一个大块的连续页框可能无法满足请求。 伙伴算法(Buddy system)把所有的空闲... 阅读全文
posted @ 2015-01-24 17:11 浩天之家 阅读(17434) 评论(0) 推荐(3) 编辑
摘要:本文总结一下,Linux下面几种访问内存的方式方法。相关资料转载自:Linux 内存与I/O访问 X86体系结构下,内存空间分为I/O空间和内存空间,I/O空间通过特定的指令in、out来访问,内存空间采用mov等指令访问。 arm体系结构下,内存空间和I/O空间统一划分,他们在一个地址空间内。 在处理器和真实的内存空间之间,还有MMU这一神奇的部件... 阅读全文
posted @ 2015-01-21 13:51 浩天之家 阅读(1143) 评论(0) 推荐(0) 编辑
摘要:本文将就namespace这个知识点,进行简单的归纳总结,力求通俗易通。在资料汇总的过程中,参考了许多网上的博客资料,在文章尾部给出相关链接。 namespace,命名空间,从名字上看,应该是类似于包含许多名字的空间,打个比方,三年一班的小明和三年二班的小明,虽说他们名字是一样的,但是所在班级不一样,那么,在全年级排行榜上面,即使出现两个名字一样的小明,也会通过各自的学号来区... 阅读全文
posted @ 2015-01-21 07:32 浩天之家 阅读(27044) 评论(1) 推荐(0) 编辑
摘要:本文主要简介在X86体系结构下和在ARM体系结构下,Linux内存布局的概况,力求简单明了,不过多深入概念,多以图示的方式来记忆理解,一图胜万言。 Technorati 标签: 内存 布局 X86体系结构 在X86体系结构下,物理内存地址一般从0x0000_0000开始,而Linux内核主要按照在物理地址0x0010_0000开始的地方,即物理地址1M以上的空间。... 阅读全文
posted @ 2015-01-20 06:39 浩天之家 阅读(5428) 评论(0) 推荐(0) 编辑
摘要:Technorati 标签: Kernel Panic 出现原因 1. Linux在中断处理程序中,它不处于任何一个进程上下文,如果使用可能睡眠的函数,则系统调度会被破坏,导致kernel panic。因此,在中断处理程序中,是不能使用有可能导致睡眠的函数(例如信号量等)。 在中断发起的软中断中,其上下文环境有可能是中断上下文,同理,也不能调用可能导致睡眠的函数。软中断执行时,全局中断是打开... 阅读全文
posted @ 2014-07-31 18:06 浩天之家 阅读(30861) 评论(0) 推荐(2) 编辑
摘要:1. 内核同步 主要是防止多核处理器同时访问修改某段代码,或者在对设备驱动程序进行临界区的保护。 1 .互斥量 头文件 #include 初始化方法: 静态初始化 DEFINE_MUTEX(name), 动态初始化void mutex_init(struct mutex *lock); 使用方法: void mutex_lock(struct mutex *lock) //尝... 阅读全文
posted @ 2014-03-01 13:10 浩天之家 阅读(235) 评论(0) 推荐(0) 编辑