嵌入式Linux驱动与内核
文章平均质量分 72
TopEmbedded
这个作者很懒,什么都没留下…
展开
-
读Kernel感悟-Linux内核启动-内核的生成
这段时间在看《Linux内核源代码情景分析》,顺便写了一些感悟。读内核源代码是一件很有意思的事。它像一条线,把操作系统,编译原理,C语言,数据结构与算法,计算机体系结构等等计算机的基础课程串起来。 我看内核源代码是用lxr+glimpse(不一定要自己架,可以直接访问校内外的lxr网站)的。如果在windows下也可以用source insight。以下的当前路径为内核源代码路径原创 2009-02-03 17:21:00 · 1881 阅读 · 3 评论 -
读Kernel感悟-伪装现场-内核线程
文章来源:http://www.top-e.org/jiaoshi/class/众所周知,内核中创建一个内核线程是通过kernel_thread实现的。声明如下:int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);我们知道,用户态创建线程调用clone(),如果要在内核态创建线程,首先想到的是在内核原创 2009-03-09 11:21:00 · 1540 阅读 · 0 评论 -
基于ARM9开发板的按键字符设备驱动实现
摘要:该驱动程序实现4个按键设备在Linux系统中基于QT2410E开发板的工作情况,通过该实例可以了解ARM平台Linux系统下的GPIO程序控制,以及硬件中断程序的工作机制。另外还可以熟悉Linux 2.6内核的模块加载和测试方法。1.了解硬件原理图由于该设备驱动是针对具体硬件设备的,所以一般需要了解它的硬件原理图(如图1),该模块有四个按键分别是S2,S3,S4和S原创 2008-12-27 16:24:00 · 2396 阅读 · 0 评论 -
读Kernel感悟-kbuild系统-内核模块的编译
Linux内核是一种单体内核,但是通过动态加载模块的方式,使它的开发非常灵活方便。那么,它是如何编译内核的呢?我们可以通过分析它的Makefile入手。以下是一个简单的hello内核模块的Makefile.ifneq ($(KERNELRELEASE),) obj-m:=hello.oelseKERNELDIR:=/lib/modules/$(shell uname原创 2009-03-21 13:32:00 · 1938 阅读 · 0 评论 -
读核感悟-kbuild系统-make bzImage的过程
文章来源:http://www.top-e.org/jiaoshi/class/ 从以上例子中可以看到,内核的编译系统kbuild是个很庞大的系统。但是,它所使用的make和我们平时用的make是一模一样的。kbuild只是通过预定义一些变量(obj-m,obj-y等等)和目标(bzImage ,menuconfig等等),使内核的编译和扩展变得十分方便。我们不妨yy一下kbuild的一些原创 2009-03-31 21:50:00 · 3912 阅读 · 0 评论 -
嵌入式Linux内核优化裁剪
嵌入式Linux内核优化裁剪 优化1、取消虚拟内存的支持General setup ---> [ ] Support for paging of anonymous memory (swap) 优化2、使用默认的IO调度器,取消其他的调度器-*- Enable the block layer ---> IO Schedulers ---> Anticipat原创 2009-06-23 14:28:00 · 3817 阅读 · 0 评论 -
Embedded Linux 技术与概念解析
引言 Embedded Linux技术基于开放源码的资源,并且已经是当今最重要的嵌入式应用技术之一。Embedded Linux是烧录在目标装置上的系统,1个Embedded Linux系统包含Linux kernel与 root filesystem 2大部分,Embedded Linux系统到底包含哪些组成要素构成,本文将由概念的层面进行解析。 本文原创 2009-07-10 11:09:00 · 2918 阅读 · 0 评论 -
Linux 2.6 内核中的最新电源管理技术综述
前言 本系列文章将结合近年来不断在各种硬件(包括 CPU、芯片组、PCI Express 等各种最新总线标准以及外设)上新增的节能技术。 从 Linux® 2.6内核及整个 software stack (包括 kernel、middleware 以及各种用户态 utility)如何添加对这些创新的节能技术的支持这一角度,为读者介绍 Linux 操作系统近几年来在电原创 2009-07-10 11:10:00 · 2892 阅读 · 0 评论 -
Linux嵌入式系统与硬件平台的关系
一、嵌入式系统设计方法变化的背景 嵌入式系统设计方法的演化总的来说是因为应用需求的牵引和IT技术的推动。 随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高。硅材料与人类智慧的结合,生产出大批量的低成本、高可靠性和高精度的微电子结构模块,推动了一个全新的技术领域和产业的发展。在此基础上发展起来的器件可编程思想和微处理(器)技术可以用软件来改变和实现原创 2009-07-10 11:13:00 · 2843 阅读 · 0 评论 -
Linux系统下驱动程序框架概述
一、linux的设备驱动程序与外界的接口可以分为三个部分: 1.驱动程序与操作系统内核的接口。通过file_operations(include/linux/fs.h)数据结构来完成的。 2.驱动程序与系统引导的接口。这部分利用驱动程序对设备进行初始化。 3.驱动程序与设备的接口。这部分描述了驱动程序如何与设备进行交互,与具体的设备密切相关。 二、根据功能划原创 2009-07-10 11:14:00 · 2675 阅读 · 0 评论 -
u-boot中mkimage工具的具体使用
通常,u-boot为kernel提供一些kernel无法知道的信息,比如ramdisk在RAM中的地址。Kernel也必须为U-boot提供必要的信息,如通过mkimage这个工具(在u-boot代码的tools目录中)可以给zImage添加一个header,也就是使得通常编译的内核zImage添加一个数据头,把添加头后的image通常叫uImage,uImage是可以被U-boot直接引导的内核原创 2008-12-22 12:53:00 · 17997 阅读 · 0 评论 -
Linux内核中EXPORT_SYMBOL的用法
文章来源:http://www.top-e.org/jiaoshi/class/EXPORT_SYMBOL标签内定义的函数对全部内核代码公开,不用修改内核代码就可以在内核模块中直接调用。还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。 使用时注意事项:在使用EXPORT_SYMBOL 的.c文件中 需要 #include 文件。//先写函数func (){ .原创 2009-02-24 21:40:00 · 1237 阅读 · 0 评论 -
读Kernel感悟-Linux内核启动-从hello world说起
内核是从哪里开始执行的呢?几乎任何一本Linux内核源代码分析的书都会给出详细的答案。不过,我试图从一个不同的角度(一个初学者的角度)来叙述,而不是一上来就给出答案。从熟悉的事物入手,慢慢接近陌生的事物,这是比较常见的思路。既然都是二进制代码,那么不妨从最简单的用户态C程序,hello world开始。说不定能找到共同点。恰好我是一个喜欢寻根究底的人。也许,理解了hello world程序的启动过原创 2009-02-03 17:25:00 · 1848 阅读 · 1 评论 -
读Kernel感悟-Linux内核启动-BIOS
文章来源:http://www.top-e.org/jiaoshi/html/?196.html “真罗嗦,直接告诉我Linux下用glibc库编译出来的C程序真正的入口地址是_start()不就行了么?”臭鸡蛋扑面而来。嗯,我说了我只是想用一种特别的方式来叙述问题。我更看重探索的过程中体现的思考方式以及其中的乐趣。回到我们的主题。Linux内核为什么不是从main函数开始执行?事原创 2009-02-11 09:58:00 · 1192 阅读 · 0 评论 -
读Kernel感悟-Linux内核启动-内核解压缩
文章来源:http://www.top-e.org/jiaoshi/class/ 这得从vmliux.bin的产生过程说起。从内核的生成过程来看内核的链接主要有三步:第一步是把内核的源代码编译成.o文件,然后链接,这一步,链接的是arch/i386/kernel/head.S,生成的是vmlinux。注意的是这里的所有变量地址都是32位页寻址方式的保护模式下的虚拟地址。通常在原创 2009-02-16 13:07:00 · 1183 阅读 · 0 评论 -
读Kernel感悟-伪装现场-系统调用参数
文章来源:http://www.top-e.org/jiaoshi/class/内核支配了整个计算机的硬件资源,好像一位独裁者,高高在上。他有时候必须像法官一样公正,有时候则必须像狐狸一样狡猾。伪装现场就是他的拿手好戏。系统调用是很特别的函数,因为它里面实现了用户态到内核态的转换。应用程序要创建新进程,不可能在用户态直接调用sys_fork()。这就需要内核为sys_fork()伪装一原创 2009-02-24 21:43:00 · 1375 阅读 · 0 评论 -
Linux 驱动开发学习基本步骤
首次发表于:http://www.top-e.org/jiaoshi/html/?125.html 1.首先需要对C语言编程非常熟悉,这是在Linux下编程的基本条件。2.会写简单的Makefile,编写一个简单的应用程序,再写一个Makefile,让它能正常编译。Makefile主要目的就是用来管理编译庞大的代码文件。3.了解Linux内核的目录结构,尤其要熟悉kernel目录下的dri原创 2008-12-08 21:23:00 · 1196 阅读 · 0 评论 -
我的嵌入式Linux学习之路
文章来源:http://www.top-e.org/jiaoshi/class/ 03年我毕业于陕西一所普通高校电子信息专业,当时对Linux操作系统一无所知,几乎都没有真正运行过Linux系统,大学毕业后在北京一所大学读了2年的软件工程硕士,也许是学校和专业的原因,我对软件开发有了强烈的兴趣。04年底上研究生期间我找了份实习机会,在Motorola中国电子有限公司做手机测试,由于之前没原创 2009-02-24 21:38:00 · 1194 阅读 · 0 评论 -
读Kernel感悟-Linux内核启动-链接脚本
文章来源:http://www.top-e.org/jiaoshi/class/一般来说,用户是不需要关心section的具体位置的。在用户态,内核会解析elf可执行文件的各个section,然后把它映射到虚拟地址空间。然而,在内核启动时,一切得从零开始。很多在用户态下应用程序不需要操心的东西,例如映射section的任务不得不由内核自己来完成。上一篇感悟揭示了内核如何建立页表,并且把自身原创 2009-02-24 21:42:00 · 1478 阅读 · 0 评论 -
读Kernel感悟-Linux内核启动-开启页面映射
文章来源:http://www.top-e.org/jiaoshi/class/ 在setup的帮助下,我们顺利地从16位实地址模式过渡到32位段式寻址的保护模式。又在arch/i386/boot/compressed/head.S的帮助下实现了内核的自解压,并且从arch/i386/kernel/head.S中的startup_32开始。现在在线性地址0x100000(1M)处开始就是我原创 2009-02-24 21:35:00 · 1880 阅读 · 1 评论 -
Linux设备驱动程序编写
一 Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1 对设备初始化和释放。 2原创 2009-07-10 11:16:00 · 2890 阅读 · 0 评论