嵌入式主板Linux系统的不同系统比较,了解一下?

虽然大多数 Linux 系统运行在 PC 平台上泹 Linux 也可以作为嵌入式系统的可靠主力。Linux 流行的“back-to-basics”方法使得它的安装和管理比 UNIX 更加简单灵活这对于那些 UNIX 专家们来说又是一个优点,他们巳经因为 Linux 中有许多命令和编程接口同传统的 UNIX 一样而赏识它了

典型的压缩包装 Linux 系统经过打包,在拥有硬盘和大容量内存的 PC 机上运行嵌入式系统可不要这么高的配置。一个功能完备的 Linux 内核要求大约 1 MB 内存而 Linux 微内核只占用其中很小一部分内存,包括虚拟内存和所有核心的操作系统功能在内只需占用 Pentium CPU 系统的 100 K 内存。只要有 500 K 的内存一个有网络栈和基本实用程序的完全的 Linux 系统就可以在一台 8 位总线(SX)的 Intel 386 微处理器上運行的很好了。由于内存要求常常是需要的应用所决定的比如 Web 服务器或者 SNMP 代理,Linux 系统甚至可以仅使用 256 KB ROM 和 512 KB RAM 进行工作因此它是一个瞄准嵌叺式市场的轻量级操作系统。

与传统的实时操作系统相比(RTOS)采用象嵌入式 Linux 这样的开放源码的操作系统的另外一个好处是 Linux 开发团体看来會比 RTOS 的供应商更快地支持新的 IP 协议和其它协议。例如用于 Linux 的设备驱动程序要比用于商业操作系统的设备驱动程序多,如网络接口卡(NIC)驅动程序以及并口和串口驱动程序

快闪 RAM 内存是大多数 Palm 设备用来存储操作系统的专用的存储器。它具有允许操作系统升级的优点还可以鼡于数字式蜂窝电话、数字式照相机、LAN 交换机、PC 卡、数字式机顶盒、嵌入式控制器和其它小型设备。嵌入式系统如嵌入式 Linux,不要求有磁盤驱动器尽管可能使用其它的内存组织方式。因此如果打个比方,Linux 用完了闪存它就可以将其中一部分作为只读的文件系统来存储额外的程序和静态数据。

核心 Linux 操作系统本身的微内核体系结构相当简单网络和文件系统以模块形式置于微内核的上层。驱动程序和其它部件可在运行时作为可加载模块编译到或者是添加到内核这为构造定制的可嵌入系统提供了高度模块化的构件方法。而在典型情况下该系統需结合定制的驱动程序和应用程序以提供附加功能

嵌入式系统也常常要求通用的功能,为了避免重复劳动这些功能的实现运用了许哆现成的程序和驱动程序,它们可以用于公共外设和应用Linux 可以在外设范围广泛的多数微处理器上运行,并早已经有了现成的应用库

Linux 用於嵌入式的因特网设备也是很合适的,原因是它支持多处理器系统该特性使 Linux 具有了伸缩性。因而设计人员可以选择在双处理器系统上运荇实时应用提高整体的处理能力。例如您可以在一个处理器运行 GUI,同时在另一个处理器上运行 Linux 系统

在嵌入式系统上运行 Linux 的一个缺点昰 Linux 体系提供实时性能需要添加实时软件模块。而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分甴于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性这对于实时应用将是一个非瑺严重的弱点。

另一方面现成的 RTOS 完全是为实时性能而设计的,它通过在由用户而非系统级进程启动时分配给某个进程以高于其它进程的優先级的方式来实现可靠性进程在操作系统看来就是在内存里或硬盘驱动器上执行的程序。给他们指定进程 ID 或者数字标识符为的是让操莋系统跟踪正在执行的程序和这些程序的相关联的优先等级这样的方式保证了 RTOS 时间能比 Linux 提供更高的可靠性(可预见性)。但最重要的這还是一种更加经济的选择。

不同类型的嵌入式 Linux 系统

已经有许多嵌入式 Linux 系统的示例;可以有把握地说某种形式的 Linux 能在几乎任一台执行代碼的计算机上运行。例如ELKS(可嵌入 Linux 内核子集)方案计划在 Palm Pilot 上使用 Linux。下面列出了一些更加广为人知的小型嵌入式 Linux 版本:

ETLinux ― 设计用于在小型笁业计算机尤其是 PC/104 模块上运行的 Linux 的完全分发版。

ThinLinux ― 面向专用的照相机服务器、X-10 控制器、MP3 播放器和其它类似的嵌入式应用的最小化的 Linux 分发蝂

 VxWorks、μClinux、μC/OS-II和eCos是4种性能优良并被廣泛应用的实时操作系统本文通过对这4种操作系统的主要性能进行分析与比较,归纳出它们的选型依据和适用领域

VxWorks是美国WindRiver公司的产品,是目前嵌入式系统领域中应用很广泛市场占有率比较高的嵌入式操作系统。VxWorks实时操作系统由400多个相对独立、短小精悍的目标模块组成用户可根据需要选择适当的模块来裁剪和配置系统;提供基于优先级的任务调度、任务间同步与通信、中断处理、定时器和内存管理等功能,内建符合POSIX(可移植操作系统接口)规范的内存管理以及多处理器控制程序;并且具有简明易懂的用户接口,在核心方面甚至町以微缩箌8

J.Labrosse用C语言编写的一个结构小巧、抢占式的多任务实时内核μC/OS-II能管理64个任务,并提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。

Linux从字面意思看是指微控制Linux。同标准嘚Linux相比μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧

system),即嵌入式可配置操作系统它是一个源代码开放的可配置、可移植、面向深度嵌入式应用的实时操作系统。最大特点是配置灵活采用模块化设计,核心部分由小同的组件构荿包括内核、C语言库和底层运行包等。每个组件可提供大量的配置选项(实时内核也可作为可选配置)使用eCos提供的配置工具可以很方便地配置,并通过不同的配置使得eCos能够满足不同的嵌入式应用要求

    任务管理、任务及中断间的同步与通信机制、内存管理、中断管理、文件系统、对硬件的支持和系统移植这几方面是实时操作系统的主要性能。下面就从这几个方面着手对上述4种操作系统进行分析与比较
    任务管理是嵌入式实时操作系统的核心和灵魂,决定了操作系统的实时性能它通常包含优先级设置、多任务调度机制和时间确定性等部分。
    嵌入式操作系统支持多任务每个任务都具有优先级,任务越重要赋予的优先级应越高。优先级的设置分为静态优先级和动态优先级两種静态优先级指的是每个任务在运行前都被赋予一个优先级,而且这个优先级在系统运行期间是不能改变的;动态优先级则是指每个任務的优先级(特别是应用程序的优先级)在系统运行时可以动态地改变
2.1.2 多任务调度机制
    
任务调度主要是协调任务对计算机系统资源的争夺使鼡。对系统资源非常匮乏的嵌入式系统来说任务调度尤为重要,它直接影响到系统的实时性能通常,多任务调度机制分为基于优先级搶占式调度和时间片轮转调度
    基于优先级抢占式调度:系统中每个任务都有一个优先级,内核总是将CPU分配给处于就绪态的优先级最高的任务运行如果系统发现就绪队列中有比当前运行任务更高的优先级任务,就把当前运行任务置于就绪队列中调入高优先级任务运行。系统采用优先级抢占方式进行调度可以保证重要的突发事件及时得到处理。
    时间片轮转调度:让优先级相同的处于就绪状态的任务按时間片使用CPU以防止同优先级的某一任务长时间独占CPU。
    在一般情况下嵌入式实时操作系统采用基于优先级抢占式调度与时间片轮转调度相結合的调度机制。
2.1.3 时间的可确定性
    
嵌入式实时操作系统甬数调用与服务的执行时间应具有可确定性系统服务的执行时间不依赖于应用程序任务的多少。基于此特征系统完成某个确定任务的时间是可预测的。表1具体列出了4种操作系统的调度机制
4种嵌入式实时操作系统都支持多任务,只是在支持任务数量上和任务调度机制上有所不同VxWorks具有高效的任务管理功能,它支持多任务可分配256个优先级,支持优先級抢占式调试和时间片轮转调度实时性最好。μC/OS-II内核是针对实时系统的要求设计实现的只支持基于固定优先级抢占式调度;调度方法简单,可以满足较高的实时性要求μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程分别采用先来先服务和时间爿轮转调度;仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占eCos调度方法丰富,提供了两种基于优先级的调度器(即位图调度器和多級队列调度器)允许用户在进行配置时选择其中一个凋度器,适应性好
2.2 任务及中断间的同步与通信机制
    
实时操作系统的功能一般要通過若干任务和中断服务程序共同完成。任务与任务之间、任务与中断间任务及中断服务程序之间必须协调动作互相配合,这就涉及任务間的同步与通信问题嵌入式实时操作系统通常是通过信号量、互斥信号量、事件标志和异步信号来实现同步,通过消息邮箱、消息队列、管道和共享内存来提供通信服务由于互斥信号量的使用,带来了实时操作系统中常见的优先级反转问题优先级反转是一种不确定的延迟形式,当高优先级任务企图访问已被低优先级占有的共享资源时必须等待低优先级任务释放共享资源;如果这时低优先级任务被一個或多个中优先级任务抢占,那么高优先级任务被延迟的时间将更进一步延长实时性难以保证。因此应采取相关措施以尽鼍避免出现優先级反转问题。实时系统通常采用优先级继承和优先级置顶机制
    优先级继承足指拥有互斥量的任务被提升到与下一个在等待该互斥最嘚最高优先级任务相同的优先级;优先级置顶是指获得互斥量的任务将其优先级提升到一个事先规定好的值。表2为4种操作系统的同步与通信机制的比较

 4种系统都具有灵话的任务间同步与通信机制,都可以通过信号量、消息队列来实现同步与通信但是VxWorks与μClinux都不支持邮箱和倳件标志,而且除了μClinux和eCos中的位图调度器其他操作系统都采取了措施抑制优先级反转。

内存分配原则包括快速性、可靠性和高效性其Φ,快速性要求内存分配过程要尽可能快所以一般采用简单、快速的分配算法;可靠性指的是内存分配的请求必须得到满足;系统强调高效性的要求,不仅仅是对系统成本的要求而且由于系统本身可配置的内存容量也是很有限的,所以要尽可能地避免浪费2.3.2 存储保护
    
通瑺在操作系统的内存中既有系统程序也有用户程序,为了使两者都能正常运行避免程序间相互干扰,需要对内存中的程序和数据进行保護存储保护通常需要硬件支持,在很多系统中都采用MMU并结合软件实现;但由于嵌入式系统的成本限制内核和用户程序通常都在相同的內存空间中。2.3.3     内存分配方式可分为静态分配和动态分配静态分配是在程序运行前一次性分配给相应内存,并且在程序运行期间中不允许洅申请或在内存中移动;动态分配则允许在程序运行整个过程中进行内存分配静态分配使系统失去了灵活性,但对于实时性要求比较高嘚系统是必需的;而动态分配赋予了系统设计者更多自主性可以灵活地调整系统的功能。    Mode可被静态或动态链接。VxWorks为用户提供了两种内存区域Region和PartitionRegion是变长的内存区,用户可以从创建的Region中分配Segment其特点是容易产生碎片,但灵活并且不浪费;Partition是定长的内存区用户可以从刨建嘚Partition中分配Buffer,其特点是不会产生碎片技率高但是易浪费。VxWorks采用最先算法分配内存μC/OS-II把连续的大块内存按分区来管理,每个分区中都包含整数个大小相同的内存块但不同分区之间内存的太小可以不同。用户动态分配内存时只须选择一个适当的分区,按块来分配内存释放时将该块放回到以前所属的分区,这样就消除了因多次动态分配和释放内存所引起的碎片问题μClinux是针对没有MMU的处理器设计的,不能使鼡处理器的虚拟内存管理技术只能采用实存储器管理策略。系统使用分页内存分配方式在启动时对实际存储器进行分页。系统对内存嘚访问是直接的操作系统对内存空间没有保护多个进程可共享一个运行空间,所以即使是一个无特权进程调用一个无效指针也会触发┅个地址错误,并有可能引起程序崩溃甚至系统崩溃eCos对内存分配既不分段也不分页,而是采用一种基于内存池的动态内存分配机制通過两种内存池类来实现两种内存管理方法:一种是变长的内存池;另一种是定长的内存池,类似于VxWorb的管理方案表3为4种操作系统内存管理嘚比较。2.4     中断管理是实时系统中一个很重要的部分系统经常通过中断与外部事件交互。主要考虑是否支持中断嵌套、中断处理机制、中斷延时等(1)VxWorks的中断管理    VxWorks操作系统中断管理采用中断处理与普通任务分别在不同栈中处理的中断处理机制,使得中断只会引发一些关键寄存器的存储而不会导致任务的上下文切换,从而极大地缩短了中断延时同时,VxWorks的中断处理程序只能在最短时间内通告中断的发生而将其他的非实时处理尽量放入被引发的中断服务程序中来完成,这也缩短了中断延时但是凼为中断服务程序不在一个固定的仟务上下文中執行,而目没有任务控制块所以所有中断服务程序使用相同的中断堆栈。为了能处理最坏情况下的中断嵌套必须分配足够大的中断堆棧空间。(2)μC/OS-II的中断管理    μC/OS-II中断处理比较简单一个中断向量上只能挂一个中断服务子程序ISR,而且用户代码必须都在ISR中完成ISR需要做的倳情越多,中断延时也就越长内核所能支持的最大嵌套深度为255。(3) μClinux的中断管理    μClinux操作系统将中断处理分为两部分:顶半处理和底半处理在顶半处理中,必须关中断运行且仅进行必要的、非常少、速度快的处理,其他处理交给底半处理;底半处理执行那些复杂、耗时的處理而且接受中断。因为系统中存在有许多中断的底半处理所以会引起系统中断处理的延时。(4)eCos的中断管理    eCos使用了分层式中断处理机制把中断处理分为传统的ISR和滞后中断服务程序DSR。类似于μClinux的处理机制这种机制可以在中断允许时运行DSR,因此在处理较低优先级中断时允許高优先级的中断和处理为了极大地缩短中断延时,ISR应当可以快速运行如果中断引起的服务量少,则ISR可以单独处理中断;如果中断服務复杂则ISR只屏蔽中断源,然后交由DSR处理2.5     所谓“文件系统”是指负责存取和管理文件信息的机构,也可以说是负贵文件的建立、撤销、組织、读写、修改、复制以及对文件管理所需的其他资源实施管理的软件部分。VxWorks操作系统在文件系统与设备驱动程序之间使用一种标准嘚I/O口操作接口且支持MS-DOS、RT-11、RFS、CD-ROM、RAW等文件系统。这样在单个VxWorks操作系统中可以运行多个相同或不同种类的文件系统。μC/OS-II是面向中小型嵌入式系统的即使包含全部功能,编译后内核也不到10 KB所以系统本身并没有提供对文件系统的支持。但是μC/OS-II具有良好的扩展性能如果需偠也可自行加入文件系统的内容。μClinux继承了Linux完善的文件系统性能它支持ROMFS、NFS、ext2、MS-DOS、JFFS等文件系统。但一般采用ROMFS文件系统这种文件系统相对於一般的文件系统(如ext2)占用更少的空间。但是ROMFS文件系统不支持动态擦写保存对于系统需要动态保存的数据须采用虚拟RAM盘/JFFS的方法进行处理。eCos操作系统的可配置性非常强大用户可以自己加入所需的文件系统。2.6 KB和10 KB所需的最小数据RAM空间分别为4 KB和10 KB。总的来说4种系统对硬件的要求比较低,比较经济具体比较如表4所列。

    嵌入式操作系统移植的目的是使嵌入式操作系统能在某个微处理器或微控制器上运行4种系统ΦVxWorks是商用操作系统的有很多API函数及相关技术支持,所以移植和二次开发比较容易但是移植成本较高。其他3种系统的结构化设计便于把与處理器相关的部分分离出来所以被移植到新的处理器上也是可能的。μC/OS-II的移植相对比较简单只需要修改与处理器相关的代码就可以叻。μClinux是Linux针对嵌入式系统的一种改良其结构比较复杂。移植μClinux目标处理器除了应满足μC/OS-II移植所需的条件外,还需要足够容量的外部ROM囷RAMeCos系统的可移植性明显比μC/OS-II和μClinux好。在eCos系统中每个硬件平台都有一个单独的目录,用于存放引对这一硬件平台的硬件抽象层的代码囷配置信息;而μClinux的硬件抽象层的代码则分布在好几个目录中通过命令来选择不同硬件平台的代码。所以修改eCos代码相对简单,移植也楿对容易

    这4种嵌入式实时操作系统在嵌入式系统的应用非常广泛,但是又具有各自的特点根据上述比较,归纳出各自的适用领域
    ①VxWorks昰一套娄似于Unix的实时操作系统,它内建了符合POSIX规范的内存管理以及多处理器控制程序,并且具有简明易懂的用户接口在核心方面甚至鈳以微缩到8 KB。它由400多个相对独立的、短小精悍的目标模块组成用户可根据需要选择适当模块来裁剪和配置系统,有效地保证了系统的安铨性和可靠性它被广泛地应用在通信、军事、航空、航天等高尖技术及实时性要求极高的领域,尤其是在许多关键应用方面VxWorks还是一枝獨秀。例如美国波音公司就在其最新的787客机中采用了此操作系统;而在外层空间探索领域,VxWorks则一直是美国太空总署NASA的最爱
    ②μC/OS-II是一個结构简单、功能完备和实时性很强的嵌入式操作系统内核,适合于广大的嵌入式系统开发人员和爱好者入门学习以及高校教学和科研。μC/OSII很适合开发那些对系统要求不是很苛刻且RAM和ROM有限的各种小型嵌入式系统设备。
    ③μClinux最大特点在于针对无MMU处理器设计可以利用功能强大的Linux资源,因此适合开发对事件要求不高的小容量、低成本的各类产品特别适用于开发与网络应用密切相关的嵌入式设备或者PDA设备。例如CISCO公司的2500/3000/4000路由器就是基于μClinux操作系统开发的。
    ④eCos最大特点是配置灵活而月是面向深度嵌入 式应用的,很适合用于一些商业级戓工业级对成本敏感的

    嵌入式系统,例如消费电子类领域中的一些应用

原标题:嵌入式Linux底层系统怎么学看看这个牛人的总结

很多初学者会问,嵌入式Linux怎么学下面就来讨论讨论这个问题。

嵌入式Linux可以分为两部分:底层系统、应用开发 

C语言、数据结构、JAVA什么的需学好。嵌入式应用开发和PC上的应用开发并没有什么特别要注意的也许你说在嵌入式上要做些优化,是的要优化,但是未经优化的程序和PC上的程序开发没什么差别另外,当你有能力去优化时你已经不用来问这个问题了。具体到某个例子比如说開发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也用Android这个时候你应该去学学QT、Android的编程。但是基础还是C或JAVA在此基础上去熟悉它们的接口。你学过VC的话也是要花时间去了解那些类、控件的。 

如果你想学习底层系统这是我的专长,倒是可以说一点 

在回答这个问题之前,峩先回答:不少人问我到底是学驱动还是学应用? 我只能说凭兴趣并且驱动和应用并不是截然分开的。 

1. 我们说的驱动其实并不局限於硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念 想写出一个好的应用,想比较好的解决应用碰到的问题这些知识你應该懂 2. 做应用门槛低,特别是现在的ANDROID纯JAVA。做应用的发展路径个人认为就是业务纯熟比如在通信行业、IPTV行业、手机行业,你了解行业的需求所以,当领导的人多是做应用的。 3. 做驱动其实我不想称为“做驱动”,而是想称为“做底层系统”做好了这是通杀各行业。峩工作几年做过手机、IPTV、会议电视,但是这些产品对我毫无差别因为我只做底层。他们的业务跟我没关系当应用出现问题,他们解決不了时我就会从内核角度给他们出主意,给他们提供工具 做底层的发展方向,个人认为是技术专家 4. 其实,做底层还是做应用之間并没有一个界线,有底层经验再去做应用,你会感觉很踏实有了业务经验,你再了解一下底层很快就可以组成一个团队。

回到怎麼学的问题上嵌入式Linux底层系统包含哪些东西?不要急举一个例子你就知道了。  

1. 电脑一开机那些界面是谁显示的?是BIOS它做什么?一些自检然后从硬盘上读入windows,并启动它类似的,这个BIOS对应于嵌入式Linux里的bootloader这个bootloader要去Flash上读入Linux内核,并启动它 

2. 启动windows的目的是什么?当然是仩网聊天什么的了这些上网、聊天工具在哪?在C盘、D盘上所以, windows要先识别出C盘、D盘。在Linux下我们称为根文件系统

  3. windows能识别出C盘、D盘,那么肯定能读写硬盘才行这涉及的东西称为驱动程序。当然不仅仅是硬盘还有网卡、USB等等。嵌入式Linux能从Flash上读出并执行应用程序肯定也得囿Flash的驱动程序啊,当然也不仅仅是Flash

先说到这里吧,嵌入式LINUX里含有bootloader, 内核, 驱动程序、根文件系统这4大块 

它就是一个稍微复杂的裸板程序。泹是要把这裸板程序看懂写好一点都不容易Windows下好用的工具弱化了我们的编程能力。 

很多人一玩嵌入式就用ADS、KEIL你能回答这几个问题吗? 

2. 泹是Flash一般是只能读不能直接写的如果我用到全局变量,这些全局变量在哪里 

答:全局变量应该在内存里 

3. 那么谁把全局变量放到内存里詓? 

答:长期用ADS、KEIL的朋友你能回答吗?这需要"重定位"在ADS或KEIL里,重定位的代码是制作这些工具的公司帮你写好了 你可曾去阅读过? 

4. 内存那么大我怎么知道把"原来存在Flash上的内容"读到内存的"哪个地址去"?答:这个地址用"链接脚本"决定在ADS里有scatter文件,KEIL里也有类似的文件但昰,你去研究过吗 

5. 你说重定位是把程序从Flash复制到内存,那么这个程序可以读Flash啊 答:是的,要能操作Flash当然不仅仅是这些,还有设置时鍾让系统运行得更快等等 先自问自答到这里吧,bootloader这一个裸板程序其实有3部分要点: 

1. 对硬件的操作 2. 对ARM体系处理器的了解 3. 程序的基本概念:重定位、栈、代码段数据段BSS段什么的。

对硬件的操作需要看原理图、芯片手册。这需要一定的硬件知识不求你能设计硬件,但是至尐能看懂; 不求能看懂模拟电路 但是要能看懂数字电路。这方面的能力我是在学校里学到的微机原理、数字电路这2本书(书名忘了)就足够叻。但是我怀疑你有无耐心把这2本书看完我不知道现在有没有更快捷的书。想速成的话就先放掉这块吧,不懂就问GOOGLE、发贴 

另外,芯爿手册是肯定要读的别去找中文的,就看英文的开始是非常痛苦,以后就会发现那些语法、词汇一旦熟悉后 读任何芯片手册都很容噫。 

对ARM体系处理器的了解, 看杜春蕾的

吧里面讲有汇编指令,有异常模式、MMU等也就这3块内容需要你了解。 

体系架构与编程>

程序的基本概念王道当然是去看编译原理了。可惜这类书绝对是天书级别的。劝你若非超级天才还是别去看了就看我写的和第1期视频吧,别担心不用花钱。照着视频把硬件相关的实验做了这些概念就清楚了。我还没有发现第2套讲这些概念的书或视频允许我盲目吹嘘一回。 对於bootloader我学习时是先看了

,然后自己写程序把各个硬件的实验都做了一遍比如GPIO、时钟、 SDRAM、UART、NAND。把它们都弄清楚了组台在一起就很容易看慬u-boot了 。

总结一下看懂硬件原理图、看芯片手册,这需要你自己去找资料剩下的,就按和第1期视频的章 节目录去学习吧 

体系架构与编程>

想速成的人,先跨过内核的学习直接学习怎么写驱动。 

想成为高手内核必须深刻了解。注意我说的是了解,我没奢望去写出一个內核

  要对里面的调度机制、内存管理机制、文件管理机制等等有所了解。 

,请看薄的那本(浮燥的社会讲求速度, 呵), 

, 想了解哪一块就读哪一节

驅动包含两部分:硬件本身的操作、驱动程序的框架 

又是硬件,还是要看得懂原理图、读得懂芯片手册多练吧。 说到驱动框架有一些书介绍一下。LDD3,即

老外写的那本,里面介绍了不少概念值得一读。但是它的作用 也就限于介绍概念了。我基本上是入门之前用它来熟悉一下概念入门后就扔掉了。 

驱动方面比较全的介绍应该是宋宝华的

了,老实说我只看过目录有不少人说好,这里推荐一下 

设備驱动开发详解>

绝对是超5星级推荐。你别指望把它读完1800多页,上下两册呢我是某一块不清楚 时,就去翻一下它任何一部分,这书都鈳以讲上2、3百页非常详细。并且是以某个目标来带你分析内核源码它以linux 2.4为例,但是原理相通同样适用于其它版本的linux。 

还有没有其他介绍呵呵,当然有了韦东山Linux视频第2期。里对驱动讲得不多不够深入。 

于是我录制了这期视频不仅仅教你怎么写怎么改驱动,还教伱为什么这样写这样改驱动 

每一个驱动都是现场编写: 

1. 用绘图板画图讲解──相当于学校里老师在黑板上画图讲解,很直观 绝对不是对着PPT念 2. 用source insight当场写程序,从第1行开始写每一课都是这样。我讲了20多个驱动就写了20多个程序。 3. 写完就编译、测试 4. 很全面,字符设备驱动、塊设备、网卡驱动3大类齐全硬件介绍、驱动框架分析、测试3大类齐全。

培训机构里教的内容远不及这期视频丰富。我在多个培训机构講过课从没看到哪个老师敢每一课都当场讲解当场编写代码 当场测试,除我之外!也没看到哪个培训机构讲完这些内容──因为时间不夠讲完起码要一个月,但是这部分基本只有2周授课时间 把你手上的开发板所涉及的硬件,都去尝试写一个驱动吧有问题就先"痛苦地思考",思考的过程中你会把很多不相关的知识串联起来最终贯通。 

四、根文件系统: 

大家有没有想过这2个问题: 1. 对于Linux做出来的产品有些用作监控、有些做手机、有些做平板。那么内核启动后挂载根文件系统后,应该启动哪一个应用程序呢 答:内核不知道也不管应该啟动哪一个用户程序。它只启动init这一个应用程序它对应/sbin/init。 显然这个应用程序就要读取配置文件,根据配置文件去启动用户程序(监控、掱册界面、平板界面等等这个问题提示我们,文件系统的内容是有一些约定的比如要有/sbin/init,要有配置文件

2. 你写的hello,world程序有没有想过里面鼡到的printf是谁实现的? 答:这个函数不是你实现的是库函数实现的。它运行时得找到库。 

这个问题提示我们文件系统里还要有库。 简單的自问自答到这里要想深入了解,可以看一下busybox的init.c就可以知道init进程做的事情了。 当然也可以看里构建根文件系统那章。 说一下我的學习经历吧 

1. 我在学校时读的是物理电子专业,其实课程里没有教怎么设计电路只是教了些电子电路方面的知识。PCB的设计是在实验室里洎学的只设计过2层板,现在忘记得差不多了但是保留了看原理图、看芯片手册的能力。 2. 选修了软件学位对软件设计挺感兴趣,但是吔只是学了C语言、数据库而已凭着兴趣做了不少竞赛题。没能力去参加竞赛但是把C语言练得很扎实。 3. 在实验室、在第1家公司就是设計些简单的PCI卡,写一下windows的驱动程序 4. 在第2家公司用51单片机做车载电话,开始走上纯软件的道路 5. 开始感到单片机的不足,辞职半年闭门学Linux从red hat怎么操作开始。步骤就是先看

再自己写裸板程序操作硬件,接着到分析u-boot同时看

在写裸板时,建议各位加强对中断的理解内核就昰用中断来完成各种功能的。 

6. 分析完u-boot就开始进行简单的驱动编程了,这时候能力还很弱。 

7. 开始去中兴上班工作2年,编写各类驱动、解决各类问题(驱动问题、帮助定位应用问题)能力得到煅炼。

体系架构与编程>

本文来自大风号仅代表大风号自媒体观点。

我要回帖

更多关于 嵌入式主板Linux系统 的文章

 

随机推荐