第一篇:嵌入式LINUX系统开发入门学习步骤和技能总结
嵌入式LINUX系统开发入门学习步骤和技能总结
对于很多学习嵌入式LINUX系统开发的人来说,经验和技巧是很重要的,要不然就会落得一个事倍功半的效果。对于一个初学者或是一个零基础的人来说,该从哪里着手学习,该买那种参考书?
这些问题也一直困扰着很多想在嵌入式LINUX系统开发有一番作为的人群,为此深圳达内福田培训中心的老师们就嵌入式LINUX系统开发入门学习的步骤和经验技巧做了些简单的总结,希望可以帮助到更多这方面有需求的人群。
首先就是跟着深圳达内福田培训老师们来了解下嵌入式LINUX系统开发入门学习的基本步骤:
1.Linux操作系统核心
课程主要包括Linux 的基本命令和linux培训基础编程知识,包括Linux的文件操作和目录操作命令,VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具等知识,为后续嵌入式linux学习做好准备。
2.C语言核心
讲解在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。C语言在嵌入式软件设计中的地位相当重要,学好C语言和数据结构将能为后续的学习、开发工作打下坚实基础。
3.Linux编程核心
将了解到Linux系统中的进程的概念,从内核的角度了解进程的原理和实现。同时会掌握Linux下守护进程的编写方法,了解Linux下几种进程间通讯的方法,并具备编写进程间通讯编程的能力。
4.ARM体系结构
了解ARM体系结构及工作原理,掌握ARM指令集,学会操作ARM处理器的基本方法。ARM处理器在嵌入式系统中有着广泛应用,消费类市场几乎90%以上产品都使用ARM处理器,掌握基于ARM的嵌入式软件开发,学员可以有更为广阔的用武之地。
5.嵌入式Linux移植
使学员快速掌握嵌入式系统开发的流程,系统移植的方法,Bootloader的原理,可以编写自己的Bootloader。学习本课程的学员能够从事嵌入式系统相关的项目开发。
学习嵌入式LINUX开发,必须注意学习的方式和方法!就把这个嵌 入式开发板当作一台WINDOWS PC,就像用VC一样在上面做开发(只是 开发模式由原来完全的本地开发变成宿主机--目标板的模式了)。绝对不要去盲目阅读LINUX内核分析之类的书籍,对于初学者一两年内根本用不到这个!就像在WINDOWS下开发永远不要关心WINDOWS内核一个道理,不要因为LINUX
内核是源代码开放的,就非要去研究LINUX内核。
在嵌入式板卡上做任何稍微复杂些的工作,心里没底的话,就一定养成先在REDHAT LINUX PC测试的好习惯。无论你做GPRS/CDMA/PPP/ADSL拨号还是做USB无线网卡驱动,还是
SAMBA/VPN/SNMP等协议软件,都先在REDHAT LINUX 上配置好,测试通过有了感觉之后再到嵌入式上试,因为ARMLINUX跟REDHAT LINUX对于我们开发人员而言几乎没有任何区别!切忌冒进!不要试图去通读CPU的manual,没有用的,就像不要为了做嵌入式LINUX就要通读LINUX内核源代码分析一个道流。以目前实际的工作为主线,涉及到什么再去大致了解一下相关内容,例如我们第二步要做MODULES形式的驱动,那么这时去大致翻翻那本《LINUX驱动开发》一书的几页还是会有些帮助的,但也没有必要全部通读!
除此之外深圳达内福田培训中心还有更多针对800多个核心知识点,近200万字的在线文档,近2000道针对所有知识点的在线测试近,200道课后作业描述文档及作业在线评测平台等共各个学员更加深入的学习,对于此也可以打电话咨询下0755-82353533。
如果励志成为一名真正的嵌入式软件工程师一些必要的培训还是需要的。
第二篇:学习嵌入式系统开发心得
你好,我是一名嵌入式开发爱好者.近来总是看到很多初学者(多数是在校大学生)由于没有条件,想学习却不知道如何下手。
本人绝对能体会到学习的艰辛,而且视任何对知识技术有强烈追求的人(不管目前水平高低)为同路人,所以整理短文一篇写出一些学习感受,替所有渴望知识的人企盼高手指点学习之路,分享经验。
爱因斯坦说过,”我是站在巨人的肩膀上“
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发。订立合适的阶段目标,在允许的条件下多动手多思考。
一般情况下对于硬件设备是比较短缺的。但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。wince,palmos上手都很容易。无论对于初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的,有了较高的编程水平(嵌入式主要是C,当然OO的几种语言c++,java是发展趋势),等到有机会的时候及时的补充硬件知识,会很快的成为高手。
还有,一定记住,学习嵌入式,”要想办法,不要找理由“。当年在dos下用tc编程时的条件,现在回想起来建筑就是奇迹。
我推荐一条学习之路吧,仅供参考,1、C开发经验
条件:linux(这都有吧)
方法:随便,主要是掌握ansiC编程(不包括gtk,qt等图形可视化开发)
2、网络、操作系统、体系结构
条件:linux,各种书,算法、例程。
方法:通过C编程实现简单的网络等知识的算法和过程。
3、嵌入式系统概念
条件:各个嵌入式网站,讨论组,书籍
方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。
4、嵌入式开发实践
条件:各种嵌入式系统开发工具的demo版(或者D版,如果有的话),包括编译器,仿真器。可以找高手们要,也可以下载。
方法:这里有两个分支,一个是基于mcu/dsp的嵌入式系统开发,一个是象palmos,wince,ucos等rtos下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。
5、硬件开发
条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。
6、硬件工程/软件工程/项目管理
条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目参与经验
方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。。,你该是管理者了。
抛砖引玉,以上出自我的经验,欢迎各路高手们补一下 再告诉你一些我的收藏夹的网站
国内有关嵌入式开发的论坛
电子产品世界的论坛
http://bbs.edw.com.cn/index.asp
恒颐高科论坛
http://www.xiexiebang.com/
中国单片机公共实验室
http://www.xiexiebang.com/
北京科银京成技术公司
http://www.xiexiebang.com/
微芯力科技
http://www.xiexiebang.com
驱动开发网之嵌入式版块,挺综合的一个网站
http://www.xiexiebang.com/index.php
电子爱好者家园[2004年09月30日] http://home.ee521.com/main.asp
广州友善之臂电子有限公司
http://www.arm9.net/index.asp
好了 兄弟 开始努力 我们一起加油哈...
第三篇:嵌入式系统开发总结(uCCOS+uCGUI+uCFS)
嵌入式系统开发总结(uC/COS+uC/GUI+uC/FS)
今天终于把做了一个多月的嵌入式系统软件交了上去。终于可以轻松一下了,但是期末临近,看来没得闲了。现在总结一下整个开发过程,希望对想要入门嵌入式系统开发的朋友有所帮助。
首先要说的是,整个开发过程很艰苦,主要是因为第一次接触嵌入式开发,入门很难,同时由于大三有很多专业课,还有六级、实习面试等,在此对我的队友陈、马表示感谢,谢谢他们和我一直坚持到最后。
该系统实现基于uC/COS、uC/GUI、uC/FS的整合。首先要根据硬件配置三者。根据uC/GUI、uC/FS的文档资料很容易移植到操作系统uC/COS。其文档资料的下载地址请参见文章最后。
uC/COS是基于嵌入式的实时操作系统,它管理任务、内存、文件、电源等,为嵌入式系统提供多任务的开发环境。uC/GUI是一种用于嵌入式应用的图形支持软件,本系统借用uC/GUI实现系统所需要的各种界面。uC/FS是一种文件系统,本系统借用其来管理存储器中的文件,在book、message中都用到文件的读写,可以说uC/FS是本系统实现的不可或缺的部分。
该系统所有界面由uC/GUI 实现。主界面一窗口(Frame)为容器,添加菜单栏(Menu)来控制整个系统。其他界面以Dialog为容器,在Dialog中添加按钮(Button)、列表(ListView)、多行编辑框(MultiEdit)等。系统采用了“回调函数”机制,回调函数在用户程序中定义,当一个指定的事件发生时,通知图形系统调用指定的函数。通常应用于一个窗口内容改变时自动重绘的场合。该系统利用回调函数初始化窗口,当窗口内容改变时重绘窗口,同时处理事件响应,例如当鼠标点击“Read”按钮是,通过回调函数调用txtTask()函数弹出电子书显示对话框(Txt)。
总的来说,该设计结构合理,逻辑严密,各个模块相互协调实现了复杂的功能。系统界面小组力求简单大方,各个模块的功能实现都用到了不少精妙的算法。但是,由于小组能力有限,前期对嵌入式的了解浅薄,以及时间等各方面的限制,系统并没有完全实现所预期的功能,也可以说仅实现了一些辅助功能。首先说message模块,设计预期是用到红外发送,实现与红外手机的数据传输和操纵手机的短信发送,但是在实际操作中小组发现需要扩展外围电路(红外发送),由于资金问题,小组讨论放弃该功能,仅实现了信息编辑和信息保存功能。其实该功能的实现小组也是有很清晰的思路的,如果有足够的资金和时间,小组完全可以实现该功能,这里很有些遗憾。
然后是文件系统,最后的几天里,我们发现了一个严重的问题,也就是我们所用文件系统所管理的RAM是可挥发性的(一时没有意识到),我们保存到其中的文件在系统下一次启动的时候都会消失。小组发现norflash是不可挥发的存储器,于是我们考虑将文件存储到norflash中,但是在将norflash添加到uC/FS中的过程中,我们发现必须为其编写驱动程序。经过数天的努力,我们编辑出了norflash的uC/FS驱动,但是很遗憾,没有成功,竞赛举办方给出的norflash模块的实验太过简单,无法编辑驱动程序的底层控制存储器算法。(本小组编写的norflash驱动将在附件中给出)
Music模块,其实music仅仅实现了简单的mp3播放功能,同时提供暂停、下一首等功能,但是经过小组的不懈努力仍然没有声音。于是我们怀疑是硬件模块(UCB1400、AC97CODEC)的问题。
系统整体功能也有待改进,比如开机,进行一段时间的操作后,系统就会不正常的死掉。虽然我们做了大量的性能改良功能,但这个问题依然存在。
小组在近期做了此次竞赛的总结,一直表示此次竞赛给我们提供了一个很好的学习机会,大家都有了很大的提高,至少是对嵌入式有了切身的认识。大家对嵌入式系统设计也有了很大的兴趣,同时表示将在以后对嵌入式进行更深层次的研究。
在此,我们对同类设计提供一些建议。前期应该对资金、时间等做准确的估计,同时选择最主要的功能模块,这样可以集中有限精力将单个模块的功能实现的更加强大。在功能设计的阶段应尽量考虑到所有细节,这样可以避免在最后时刻发现关键因素致使系统功能大打折扣。系统的创新点:
1、使用uC/FS管理文件
电子书模块和短信编辑模块的Save功能都需要大量操作文件的代码。由于实时操作系统uC/GUI没有实现文件系统,在参考了各种版本的文件系统后,小组决定选用uC/FS。uC/FS是一种FAT格式的文件系统,它可以用于所有的存储媒体,但你必须提供存储媒体的底层接口函数。
引进uC/FS后,小组很方便地实现了系统的各种主要功能。
2、借用软键盘代替手写字体识别功能
当考虑到手写字体识别功能的难度和时间的有限,小组讨论果断决定使用软件盘实现字符的输入功能。
首先,小键盘界面小巧简洁。我们以woindow系统中的软键盘为模板,删除掉不需要的复杂按键,形成了独具风格的嵌入式版软键盘。
其次,由于界面大小限制,软键盘进入了”shift”键,实现键盘按键的切换,实现了所有字符(包括数字、大小写字母和各种操作符)的输入功能。
3、系统内容丰富多彩
这一点可以说是系统的坏处也可以说是系统的好处,坏处就是由于本次竞赛时间有限,有些功能实现的也比较简单,但是可惜的是该系统脉络清晰,很合理地将各个模块有机地结合到了一起。而且各个模块并不是相互独立的,而是相互约束、相互协作的。例如:message模块的Save功能,将文本信息保存到存储器中,保存的文件有可以在book中查阅;通讯录协助message模块中Send功能的手机号码查询。
这些都可以说是本系统的一大特色。
主界面:
(各个模块的界面以及具体实现请参看后续文章)程序流程框图:
uC/GUI中文手册下载:http://download.csdn.net/source/466900
uC/FS正式版(内含使用手册)下载:http://download.csdn.net/source/466918 uC/COS中文手册下载:http://download.csdn.net/source/466905 uC/GUI完整实例(超有用):http://download.csdn.net/source/467738
第四篇:嵌入式linux学习步骤
嵌入式linux学习步骤
作者:phantom 时间:2009-8-6 文章来源:来自网络
1、Linux 基础
安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器
2、Shell 编程基础
Shell简介 认识后台程序Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作 熟悉Emacs的基本操作 比较不同shell的区别 编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell脚本程序
3、Linux 下的 C 编程基础
linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优化 熟悉Linux系统下的开发环境 熟悉Gcc编译器 熟悉Makefile规则编写Hello,World程序 使用 make命令编译程序 编写带有一个循环的程序 调试一个有问题的程序
4、嵌入式系统开发基础
嵌入式系统概述 交叉编译 配置TFTP服务 配置NFS服务 下载Bootloader和内核 嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程 建立嵌入式系统开发环境制作cross_gcc工具链 编译并下载U-boot 编译并下载Linux内核 编译并下载Linux应用程序
4、嵌入式系统移植
Linux内核代码平台相关代码分析 ARM平台介绍平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念 能够移植Linux内核移植Linux2.6内核到 ARM9开发板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用 配
置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序
6、嵌入式系统中多进程程序设计
Linux系统进程概述 嵌入式系统的进程特点 进程操作 守护进程 相关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序 sleep系统调用任务管理、同步与通信 Linux任务概述任务调度 管道 信号 共享内存 任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式 熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序
7、嵌入式系统中多线程程序设计
线程的基础知识 多线程编程方法 线程应用中的同步问题了解线程的概念 能够编写简单的多线程程序编写一个多线程程序
8、嵌入式 Linux 网络编程
网络基础知识 嵌入式Linux中TCP/IP网络结构 socket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 PPP协议 GPRS 了解嵌入式Linux网络体系结构 能够进行嵌入式Linux环境下的socket 编程 熟悉UDP协议、PPP协议 熟悉GPRS 使用socket 编写代理服务器 使用socket 编写路由器 编写许可证服务器 指出TCP和UDP的优缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器
9、GUI 程序开发
GUI基础 嵌入式系统GUI类型 编译QT 进行QT开发熟悉嵌入式系统常用的GUI 能够进行QT编程使用QT编写“Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件
10、Linux 字符设备驱动程序
设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构 加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构 能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动 编写I/O驱动 分析一个看门狗驱动程序 对比Linux2.6内核与2.4内核中字符设备驱动的不同Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析 块设备的读写请求队列了解Linux块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序 分析一个文件系统 对比Linux2.6内核与2.4内核中块设备驱动的不同
11、文件系统
虚拟文件系统 文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化 MTD块设备的读写操作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为 ARM9开发板添加 MTD支持 移植JFFS2文件系统 通过proc文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统
第五篇:学习嵌入式ARM+Linux_步骤
学习嵌入式ARM+Linux 步骤
转载的,写的非常有指导性,大概步骤就是:
ARM裸机编程—熟悉Linux系统—了解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的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问 人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所 有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案 了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。
记住,问题是学习的最好机会。