技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

嵌入式Linux开发

嵌入式Linux开发和研究是Linux领域研究的一个热点,目前已开发成功的嵌入式系统有一半以上都是Linux。Linux到底有什么优势,使之取得如此辉煌的成绩呢?本文分为两大部分:Linux的优点、Linux开发。一、Linux的优势:广泛的硬件支持... 全文

嵌入式 Linux 开发

嵌入式Linux系统软件开发学习思路详细介绍

底层软件开发人员,及所有的程序员,若想作好软件设计(良好的结构和移植性),能适应新项目的变化,就要遵循下面的原则:·最重要的是要理解基本概念 ( 如操作系统 ),掌握设计原则 ( 如接口分层 )。·第二是经验的积累。实践经验比书本知识更可贵,可极大提高后续工作和学习效率。·第三是关注新的软件技术,提高自己对软件设计的理解。需要注意的是,一个完整固定的学习路线是很难确定的,原因一是因人而异,二是技术进步很快。... 全文

嵌入式 Linux 开发

几种Linux嵌入式开发环境的简单介绍(1)

做Linux嵌入式系统的对常见的几种嵌入式开发环境一定不会默生,由于主要接触网络相关产品的一些系统设计,因此,将可能用到的嵌入式开发环境简要总结一下。主要涉及下面的几个东东:emDebian... 全文

Linux嵌入式 开发环境

嵌入式linux系统开发总结(1)

1 嵌入式linux系统的结构1.1 嵌入式系统的硬件架构... 全文

嵌入式linux

嵌入式Linux驱动程序开发要点

作者:华清远见嵌入式学院讲师。在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。 字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间用来等待。网络设备可以通过BSD套接口访问数据。 每个设备文件都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有2个设备号,第一个是主设备号,标识驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的、不同的硬件设备。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问驱动程序。 系统调用时操作系统内核与应用程序之间的接口,设备驱动程序是操作系统内核与机器硬件之间的接口。设备驱动程序是内核的一部分,它完成以下功能: *对设备初始化和释放 *把数据从内核传送到硬件和从硬件读取数据 *读取应用程序传送给设备文件的数据和回送应用程序请求的数据 *检测和处理设备出现的错误 MTD(Memory Technology Device)设备是闪存芯片、小型闪存卡、记忆棒之类的设备,它们在嵌入式设备中的使用正在不断增加。MTD驱动程序是在Linux下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序,使用MTD驱动程序的优点在于他们能更好的支持、管理给予闪存设备,有基于扇区的擦除和读/写操作的更好的接口。 驱动程序结构 Linux的设备驱动程序可以分为3个主要组成部分: 1. 自动配置和初始化子程序,负责监测所要驱动的硬件设备是否存在和能否正常工作。如果该设备正常,则对这个设备及其相关的设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化时被调用一次。 2. 服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分程序是由于系统调用的结果。这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因而可以在其中调用sleep()等与进行运行环境有关的函数。 3. 中断服务子程序,又称为驱动程序的下半部分。在Linux系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标识请求服务的设备。 在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的。具体到Linux系统,设备驱动程序所提供的这组入口点由一个文件操作结构来向系统进行说明。file_operation结构定义于linux/fs.h文件中。 struct file_operation{int (*lseek)(struct inode *inode, struct file *filp, off_t off, int pos);int (*read)(struct inode *inode, struct file *filp, char *buf, int count);int (*write)(struct inode *inode, struct file *filp, const char *buf, int count);int (*readdir)(struct inode *inode, struct file *filp, struct dirent *dirent, int count);int (*select)(struct inode *inode, struct file *filp, int sel_type, select_table *wait);int (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned int arg);int (*mmap)(void);int (*open)(struct inode *inode, struct file *filp);int (*release)(struct inode *inode, struct file *filp);int (*fasync)(struct inode *inode, struct file *filp);}; file_operation结构中的成员几乎全部是函数指针,所以实质上就是函数跳转表。每个进程对设备的操作都会根据major、minor设备号,转换成对file_operation结构的访问。 常用的操作包括以下几种: *lseek, 移动文件指针的位置,只能用于可以随机存取的设备。 *read, 进行读操作,参数buf为存放读取结果的缓冲区,count为所要读取的数据长度。返回值为负表示读取操作发生错误;否则,返回实际读取的字节数。对于字符型,要求读取的字节数和返回的实际读取字节数都必须是inode-i_blksize的倍数。 *write, 进行写操作,与read类似 *readdir, 取得下一个目录入口点,只有与文件系统相关的设备程序才使用。 *select, 进行选择操作。如果驱动程序没有提供select入口,select操作会认为设备已经准备好进行任何I/O操作。 *ioctl, 进行读、写以外的其他操作,参数cmd为自定义的命令 *mmap, 用于把设备的内容映射到地址空间,一般只有块设备驱动程序使用 *open, 打开设备准备进行I/O操作。返回0表示打开成功,返回负数表示失败。如果驱动程序没有提供open入口,则只要/dev/driver文件存在就认为打开成功。 *release, 即close操作。 在用户自己的驱动程序中,首先要根据驱动程序的功能,完成file_operation结构中函数实现。不需要的函数接口可以直接在file_operation结构中初始化为NULL。file_operation变量会在驱动程序初始化时注册到系统内部。当操作系统对设备操作时,会调用驱动程序注册的file_operation结构中的函数指针。 Linux对中断的处理在Linux系统里,对中断的处理是属于系统核心部分,因而如果设别与系统之间以中断方式进行数据交换,就必须把该设备的驱动程序作为系统核心的一部分。设备驱动程序通过调用request_irq函数来申请中断,通过free_irq来释放中断。它们被定义为: #include int request_irq(unsigned int irq, void (*handler)(int irq, void dev_id, struct pt_regs *regs),unsigned long flags,const char *device,void *dev_id);void free_irq(unsigned int irq, void *dev_id); 参数irq表示所要申请的硬件中断号;handler为向系统登记的中断处理子程序,中断产生时由系统来调用,调用时所带参数irq为中断号;dev_id为申请时告诉系统的设备标识;regs为中断发生时的寄存器内容;device为设备名,将会出现在/proc/interrupts文件里;flag是申请时的选项,它决定中断处理程序的一些特性,其中最重要的是中断处理程序是快速处理程序还是慢速处理程序。快速处理程序运行时,所有中断都被屏蔽,而慢速处理程序运行时,除了正在处理的中断外,其他中断都没有被屏蔽。在Linux系统中,中断可以被不同的中断处理程序共享。 作为系统核心的一部分,设备驱动程序在申请和释放内存时不是调用malloc和free,而代之以调用kmalloc和kfree,它们被定义为: #include void *kmalloc(unsigned int len, int priority);void kfree(void *obj); 参数len为希望申请的字节数;obj为要释放的内存指针;priority为分配内存操作的优先级,即在没有足够空闲内存时如何操作,一般用GFP_KERNEL。本文出自 “嵌入式学习天地” 博客,请务必保留此出处http://farsight.blog.51cto.com/1821374/344316 var kevent = 'onabort|onblur|onchange|onclick|ondblclick|onerror|onfocus|onkeydown|onkeypress|onkeyup|onload|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onreset|onresize|onselect|onsubmit|onunload'; var aevent = kevent.split('|'); jQuery('.showContent img').each(function(){ var nimg = this; jQuery.each(aevent, function(i, n){ if (n!='onload') { jQuery(nimg).attr(n, ''); } else { if (jQuery(nimg).attr(n) != 'if(this.width>650) this.width=650;') { jQuery(nimg).attr(n, ''); } } }); }); var encodetitle = encodeURI('一篇很棒的博文分享给大家:《嵌入式Linux驱动程序开发要点 》'); function show51share(){ window.open('http://t.51cto.com/index.php?m=share&url=http://farsight.blog.51cto.com/1821374/344316&type=l&count=&relateUid=&appkey=3843950324&title=' + encodetitle); } window._bd_share_config={"common":{"bdSnsKey":{"tsina":"2065779340"},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"http://blog.51cto.com/img/blog_down0731.jpg","bdStyle":"1","bdSize":"32"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)]; 0人 了这篇文章 类别:未分类┆阅读(0)┆评论(0) ┆ 返回博主首页返回博客首页 上一篇 zImage内核镜像解压过程详解 下一篇 使用cross-3.3.2编译器的问题相关文章Linux下的C编程实战(二)――文件系统编程Linux下的C编程实战(四)――“线程”控制..Linux下的C编程实战(一)――开发平台搭建Linux下的C编程实战(五)――驱动程序设计Linux下的C编程实战(三)――进程控制与进..文章评论    发表评论            计算机网络管理员(国家职业资格一级高级技师)认证培训 a.mred:link{ color:#ff0000; text-decoration:underline;} a.mred:visited{color:#ff0000;} a.mred:hover{color:#ff0000;} a.mred:active{color:#ff0000;} 昵  称: 登录  快速注册 验证码: 点击图片可刷新验证码请点击后输入验证码博客过2级,无需填写验证码... 全文

Linux 程序 嵌入式 驱动 要点

嵌入式系统开发:Arm与Linux的完美结合

嵌入式系统的定义应当是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。比如现在ATM取款机就是一个典型RTOS,embedded os主要包括两部分,一部分是处理器,比如ARM、POWERPC、MIPC,一部分是OS,比如linux,wince,vxworks,us/os,etc。... 全文

Linux Arm 嵌入式

资深系统管理员给Linux/Unix新人们的建议

                      资深系统管理员给Linux/Unix新人们的建议摘要:抚琴煮酒是一位现在在外企工作的linux/unix系统工程师、项目实施工程师,也曾经担任过RHCE的教学工作。根据多年的经验积累,抚琴煮酒发现很多新人对于如何入门和规划自己的Linux学习之路都处在一种迷茫的状态,因此撰写此文,帮助入门者走出学习的门槛。 【51CTO独家特稿】作者前言:本人从事windows、linux/unix系统工程师多年了,也做过相当长时间的项目实施工程师,维护和架构过大型广告网站、商业网站及证券类网站,感觉对linux/unix算是比较熟悉了,所以就这个职业的规则算是有点心得了吧。... 全文

资深系统管理员给Linux/Unix新人们的建议 Linux系统运维 Linux系统开发 Linux嵌入式开发 Linux系统管理和维护

Vs2012在Linux开发中的应用(1):开发环境

        在Linux的开发过程中使用过多个IDE,code::blocks、eclipse、source insight、还有嵌入式厂商提供的各种IDE,如VisualDsp等,感觉总是不如vs强大好用。虽然VS并不提供gcc的编译和调试支持,在之前的开发中只能充当一个编辑器的作用,但VS提供了强大的SDK,本文将探讨如何扩展VS,使之支持Linux的开发。        其实像Visual Gdb之类的工具已经有了类似的功能,无非不免费而已,做这件事只有一个原因:好玩……... 全文

vs2012 linux 嵌入式开发 开发工具

linux

移植I2C-EEPROM 驱动   编者:略。   1 在内核中配置I2C 驱动           Linux-2.6.32.2 对S2C2440 的I2C 接口提供了完善的驱动,因此我们只需在内核中配置一下即可使用。           在内核源代码目录执行:make menuconfig,进入内核配置主菜单,依次选择进入如下子菜单:           Device Drivers --->               <*> I2C support --->               I2C Hardware Bus support --->  如图,我们看到这里已经选择好了“<*> S3C2410 I2C Driver”,这里的S3C2410 也可以适用于S3C2440,因为它们的I2C 端口及寄存器定义都是完全相同的。   以上配置所对应的驱动源代码为:linux-2.6.32.2/drivers/i2c/busses/i2c-s3c2410.c       2 测试I2C-EEPROM         Mini2440 为了方便用户测试,基于I2C 总线挂接了一个EEPROM 芯片,它是AT24C08,通过写入和读取该芯片,我们就可以测试I2C 总线驱动了。在内核根目录下执行:make zImage,把生成的新内核烧写到开发板中,依然使用友善之臂提供的root_qtopoia,因为里面已经包含了I2C-EEPROM测试程序   在命令行种输入:i2c –w 可以向板子的24C08 器件中写入数据(0x00-0xff)... 全文

Linux 内核 linux内核 驱动开发 嵌入式系统

嵌入式系统开发之环境的建立

交叉编译调试环境建立在宿主机(也就是你的电脑)上,对于的开发板叫目标板。要完全手工的建立针对某特定的目标板的交叉编译环境是一个非常麻烦的过程。有些人会问,为什么需要建立特定的环境,从网上下载一个通用的不就行了?既然非常麻烦,有没有简单的方法,如果有简单的方法,是不是手工的就不要学习了?下面给大家详细介绍。 linux内核被设计成必须使用GNU的gcc来编译,而不是任何一种c编译器都可以。gcc对c进行了不要的扩展,这使得他更适合开发操作系统内核。linux内核和编译器的关系非常密切,甚至不同版本的内核需要使用不同版本的gcc编译器。比如,如果目标板采用的某一个是ARM核的处理器,则需要使用某个版本的arm-linux-gcc。 不仅是linux内核,linux应用程序编译时,也需要使用交叉gcc编译器,它依赖于宿主机的操作系统。因此,针对嵌入式平台建立交叉编译系统,通常是在pc上建立目标代码来为目标板平台的编译工具链(toolchains),它可以编译和处理linux内核及应用程序。一般来说,需要以下几个工具的源码:binutils,gcc,glibc-linuxthreads和linux内核源码等。 鉴于手工配置这些工具链很麻烦,很多嵌入式开发板的生产商都提供了建立交叉编译环境的脚本或者提供了已经配置好交叉编译环境的linux虚拟机文件,只需要运行这样一个脚本或者是使用现有的虚拟机文件就完成了整个环境的搭建。此外,通过crosstool(一个专门建立编译工具链的脚本的工具),可以在很大程序上简化工作量。 下面对这些工具链的内容及相关软件进行详细介绍: (1)binutils 一组编译开发工具,包括连接器,汇编器以及其他用于目标文件和档案的工具。 (2)gcc gcc(GNU Compiler Collection)是linux下的高级语言编译器,它不但能够支持c/c++语言的编译,而且能够支持FORTRAN,JAVA,ADA等编程语言。 (3)glibc 提供系统调用和基本函数的c库,如open,malloc,printf等。所有linux上的c程序编译时都需要与glibc库连接。如果是动态连接的程序,在运行时也需要用到它。 (4)glibc-linuxthreads POSIX(portable operating system interface,可移植操作系统接口)线程库。 (5)linux内核源码及针对某一个特定P平台的补丁包 需要根据项目的需要,选择合适的linux内核版本。另外,针对不同的cpu类型,一般存在特定的补丁程序,在进行内核编译以前,需要首先对linux内核进行打补丁的操作。 至于手动配置工具链,过程较为麻烦,需要了解的可以看我之前推荐的那本书,在132页。... 全文

嵌入式系统 交叉编译 环境 搭建 linux

我与《深入浅出嵌入式底层软件开发》

++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6744480++++++++++++++++++++++++++++++++++++++++++ ... 全文

嵌入式 出版 编程 iphone 工作 linux

FS_V210开发平台下Linux启动logo的修改

作者:朱老师,华清远见嵌入式学院讲师。一、开发平台主机:ubuntu 12.04 系统;目标机:FS210 平台;内核版本:Linux-3.0.8交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc;二、步骤运行Ubuntu 12.04系统,打开命令行终端。... 全文

FS_V210开发平台 Linux logo 嵌入式

Vs2012在Linux开发中的应用(4):公共属性的定义

在嵌入式开发的过程中,有一些参数是基本不会改变的,如编译主机的IP,用户名,密码等参数。我们使用VS提供的属性管理器来保存这些参数。打开属性管理器:可以看到VS会根据不同的平台自动加载一个叫Microsoft.Cpp.$(Platform).user.prop的属性表,这个属性表文件存放在AppData\Local\Microsoft\MSBuild\v4.0目录下:当然我们也可以根据需要自己创建属性表文件并导入到此工程中。我们在Microsoft.Cpp.hi3516.user表中添加我们的定义:在添加时务必选择添加到环境变量:这样才有可能在编译的时候引用到。 ... 全文

vs2012 嵌入式开发 msbuild linux

Vs2012在Linux开发中的应用(2):方案设计

1.1     代码提示功能在vs中开发中,Visual Assist是一个非常优秀的插件,我们仍然可以使用它进行代码的分析,但它只能支持vcxproj工程,因而我们选择对vcxproj的工程进行扩展,这样VisualAssist就可以正常使用了。此外,VS的智能感知不支持GCC的一些扩展,在做代码分析的时候可能出错,我们采用强制包含头文件的方式解决一部分问题:注意,这个文件的目的是让VS能够进行代码的分析,而不是让VS具有编译这些代码的能力!!!这个头文件类似于这样的:#pragmaonce ... 全文

vs2012 linux 嵌入式 msbuild

eclipse linux驱动交叉调试环境的制作

知识背景:菜鸟阶段,一心学习linux驱动开发,只是现在还什么都不会。。 特别信仰 “工欲善其事,必先利其器”。环境:ubuntu 12.04    arm-linux-gccstep1:安装eclipse相信你已经会了,嵌入式开发下载 c/c++版本的exlipse,版本用最新的吧,但也不是绝对的。我用的luna版本。... 全文

eclipse ide debug 远 linux驱动 嵌入式开发 交叉编译 调试

Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程

MSBUILD的编译过程实际上是根据一系列的targets文件定义的,当我们在IDE执行生成、批生成、清理命令的时候,VS会查找这些命令对应的Task并执行它,下面我们逐个分析这个过程。当执行生成操作时,MSBUILD将执行一个叫”Build”的任务,在targets文件中是这样定义的:  <Target      Name="Build"      Condition=" '$(_InvalidConfigurationWarning)' !='true' "      DependsOnTargets="$(BuildDependsOn)"... 全文

msbuild 嵌入式开发 vs2012

这个冬天不太冷

不知不觉中,日历已经翻到了12月。在期盼新年钟声到来的等待中,我们首先迎来了确实冬天。白雪皑皑的冬天,经济衰落的冬天。圣诞节快到了,但是今年的圣诞节能否有往年的热闹气氛还很难说,毕竟经济下滑对消费者的信心打击太大。早些时报道称,美国将度过一个几十年来购物最不旺盛的圣诞节。而诺基亚也宣布下调全球手机销量预期,还预计2009年全行业手机销售量将低于该公司原先预计的12.4亿部。北电网络则更是被分析师认为有破产的可能,就连Atmel这样的厂商都有被收购的消息传来。还好我们是幸运的。随着经济的飞速发展,不仅使我们的国际地位大大提高,更让我们有底气进行经济宏观调控,也难怪世界媒体称中国在G20峰会上最吃香。虽然政府刺激经济的4万亿元的大礼包不可能落在嵌入式市场,但是科技板块是包含在其中的。我们也清楚,只要基础设施建设好了,消费者自然会去考虑下一步的消费的。除了政府的经济刺激外,几场技术盛宴也为这个冬天带来些许暖意。从11月底到12月初,《2008中国软件技术大会》、《2008 Windows硬件工程大会》以及《2008中国软件开发2.0大会》相继在北京召开。在Windows硬件工程大会上,微软会揭开Windows 7操作系统的神秘面纱。传说中的Windows 7融入了触摸屏技术,值得我们期待。Windows 7备受关注,不单是因为它的强大功能,更重要的是它担负着为微软打翻身仗的重任。虽然Vista谈不上失败,但是在比“炫”的角度上,Linux的3D桌面显然更胜一筹。更重要的是,在移动开发领域,微软也受到前所未有的冲击。在本次大会上,移动计算也被列为大会的主题之一,不知道微软会给我们带来什么样的惊喜。两场软件大会的议程排的也非常满,想必一定很热闹。根据去年的统计数据显示,每个大会都吸引了上千人参加。让人高兴的是,两个大会都为嵌入式移动开发设立了分论坛。如果我没记错的话,这应该是第一次,由此可见嵌入式移动开发仍在不断升温。随着Android、Symbian、WM、Linux几强争霸格局的显现,我们有理由相信,2009年的这个行业会更精彩。... 全文

windows 移动开发 嵌入式 微软 symbian linux

1