ARM与嵌入式linux的入门建议
- 格式:doc
- 大小:29.50 KB
- 文档页数:3
嵌入式的心得体会(通用21篇)(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如职场文书、公文写作、党团资料、总结报告、演讲致辞、合同协议、条据书信、心得体会、教学资料、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, this store provides various types of classic sample essays for everyone, such as workplace documents, official document writing, party and youth information, summary reports, speeches, contract agreements, documentary letters, experiences, teaching materials, other sample essays, etc. If you want to learn about different sample formats and writing methods, please pay attention!嵌入式的心得体会(通用21篇)写心得体会可以培养我们的观察力和思考能力,让我们更加敏锐地发现生活中的细节与感悟。
作为一个新人,怎样学习嵌入式Linux?(韦东山)被问过太多次,特写这篇文章来回答一下。
在学习嵌入式Linux之前,肯定要有C语言基础。
汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。
C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。
比如写一个数组排序、输入数字求和什么的。
学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。
以前我是用VC来练习C语言的,经常去尝试着写一些C语言竞赛的题目。
它们是纯C、纯数学、纯逻辑的题目,不涉及界面这些东西,很适合煅炼你的编程能力。
回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux 可以分为两部分:底层系统、应用开发。
如果你是想做应用开发,那么你去把C 语言、数据结构、JAVA什么的学好吧。
嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。
也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。
另外,当你有能力去优化时,你已经不用来问这个问题了。
具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。
但是基础还是C或JAVA,在此基础上去熟悉它们的接口。
你学过VC的话,也是要花时间去了解那些类、控件的。
如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。
在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?我只能说凭兴趣,并且驱动和应用并不是截然分开的1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。
想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。
做应用的发展路径个人认为就是业务纯熟。
比如在通信行业、IPTV行业、手机行业,你了解行业的需求。
嵌入式linux系统开发标准教程嵌入式Linux系统开发是一门非常重要的技术,它在嵌入式设备、物联网和智能家居等领域中得到广泛应用。
本文将介绍嵌入式Linux系统开发的标准教程,帮助读者了解该技术的基本原理和常用的开发工具。
一、嵌入式Linux系统开发的基本原理嵌入式Linux系统开发是指将Linux操作系统移植到嵌入式设备中,并针对特定的应用领域进行定制开发。
它与传统的桌面Linux系统有很大的区别,主要体现在以下几个方面:1. 硬件平台的选择:嵌入式设备通常采用ARM架构或者其他低功耗的处理器架构,而不是传统的x86架构。
因此,在进行嵌入式Linux系统开发时,需要根据具体的处理器架构进行相应的移植和优化。
2. 精简的内核:由于嵌入式设备的资源有限,为了提高系统性能和节省资源,嵌入式Linux系统通常会精简内核。
这需要对Linux内核的源代码进行裁剪和优化,以去除不必要的模块和功能,并保留对应用需求的必要功能。
3. 定制化的驱动程序和应用程序:嵌入式设备通常需要与各种外设进行交互,因此需要编写相应的驱动程序。
此外,根据具体的应用需求,还需要定制相关的应用程序和用户界面。
二、嵌入式Linux系统开发的工具嵌入式Linux系统开发需要使用一些常用的工具,下面是一些常用的工具和其功能的介绍:1. 交叉编译工具链:由于嵌入式设备和开发主机的处理器架构不同,无法直接在开发主机上编译和运行目标代码。
因此,需要使用交叉编译工具链,在开发主机上生成适用于目标设备的可执行文件。
2. 调试工具:在嵌入式Linux系统开发过程中,调试是非常重要的一环。
常用的调试工具包括GDB(GNU调试器)和strace(系统调用跟踪工具),它们可以帮助开发人员追踪程序的执行过程和定位错误。
3. 文件系统工具:嵌入式设备的存储资源有限,需要使用文件系统来组织和管理存储的数据。
常用的文件系统工具包括mkfs(创建文件系统)、mount(挂载文件系统)以及文件传输工具(如scp和rsync)等。
LINUX学习计划怎么作为一名IT从业者或者计算机爱好者,学习Linux操作系统是非常有必要的。
Linux操作系统在服务器领域占有很大的市场份额,同时也在嵌入式系统和云计算领域有很大的应用。
本文将分享一份适合新手的Linux学习计划,通过系统的学习和实践,帮助大家掌握Linux系统的基础知识和操作技能。
初学者可能在刚开始学习Linux时会觉得有些困难,但只要坚持学习,积极实践,一定可以掌握Linux系统的精髓。
以下是一份Linux学习计划,希望对新手有所帮助:第一阶段:了解Linux基础知识1. 了解Linux操作系统的起源和发展历史,了解Linus Torvalds创造Linux的初衷和理念;2. 介绍Linux操作系统的特点和优势,与Windows和Mac OS进行对比,了解各自的优缺点;3. 了解Linux的发行版,如Ubuntu、CentOS、Red Hat等,以及它们之间的区别和应用场景;4. 掌握Linux系统的基本架构,包括内核、shell、文件系统等;5. 了解Linux系统的常用命令,掌握基本的文件操作和目录管理。
第二阶段:学习Linux系统管理1. 学习Linux系统的安装和配置,包括磁盘分区、引导加载器、网络设置等;2. 掌握Linux系统的用户管理和权限控制,包括新增用户、删除用户、修改密码、权限设置等;3. 学习Linux系统的软件包管理,包括使用apt、yum等工具进行软件的安装、更新和卸载;4. 熟悉Linux系统的服务管理,包括启动、停止、重启各种系统服务;5. 学习Linux系统的文件备份和恢复,包括使用tar、rsync等工具进行文件备份、恢复和同步。
第三阶段:了解Linux网络和安全1. 学习Linux系统的网络配置,包括IP地址、子网掩码、网关、DNS等的设置;2. 了解Linux系统的网络服务,包括HTTP、FTP、SSH、SMTP等服务的配置和管理;3. 学习Linux系统的防火墙配置,包括iptables、firewalld等工具的使用;4. 了解Linux系统的安全策略,包括密码策略、SSL证书、密钥对等的管理和配置;5. 学习Linux系统的日志管理,包括查看、分析和管理系统日志文件。
基于ARM9的嵌入式Linux应用开发平台的分析与实现陈斌【摘要】随着经济的迅速发展以及科学技术水平的不断提高,IT行业取得了较大程度上的进步,为我国国民经济的发展以及人民生活水平的提高做出重要贡献。
尤其是近几年来,信息技术、网络技术飞速发展,IT领域不断发展与升级,在这种环境之下,嵌入式系统成为IT领域的重要焦点之一。
目前状况下,行业内存在着诸多的嵌入式系统,而在这些嵌入式系统当中,Linux最为受到青睐,这主要是因为Linux具有自身的强大优势,主要表现在三个方面,分别是元代码开放、功能强大一级级易于移植等。
就目前市场状况而言,ARM9系列的嵌入式微处理器已经成为嵌入式系统首选的处理器产品,本文就在此基础之上针对基于ARM9的嵌入式Linux应用开发平台的分析与实现进行有益探讨。
【期刊名称】《佳木斯职业学院学报》【年(卷),期】2014(000)005【总页数】2页(P1-2)【关键词】嵌入式系统 ARM9 Linux应用开发平台文件系统【作者】陈斌【作者单位】铁岭师范高等专科学校【正文语种】中文【中图分类】TP316.811.嵌入式系统模型图1显示的主要是嵌入式系统的模型结构:如果从物理层面的角度对其进行一定程度上的分析,可以将嵌入式计算系统理解成一个专用的电子系统,一般情况下,这一专用的电子系统都处于一个非电子系统环境之下,且这一系统环境具有一定的复杂性。
至于这两种系统的关系,可以对其进行一定程度的抽象化处理,即具有复杂性的非电子系统是嵌入式系统的外部环境,我们将其称为被嵌入的系统。
就一般状况而言,整个系统之中所包含的嵌入式系统为多个,同时,嵌入式系统能够与外界进行直接的通信。
对于嵌入式系统而言,它能够提供一个专门的服务给被嵌入系统,这一服务主要表现为两个方面:一方面,这一服务可以表现为对外界输入的响应;另一方面,这一服务也可以是对被嵌入系统或者与之相邻的嵌入式系统数据的响应。
就如现代机电控制系统,对于这一系统而言,它是一种分布式的系统,在这种系统环境之下,各个处理单元都是通过网络进行一定程度上的连接的。
单片机嵌入式操作系统选择指南适合你的系统在嵌入式系统领域,单片机是一种重要的组成部分,而选择合适的操作系统对于单片机的功能和性能起着决定性的作用。
本文将介绍一些常见的单片机嵌入式操作系统,并针对不同应用场景提供一些建议,以帮助选择适合你的系统。
一、嵌入式操作系统的重要性嵌入式系统通常用于控制和管理各种设备,如智能家居、医疗设备、交通工具等。
选择合适的嵌入式操作系统可以提升系统的稳定性、安全性和性能。
以下是一些常见的嵌入式操作系统。
二、常见的嵌入式操作系统1. 实时操作系统(RTOS)实时操作系统(RTOS)是一种专门设计用于处理实时任务的操作系统。
它具有以下特点:高度可靠、响应时间短、实时性强。
常见的RTOS有嵌入式Linux、FreeRTOS、uC/OS等。
2. 裸机编程裸机编程是指直接在单片机上编写程序,不依赖于操作系统。
这种方式效率高,资源占用少,但对开发者的要求较高。
3. 嵌入式Linux嵌入式Linux是一种基于Linux内核的操作系统,具有强大的功能和广泛的应用领域。
它支持多线程、网络连接、文件系统等特性,适用于对功能要求较高的嵌入式系统。
4. uC/OSuC/OS是一种采用优先级调度算法的实时操作系统,具有较小的内存占用和快速的响应时间。
它适用于对实时性要求较高的系统,如工业自动化和航空航天。
5. FreeRTOSFreeRTOS是一种开源的实时操作系统,具有小巧、高效、可靠的特点。
它适用于资源受限、对实时性要求较高的系统,如传感器节点和嵌入式设备。
三、选择适合的操作系统在选择嵌入式操作系统时,需要考虑以下几个因素:1. 功能需求首先需要明确系统的功能需求,包括任务调度、网络连接、文件系统等。
根据需求选择适合的操作系统。
2. 系统的资源限制考虑系统的处理能力、内存大小等资源限制。
对于资源受限的系统,选择轻量级的操作系统或裸机编程可能更为合适。
3. 开发人员的经验和技术开发人员的经验和技术能力对选择操作系统也起着关键的作用。
嵌入式操作系统的选择与移植技巧嵌入式操作系统(Embedded Operating System)是一种特定用途的操作系统,设计用于在嵌入式系统中运行。
嵌入式操作系统必须满足对资源需求低、实时性强、稳定性高以及易于移植等要求。
在选择和移植嵌入式操作系统时,开发者需要考虑多个因素,并采取相应的策略和技巧。
1. 嵌入式操作系统选择的因素在选择嵌入式操作系统之前,需要考虑以下因素:1.1 系统需求:开发者需要明确嵌入式系统的功能要求、实时性需求、资源约束以及系统体积等。
不同的嵌入式系统有不同的需求,因此选择的操作系统要能够满足这些要求。
1.2 可用的硬件平台:在选择操作系统时,需要考虑与可用的硬件平台的兼容性。
一些嵌入式操作系统可能只支持特定的处理器架构和外设类型。
1.3 开发者的经验和熟悉度:考虑到开发者的经验和熟悉度,选择一个熟悉的操作系统或具有良好文档支持的操作系统有助于提高开发效率。
1.4 社区支持:选择一个有活跃社区支持的操作系统可以帮助开发者解决问题和获取最新的更新和补丁。
1.5 许可证和成本:考虑到操作系统的许可证和成本,确保选择的操作系统符合项目的预算要求。
综上所述,综合考虑系统需求、硬件平台、开发者经验、社区支持以及成本等因素,将有助于选择适合的嵌入式操作系统。
2. 嵌入式操作系统移植的技巧嵌入式操作系统的移植是将操作系统移植到新的硬件平台上,以便在该平台上运行。
以下是一些移植嵌入式操作系统的技巧:2.1 硬件驱动移植:根据新的硬件平台特性,需要移植相关的硬件驱动程序,确保系统能够与外设正确地交互。
这包括串口、以太网、显示设备和存储设备等。
2.2 启动代码移植:移植启动代码是将系统从初始状态引导到操作系统运行的关键步骤。
需要根据新的硬件平台重新编写启动代码,确保正确初始化硬件并加载操作系统。
2.3 内核移植:内核是嵌入式操作系统的核心部分,包括任务调度、内存管理和设备驱动等功能。
在移植过程中,需要根据新的硬件平台重新配置内核,并修改相关的设备驱动程序。
第7章ADS集成开发环境本章将介绍ARM开发环境ADS(ARM Developer Suite)。
它是ARM公司推出的新一代关于ARM处理器的编译、链接和调试集成环境。
它与一般传统调试方法的调试系统有以下不同。
一是ADS集成开发环境把编译、链接和仿真调试分别集成在两个环境中:把编译和链接集成在一个环境中,全名叫CodeWarrior for ARM Developer Suite,一般简称CodeWarrior for ADS,很多情况下把其中的图形界面称为CodeWarrior IDE;而把仿真调试环境集成在一个称为ARM eXtended Debugger的环境中,一般简称AXD。
二是ADS既提供了图形环境编译、链接和调试方法,又提供了命令行编译、链接和调试方法,两种方法各具特色。
7.1 命令行开发工具命令行开发工具完成将源代码编译,链接成可执行代码的功能。
ADS提供了很多的命令行开发工具,包括有armcc、armcpp、tcc等。
熟悉这些命令对于快速掌握ADS的使用很有帮助,特别是在调试的时候,能够起到事半功倍的效果。
7.1.1 使用armccarmcc是ARM的C编译器。
这个编译器通过了Plum Hall C Validation Suite为ANSI C的一致性测试。
armcc将用ANSI C编写的程序编译成32位ARM指令代码。
因为armcc是最常用的编译器,所以对此做一个详细的介绍。
在命令控制台环境下,输入命令:armcc–help可以查看armcc的语法格式以及最常用的一些操作选项。
armcc最基本的用法为:armcc [options] file1 file2 ... file N这里的option是编译器所需要的选项,file1,file2…file N是相关的文件名。
下面介绍一些常用的操作选项。
●c:表示只进行编译不链接文件。
●C:(注意这是大写的C)禁止预编译器将注释行移走。
ARM入门学习方法ARM(Advanced RISC Machines)是一款广泛应用于嵌入式系统的处理器架构。
在现代智能手机、平板电脑和其他嵌入式设备到工控机等各种领域中,ARM处理器都是非常常见的。
对于初学者来说,学习ARM处理器并不是一件容易的事情,因为它涉及到底层计算机体系结构和汇编语言的知识。
以下是一些学习ARM的入门方法,希望能对初学者有所帮助。
1.了解计算机体系结构的基础知识:在学习ARM之前,了解计算机体系结构的基础知识是非常重要的。
了解计算机内部的组成部分,例如中央处理器(CPU)、存储器(内存)和输入输出设备等,对于理解ARM的工作原理和操作方式是必要的。
2.学习汇编语言:学习ARM处理器需要理解其指令集和汇编语言。
汇编语言是一种低级别的语言,用于与计算机硬件进行交互。
学习汇编语言可以帮助你理解ARM指令的功能和操作方式,并且可以更深入地了解ARM处理器的内部工作原理。
3.寻找合适的学习资源:有很多书籍、在线教程和视频教程可以用于学习ARM处理器。
寻找一些适合自己学习风格的资源,并坚持学习。
一些推荐的资源包括《ARM体系结构与编程》、《ARM嵌入式系统开发与应用》等。
5.进行实际项目练习:书本知识只是理论的一部分,实践才是真正掌握ARM的关键。
尝试编写一些简单的ARM汇编程序,并通过模拟器或硬件开发板进行调试和运行。
从简单的程序开始,逐渐挑战更复杂的项目,加深对ARM处理器的理解和掌握。
6.参加社区和论坛讨论:加入ARM相关技术社区和论坛,与其他ARM学习者和专业人士交流和讨论。
这样可以获取更多的学习资源和经验分享,并且可以解决在学习过程中遇到的问题。
7.持续学习和更新:由于技术的发展和更新,ARM处理器的版本和特性也在不断更新。
持续学习和更新自己的知识,关注最新的ARM处理器架构和技术趋势,可以帮助你保持竞争力并适应快速变化的嵌入式行业。
学习ARM处理器需要时间和耐心,但掌握这一技能将为你打开嵌入式系统领域的大门,并为你的职业发展提供更多机会。
ARM设计和嵌入式系统开发随着科技的发展,嵌入式系统的运用越来越广泛。
嵌入式系统是一类具有特定功能的计算机系统,主要应用于各种电子设备中,例如手机、电视、汽车等。
ARM设计及其开发嵌入式系统是一门不可或缺的技术。
一、ARM设计的基本概念ARM,全称为Advanced RISC Machines,即优化的精简指令集计算机。
ARM架构具有高度可制定性、低功耗、高效能和低成本等优点,可以处理来自不同应用领域的复杂问题。
二、ARM设计的应用场景在智能手机和平板电脑等行业中,ARM处理器具有出色的应用。
它们能够支持更高的时钟速度,并达到更高的效率。
此外,ARM处理器还广泛应用于能源管理、智能电网、自动驾驶汽车、工业自动化和可穿戴设备等领域。
三、嵌入式系统的开发流程嵌入式系统开发是一项复杂的任务,整个开发过程需要经历多个阶段,包括系统规划、硬件设计、软件设计和测试等。
1.系统规划系统规划需要确保系统的设计符合需求,并能够在特定的环境中正常工作。
在规划阶段,需要分析用户的需求,确定系统的目标和功能,盘点硬件和软件的资源,以及确定数据流程和输入输出。
2.硬件设计硬件设计阶段需要实现系统的电子组件。
在设计时,需要选择适当的硬件平台、器件和接口,并根据用户需求编写设备驱动程序。
3.软件设计软件设计是嵌入式系统开发的最重要的一个步骤。
在这个阶段,需要编写驱动程序、应用程序和底层函数等。
4.测试测试是确保系统正常工作的最终阶段。
在测试时,需要使用不同的方法来验证系统的功能。
包括单元测试、模块测试以及整体测试等。
四、嵌入式系统的关键应用相比于传统的计算机系统,嵌入式系统具有更广泛的应用领域。
例如,它们在自动化和控制系统中可以帮助机器人和其他设备智能化、提高能源效率,和尽量减少环境影响。
此外,还可以在交通、制造和医疗保健等行业中应用。
例如,在汽车制造业中,嵌入式系统可用于实现自动驾驶技术,帮助人们实现更安全和更高效的交通方式。
一、嵌入式系统的概念着重理解“嵌入”的概念主要从三个方面上来理解。
1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡.比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址, 可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。
IXP系列最高主频可以达到 1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。
IXP系列应该是目标基于ARM体系统结构下由 intel 进行整合后成Xscale内核的最高的处理器了。
2、从软件上看,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。
而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入",比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装.3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。
以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科二、嵌入式系统的分层与专业的分类.嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。
Linux系统新手学习的11点建议随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起。
这里介绍学习Linux的一些建议。
一、从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。
例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了Linux 的基础之后,应该就可以很轻易的解决掉这方面的问题。
而有些朋友们常常一接触Linux 就是希望构架网站,根本没有想到要先了解一下Linux 的基础。
这是相当困难的。
二、Linux命令是必须学习虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。
Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。
举一个例子: Linux的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手.它的功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间. 不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解Linux系统:安装和登录命令:login、shutdown、halt、reboot 、mount、umount 、chsh 文件处理命令:file、mkdir、grep、dd、find、mv 、ls 、diff、cat、ln 系统管理相关命令:df、top、free、quota 、at、lp、adduser、groupadd kill、crontab、tar、unzip、gunzip 、last 网络操作命令:ifconfig、ip 、ping 、netstat 、telnet、ftp、route、rlogin rcp 、finger 、mail 、nslookup 系统安全相关命令:passwd 、su、umask 、chgrp、chmod、chown、chattr、sudo、pswho三、选择一本好的工具书工具书对于学习者而言是相当重要的。
ARM与嵌入式linux的入门建议
文章分类:综合技术
ARM与嵌入式linux的入门建议
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。
这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。
也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。
我一直很难理解,其实WinCE 的界面比linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux 做嵌入式的人就是远比WinCE多。
在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用linux进行开发。
我读研究生的的实验室中也没有使用WinCE的,大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE 的,原因就是开源!当然现在WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。
与此相对应的是,越来越多的电子厂商已经开始使用linux开发产品。
举个例子,Google近期开发的智能手机操作系统Android其实就是使用linux-2.6.23内核进行改进得到的。
第一,学习基本的裸机编程。
对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该硬件的控制方式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。
我在刚刚开始学ARM的时候是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思维,使用ADS去编程,第一个实验就是控制led。
学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉得有这个过程会好很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的控制有了感性的认识就好很多了
学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称他为理解硬件。
所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由cpu、由编程进行控制的。
比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制器,这些东西都有一些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器来控制这些外围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址单元,那么这些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的nandflash内部的储存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行使用?或者简单地说应该怎么用nandflash?再有,使用ADS进对ARM9行编程时都需要使用到一个初始化的汇编文件,这个文件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?
诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深一步的学习将有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。
因为,你的根基没打好。
不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接就使用ARM9学linux系统的,因此涉及使用ADS对ARM9进行编程的问题我很难回答^_^,自己去研究研究吧。
对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,是我在我们学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价值的参考。
第二,使用linux系统进行一些基本的实验。
在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个过程也是很有意义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学好linux的编程吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想很多高手都会经历这个过程。
在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很丰富的例程,我们不做重复工作,只提供他们没有的、最有价值的东西给大家。
第三,研究完整的linux系统的的运行过程。
所谓完整的linux系统包括哪些部分呢?
三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。
那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联系?怎么联系?系统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一步制作这个linux系统就打下了另一个重要的根基。
介绍这方面的资料网上可以挖掘到几吨,自己好好研究吧。
第四,开始做系统移植。
上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你要做的便是自己动手学会制作这些东西。
当然我不可能叫你编写这些代码,这不实现。
事实上这个3者都能在网下载到相应的源代码,但是这个源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板子上,这个修改的过程就叫移植。
在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你完成了这个过程你会发现你已经算是一个初出茅庐的高手了。
在这个过程中如果你很有研究精神的话你必然会想到看源代码。
很多书介绍你怎么阅读linux源代码,我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。
等你在做移植的时候你觉得你必须去看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,这是一本针对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。
至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,很多介绍自己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎么解决,这时就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因为我未必遇到过你的问题,不过我相信能给你一点建议,也许有助你解决问题。
这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码包,然后进行修改,最终运行在板子上。
盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。
第五,研究linux驱动程序的编写。
移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序的开发。
Linux 的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就是同为linux2.6但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,对于最新版本的驱动程序的编写甚至还没有足够的参考资料。
那么我的建议就
是使用、移植一个不算很新的版本内核,这样到时学驱动的编程就有足够的资料了。
这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。
第六,研究应用程序的编写。
做作品做项目除了编写驱动程序,最后还要编写应用程序。
现在的趋势是图形应用程序的开发,而图形应用程序中用得最多的还是qt/e函数库。
我一直就使用这个函数库来开发自己的应用程序,不过我希望你能使用国产的MiniGUI函数库。
盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。
MiniGUI 的编程比较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来开发ARM7的程序。
不过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,我曾经幻想过与北京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的图形操作平台,不过由于水平有限这只能是幻想了,呵呵。
完成这一步你基本就学完了嵌入式linux的全部内容了。
还有一个小小的经验想和大家分享。
我在学习嵌入式linux的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。
这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。
因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。
记住,问题是学习的最好机会。