构建嵌入式Linux系统

发布者:逍遥游侠最新更新时间:2012-04-06 来源: 电子产品设计关键字:嵌入式  Linux系统  中断读取 手机看文章 扫描二维码
随时随地手机看文章

引  言:

目前嵌入式系统的应用越来越广泛,一台通用PC的外部设备就有5~10个嵌入式微处理器,如键盘、软驱、硬盘、显示器、打印机、扫描仪、USB接口等均是由嵌入式处理器控制的。在制造工业、过程控制、通信电视、仪器仪表、汽车船舶、航空航天、消费类产品均是嵌入式系统的应用领域。嵌入式系统目前主要有:Windows CE、VxWorks、QNX等,它们都具较好的实时性,系统可靠性,任务处理随机性等优点。但是它们的价格普遍偏高,很多开发商承受不起。因而,Linux操作系统成为嵌入式操作系统的首选,原因如下:

在精简内核在编译内核之前,首先要明确需要那些驱动和模块,然后只选择需要的驱动和模块,例如,如果系统不需要网络支持,则可以去掉网络模块。内核一般是以压缩方式存放的,在系统启动时会自行解压。内核都是常驻内存的,当需要调用应用程序时,再把需要的程序从磁盘 调入内存运行。

构建内核常用的命令包括:

◆ make config:内核配置,调用 ./scripts/Configure 按照 arch/i386/config.in 来进行配置。

◆ make dep:寻找依赖关系。

◆ make clean:清除以前构建内核所产生的所有目标文件、模块文件、以及一些临时文件等。 

 
◆ make:构核,通过各目录的Makefile 文件将会在各个目录下产生许多目标文件。如果内核没有错误,将产生文件vmlinux,这就是构建的内核。 

◆ make zImage:在make 的基础上产生压缩的内核映象文件./arch/$(ARCH)/boot/zImage 以及在 ./arch/$(ARCH)/boot/compresed/目录下产生临时文件。

◆ make bzImage:在make 的基础上产生压缩比例更大的内核映象文件./arch/$(ARCH)/boot/bzImage 以及在 ./arch/$(ARCH)/boot/compresed/目录下产生临时文件。

◆ make modules:编译模块文件,在make config 时所配置的所有模块将在这时编译,形成模块目标文件,并把这些目标文件存放在modules 目录中。

◆ make modules_install:把上面编译好的模块目标文件放置在目录 ./lib/modules/$KERNEL_VERSION / 中。上面的编译内核是在没有改变源代码的情况下实现的,如果觉得源代码提供的功能在某些方面不能满足要求,就要修改源代码了。源代码中主要有以下几个关键部分:有关进程管理的task_struct 结构,这个结构几乎包括了与进程有关的所有文件内容,还有任务队列、时钟管理和中断管理,各种进程间的通信机制,内存管理中各种内存分配函数的实现,虚拟文件系统。 

系统启动 

引导启动程序主要包括以下三个文件:bootsect.s,head.s和setup.s 这三个文件虽然都是汇编程序,但确使用了两种语法格式。 bootsect.s和setup.s 采用了近似于Intel的汇编语言语法,需要使用Intel 8086 汇编器和连接器 as86和ld86。 head.s 则使用了GUN的汇编格式,并且运行在保护模式下,需要用GUN的as 进行编译。这是一种AT&T语法的汇编语言格式。 Bootsect.s代码时磁盘引导块程序,驻留在磁盘的第一个扇区中,在PC机加电ROM-BIOS自检后,引导扇区由BIOS加载到内存0x7C00 处,然后将自己移动到内存0x90000处。该程序的主要作用是首先将setup模块(由setup.s编译的)从磁盘加载到内存紧接着bootsect 的后面位置(0x90200),然后利用BIOS中断0x13取磁盘参数表中当前启动引导盘的参数,接着在屏幕上显示 “Loading system...”字符串。再将system模块从磁盘上加载到内存0x10000开始的地方。随后确定根文件系统的设备号。 

Setup程序的作用主要是利用ROM-BIOS中断读取机器系统数据,并将这些数据保存到0x90000开始的位置(覆盖了bootsect程序所在的地方)。然后setup程序将system模块从0x10000整块向下移动到内存绝对地址0x0000处,接下来加载中断描述符表寄存器(idtr)和全局描述表寄存器(gdtr)。开启A20地址线,重新设置两个中断控制芯片8259A,将硬件中断号重新设置为0x20-0x2f。最后设置CPU的控制寄存器CR0(也称机器状态字),从而进入32位保护模式进行,并跳转到位于system模块最前面部分的head.s程序继续运行。 Head.s程序在被编译后,会被连接成system模块的最前面开始部分,即头部(head)程序。从这里开始,内核完全都是在保护模式下运行了。这段程序实际上处于内存绝对地址0处开始的地方。这个程序功能比较单一,首先是加载各个数据段寄存器,重新设置中断描述符表idt,共256项。然后重新设置中断描述符表gdt,接下来检测A20地址线是不是开启了,再检测PC机是否含有数学协处理器芯片,然后设置管理内存的分页处理机制,最后利用返回指令将预先放置在堆栈中的/init/main.c程序的入口地址弹出,去运行main()内核初始化程序。 [page]

设备驱动程序

设备驱动程序在Linux内核中扮演着特殊的角色,它们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐藏了设备的工作细节。用户操作通过一组标准化的调用完成,而这些调用是和特定的驱动程序无关的。设备驱动程序提供的功能是同外设进行数据传送。设备包括三种类型:字符设备、块设备和网络接口。每个模块通常实现其中一种类型,相应地,模块可分为字符模块(char module)、块模块(block module)和网络模块(network module)三种。然而这种分类方式并不是十分严格,程序员可以构建一个大的模块,在其中实现不同类型的设备驱动程序。三种类型的设备如下: 

字符模块

字符设备是能够象字节流(比如文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少需要实现open、close、 read和write的系统调用。字符终端(dev/console)和串口(/dev/ttySO以及设备类型)就是字符设备的两个例子,它们能够用流抽象很好地表示。

块设备和字符设备一样,块设备也是通过/dev目录下的文件系统节点被访问的。块设备(例如磁盘)上能够容纳文件系统。在大多数Unix系统中,块设备包括整数个块,而每块包含1KB或2的几次幂字节的数据。Linux允许应用程序如字符设备那样读写块设备,可以一次传递任意多字节的数据。因而,块设备和字符设备的区别仅仅在于内核内部管理数据的方式,也就是内核和驱动程序的接口不同。块设备的接口必须支持挂装(mount)文件系统。 

网络接口

任何网络事务都要经过一个网络接口,即一个能够和其它主机交换数据的设备。通常接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。网络接口由内核中的网络子系统驱动,负责发送和接收数据包,它必须了解每项事务是如何映射到实际传送的数据包的。尽管Telnet和FTP连接都是面向流的,它们都使用了同一个设备,但这个设备看到的只是数据包,而不是独立的流。

在Linux里,除了直接修改系统内核的源代码,把设备驱动程序加进内核以外,还可以把设备驱动程序作为可加载的模块,由系统管理员动态的加载和卸载,使之成为内核的一部分。Linux的模块可以用C语言编写,用gcc编译成目标文件(不进行链接,作为*.o文件存在),为此需要在gcc命令行里加上-c 的参数。由于在不链接时,gcc只允许一个输入文件,因此一个模块的所有部分都必须在一个文件里实现。编译好的模块*.o放在 / lib / modules / xxxx/misc下(xxxx表示内核版本),然后用depmod -a使此模块成为可加载模块。模块用insmod命令加载,用rmmod命令来卸载,并可以用lsmod命令来察看所有已经加载的模块的状态。编写模块时必须提供两个函数,一个是init_module(void),供insmod在加载的时候自动调用,负责进行设备驱动程序的初始化工作。Init_module返回0表示初始化成功,返回负数表示失败。另一个函数是void cleanup_module(void),载模块卸载时调用,负责进行设备驱动程序的清除工作。在成功的向系统注册了设备驱动程序后(调用register_chrdev成功后),就可以用mknod命令来把设备映射成一个特别文件,其它程序社用这个设备的时候,只要对此特别文件进行操作就可以了。 

结语

本文主要论述了如何构造嵌入式Linux系统,设计和实现一个完整并且小巧使用的嵌入式Linux系统是一个非常复杂的过程。由于嵌入式Linux是由标准 Linux裁减而来的,所以需要对Linux的内核有深入的了解。本文所构建的一个小型嵌入式Linux系统,已成功运用于S3C2410 。所欠缺的是构建的内核还不够小,原因可能是存在一些不必要的硬件驱动程序以及库的裁减不够理想导致的。今后的工作主要集中在对外设模块和库的裁减上,以及开发一些特定硬件的驱动程序。 参考文献: 1 魏永明,骆刚,姜军译。Linux设备驱动程序(第二版)。中国电力出版社,2002 2 赵炯著。Linux内核完全注释,2004 3 冯永红,朱善君。裁剪Linux技术分析。2001嵌入式系统及单片机国际学术交流会论文集,2001 本文于2004年8月30日收到。刘新朝:研究生,研究方向为微机控制。

关键字:嵌入式  Linux系统  中断读取 引用地址:构建嵌入式Linux系统

上一篇:优化ROADM的嵌入式控制
下一篇:基于TMS320DM642的电视跟踪系统设计

推荐阅读最新更新时间:2024-03-16 12:57

研华嵌入式边缘智能系统EI-52助力客户远程设备管理
研华嵌入式边缘智能系统EI-52助力客户远程设备管理 为实时传输升级护航,迎接工业互联挑战 智慧工厂被认为是5G技术的重要应用场景之一。 利用5G网络将生产设备无缝连接,并进一步打通设计、采购、仓储、物流等环节,满足工业环境下设备互联和远程交互应用需求。方案通过5G工业网关,连接工厂设备,为设备连接提供高性能、高速率、高可靠、低时延5G网络,实时将工厂现场数据传输到后端运维管理平台,构建连接工厂内外的人和机器为中心的全方位信息系统,实现工厂维护全面升级,生产资源按需分配、个性化生产。 客户应用需求 在与客户的沟通中得知,客户的应用需要有稳定可靠的高速串口以连接PLC,同时,由于客户采用自己发卡的形式,需要有5
[工业控制]
基于嵌入式ARM9的墙面平整度检测仪研究与实现
  房屋的墙面平整度是衡量房屋建筑质量的一项重要指标。现有的墙面平整度检测方法要么操作不方便且效率低下,如靠尺;要么检测仪器本身比较复杂,不易操作,需要专业的操作技巧,如使用 百分表打点 检测;或者仪器本身比较昂贵,无法广泛推广和使用,如利用无协作目标电子全站仪检测。所以研究一种原理简单,操作方便,价格便宜,体积小,便携式的手持移动墙面平整度检测设备是非常有必要且具一定商业价值的。 1 系统的总体设计 系统的目标是:设计一个嵌入式手持设备,实现对墙面平整度的检测。具体的实现过程为:USB摄像头以小分辨率(320*240)采集动态视频,旋转后直接显示在LCD上,通过观察LCD上的动态显示内容确定所选场景是否满足要求。待出现满足要
[嵌入式]
基于<font color='red'>嵌入式</font>ARM9的墙面平整度检测仪研究与实现
谭军:互联产品的嵌入式软件发展
最后的主题演讲人是谭军博士,他发言的题目为《互联产品的嵌入式软件发展》。谭军从热点应用——互联网设备的软件需要分析出发,指出WEB2.0软件将为移动互联产品带来全新和一致的用户体验。 谭军 原ARM中国总裁 各位朋友,上午好。我感触很深,01年我第一次参加单片机系统联谊会,那时候人没有这么多,讨论问题还是怎么定义嵌入式,现在8、9年的发展给我感触很大,其实有三个,第一、讨论的深度、广度,不进推广一个概念,还有很多实践。第二个企业的发展,那时候MiniGUI,还有周立功的公司那时候不到100人吧,现在是900多人。第三个来的人数分布不同,那个时候年龄比较大,现在看到很多老中青,中国的未
[嵌入式]
谭军:互联产品的<font color='red'>嵌入式</font>软件发展
基于PLD的嵌入式系统外存模块设计
摘要:以MCS-96系列单片机为例,介绍了一种采用可编程逻辑器件(PLD)的存储器模块的设计方案,该模块包含了Flash闪存和RAM。提出了一种方便的存储器扩展方法,该方法有效地解决了嵌入式系统尤其是数据采集、存储等系统中存在的存储空间不足问题。该方案具有通用性强、读写控制简单等特点,具有很强的实用性。 关键词:PLD 存储器 RAM 单片机 闪存 在嵌入式系统中,由于设计成本和体积等因素的限制,往往会使CPU(包括DSP、单片机等)存在地址空间不足的问题。很多文献(如参考文献[1]都有相关的存储器扩展方法的介绍, 目前已有的方法通常是借助于CPU的I/0接口产生片选或者高位地址信号, 利用这些信号将内存分页,但当页间跳
[应用]
嵌入式系统及其在医疗仪器设备中的应用
嵌入式系统是先进的计算机技术、半导体技术、电子技术以及各种具体应用相结合的产物,是技术密集、资金密集、高度分散、不断创新的新型集成知识系统。   文中介绍了嵌入式系统的特点及发展,提出了在嵌入式系统开发过程中应遵循的原则,并介绍了嵌入式系统在医疗仪器设备中的应用。   嵌入式系统是计算机技术、通信技术、半导体技术、微电子技术、语音图像数据传输技术,甚至传感器等先进技术和具体应用对象相结合后的更新换代产品,反映当代最新技术的先进水平。嵌入式系统是当今非常热门的研究领域,在PC市场已趋于稳定的今天,嵌入式系统市场的发展速度却正在加快。由于嵌入式系统所依托的软硬件技术得到了快速发展,因此嵌入式系统自身获得了快速发展。根据美国嵌入式系
[工业控制]
码灵半导体:嵌入式MPU是整体市场增长一大亮点
6月30日,在厦门海沧举办的集成电路企业联合产品发布会暨签约仪式上,厦门码灵半导体技术有限公司(简称“码灵半导体”)CEO梁梦雷在演讲中介绍到,公司一直在从事嵌入式处理器的开发,产品主要面向泛工业的应用领域。 梁梦雷表示,我们做产品的原则是紧密贴近客户,能够更准确地解决客户痛点,做出稳定可靠、方便易用的产品。目前,我们规划了RULIA、WOKOO、LONGMA三个平台,公司兼具芯片架构设计、图像处理、国密算法、安全机制、电源域设计和软件及系统应用,多项自主核心技术。 作为国内领先嵌入式应用处理器提供商 ,码灵半导体的产品广泛应用于的物联网网关、工业人机交互HMI、医疗设备、控制显示面板等多类型终端。 据悉,码灵半导体最新量产的
[手机便携]
ARM开发——搭建嵌入式开发环境
ckermit串口工具的下载 sudo apt-get install ckermit 如果我们有新的串口连接上,我们可以通过查看/dev 来看连接的数据 ckermit 配置文件的配置.kermrc set line /dev/ttyUSB0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000
[单片机]
ARM开发——搭建<font color='red'>嵌入式</font>开发环境
将意图转化为行动:走进嵌入式语音控制的新时代
恩智浦发布新一代智能语音技术组合的语音识别引擎。在这篇博文中,我们将探讨开发人员在嵌入式语音控制设计中面临的挑战、我们新的Speech to Intent引擎,以及您如何在应用中使用它。 听到您的声音:嵌入式系统中语音命令的挑战 随着亚马逊、谷歌和苹果等公司推出了具有革命性意义的智能扬声器,嵌入式语音控制的设备已经成为了当下的热门趋势,而这种技术其实已经存在了很多年。通过这些智能扬声器,终端用户第一次体验到了语音优先设备的便捷性、实用性和直观性。语音是这些设备的用户界面(UI),也是它们最重要或唯一的交互方式。借助云端的自然语言理解技术,智能扬声器可以让语音优先设备的终端用户用自然语言与智能设备进行沟通,
[嵌入式]
将意图转化为行动:走进<font color='red'>嵌入式</font>语音控制的新时代
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved