《嵌入式linux学习步骤(精)》由会员分享,可在线阅读,更多相关《嵌入式linux学习步骤(精)(15页珍藏版)》请在人人文库网上搜索。
1、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别编写一个测试服务器是否连通的脚本程序编写一个带有循环语句的基本
2、操作 熟悉Emacs的基本操作 比较不同shell的区shellshell脚本程序编写一个查看进程是否存在的 脚本程序shell3、Linux下的C编程基础调试技术 Autoconf Automake Makefile代码优linux C 语言环境概述Gcc使用方法Gdb化熟悉Linux系统下的开发环境熟悉 Gcc编译器熟悉 Makefile规则编写 Hello, chidazzle ,World程序使用make命令编译程序编写带有一个循环的程序调试一个有问题的程序4、嵌入式系统开发基础嵌入式系统概述交叉编译 配置TFTP服务配置NFS服务 下载Bootloader和内核 嵌入式Linux应用
3、软件开发流程熟悉嵌入式系统概念以及开发流程建立嵌入式系统开发环境制作cross_gcc工具链编译并下载U-boot编译并下载Linux内核编译并下载Linux应用程序 5、嵌入式系统移植Linux内核代码平台相关代码分析 ARM平台介绍平台移植的关键技术移植Linux内核到内核到ARM9开发板ARM平台 了解移植的概念能够移植Linux内核移植Linux2.6系统的文件和设备与文件相 熟悉文件I/O编写串口通6、嵌入式Linux 下串口通信串行I/O的基本概念嵌入式Linux应用软件开发流程 Linux 关的系统调用配置超级终端和 Mi ni COM能够熟悉进行串口通信 信程序 编写多串口通信
4、程序7、嵌入式系统中多进程程序设计Lin ux系统进程概述嵌入式系统的进程特点进程操作守护进程相关的系统调用了解Lin ux系统中进程的概念能够编写多进程程序编写多进程程序编写一个守护进程程序sleep系统调用任务管理、同步与通信Linux任务概述任务调度管道信号共享内存任务管理API 了解Linux系统任务管理机制熟悉进程间通信的几种方式熟悉嵌入式Linux中的任务间同步与通信编写一个简单的管道程序实现文件传输编写一个使用共享内存的程序8、嵌入式系统中多线程程序设计线程的基础知识多线程编程方法线程应用中的同步问题了解线程的概念能够编写简单的多线程程序编写一个多线程程序9、嵌入式Linux 网
5、络编程熟悉GPRS使用TCP和 UDP的优网络基础知识 嵌入式Linux中TCP/IP网络结构socket 编程 常用API函数分析Ping命 令的实现 基本UDP套接口编程 许可证管理PPP协议GPRS 了解嵌入式Linux网络体系结 构能够进行嵌入式Linux环境下的socket编程熟悉UDP协议、PPP协议 socket编写代理服务器使用socket编写路由器编写许可证服务器指出 缺点 编写一个web服务器 编写一个运行在 ARM平台的网络播放器 10、GUI程序开发GUI能够进行World ”程序调试一个加入信号/槽的实例通过重载QWidgetGUI基础 嵌入式系统 GUI类型 编译Q
6、T进行QT开发熟悉嵌入式系统常用的QT编程使用QT编写“ Hello,类方法处理事件系统的模块字符设备驱动分析fs_operation 结构加载驱了解Linux字符设备驱动程序结构能够编写字符设备驱对比11、Linux字符设备驱动程序 设备驱动程序基础知识Linux动程序了解设备驱动程序的概念动程序编写 Skull驱动编写键盘驱动编写I/O驱动分析一个看门狗驱动程序Linux块设备驱动程序块设备驱动程序工 Linux块设备驱动程序结 编写MMC卡驱动程序分Linux2.6内核与2.4内核中字符设备驱动的不同 作原理典型的块设备驱动程序分析块设备的读写请求队列了解构能够编写简单的块设备驱动程序比
7、较字符设备与块设备的异同析一个文件系统对比Linux2.6内核与2.4内核中块设备驱动的不同12、文件系统系统的文件系统 了解嵌入式ARM9开发板添加 MTD支持 分析romfs文件系统源代码虚拟文件系统文件系统的建立ramfs内存文件系统proc文件系统devfs 文件系统MTD 技术简介MTD块设备初始化MTD块设备的读写操作了解 Linux现在非常流行。街头。Linux的文件系统 了解MTD技术能够编写简单的文件系统为 移植JFFS2文件系统 通过proc文件系统修改操作系统参数 创建一个cramfs文件系统学习掌握嵌入 Linux的开发与移植 各种学习文章与培训班,充斥书店终于一日开窍
8、,但的确 糟蹋了 很多 金钱与时间。 作为笔者 也上了路,经历漫长的摸索,穷人,现写下自己的感受,供好学寒士 参考。第一要点:实验重于看书(多编码,少翻书)一定首先搭建X86实验环境。用旧计算机(周末电脑城抛售存货,有新的),搭建一套 实验环境。host主机:一台PC机(能够跑redhat linux,看问档 就可以了,配网卡与软驱)。 target目标机: 一块旧PC主板,配一张网卡和一个软驱,电源。附件:交*网线,交*串口线 够了,不会超过 3千元(已经很满足了)软件全部到电脑城/网站下载。先不管什么arm ppc mi ps,以后看看文档吧。GNU C编译第二重点:在PC 上安装redh
9、at linux 包括开发工具。熟悉linux的配置命令。练习linux的C语言编程,多个程序的编译工程制作。无聊的话,将 C语言教材的例程,编译十几个,熟悉GNU编译器。包括 gcc make ld objdump ar 等 GNU toolkit第三重点:realtime linux 内核编程/加载到目标板运行。1。下载rt-linux ,或uclinux 或什么 非redhat的linux 源码,一定 并且for x86 PC 的。是包括,编译工程 makefile.2。 修改和配置程序,将rtl in ux的 标准con sole 口改为串口,不是3。在redha
10、t linux 环境下,编译 这个embedded linux 内核。用mkboot的这样程序(或按代码中工具,)将编译好的内核执行文件vga与键盘。拷贝定位软盘引导区。4。用这张软盘引导在目标PC主板。在PC主机的 串口终端上配置 PC主板目标机。效果同redhat linux term in al co nsole一样。以后越来月难,坚持。第四个重点编译跑通网卡的驱动程序 下载编译你的网卡驱动源码 跑通 主机与目标机的网络通讯。不要太动头想,ping通就是了。第五个重点用tftp下载执行文件从PC主机到 目标机运行。第六个重点GNU GDB 远程在线调试(网口调试)第七个重点 照文章/书
11、丄亜早.主要是实时内核学习/修改分析调试/破坏 内核的源码。调度/消息/存储/文件/进程/线程/互斥 等 单独跑跑,了解内核功能就是了。第八个重点 TCP/IP的学习下载一个 简单的 web server (http server)学习理解,并编译加载运行。将PC主板目标机 看作网站服务器,然后在 PC主机的网络浏难器中 有兴趣,把你的照片加载到目标机的html网页中。访问这个 web server.第九个重点网卡驱动程序分析 了解PCI总线原理, 文。尝试独立写点网卡驱动程序,过滤以太报文的处理。跟踪处理特殊的报第十个重点USB和 可以分析修改 USB 一定要分析源
12、码,上网查FLASH文件系统练习。(可以跳过) 与FLASH文件系统源码。FLASH的型号。第十一个重点路由器实验。分析zebra方面的源码,再买一张网卡。尝试分析 NAT RIP等协议,将你的 PC板目标机,变成一台简单的路由器。以后的实验需要根据行业来,例如,mini-GUI (图形编程),或 DVR (硬盘录象机),或IP Vedio WebTV 服务器。可以玩好几年,当然最好找工作前,有针对地做实验。一句话,动手修改编码,不要只看看。嵌入式Linux操作系统学习规划ARM+LINUX 路线,主攻嵌入式 Linux操作系统及其上应用软件开发目标:(1)(2)(3)掌握主流嵌入式微处理器的
13、结构与原理(初步定为arm9)必须掌握一个嵌入式操作系统(初步定为uciinux或linux,版本待定)必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。从事嵌入式软件开发的好处是:(1) 目前国内外这方面的人都很稀缺。这一领域入门门槛较高, 所以非专业IT人员很难切 入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。(2) 与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)(3) 哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫贴牌” OEM ),都是通用的硬件,我们只管设计软件就变成自
14、己的产品了。(4 )兴趣所在,这是最主要的。 从事嵌入式软件开发的缺点是:(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系 统级软件功底不深,则可能不适于此行。(2)这方面的企业数量要远少于企业计算类企业。(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司 也并无此要求,只要有经验即可。(4)平台依托强,换平台比较辛苦。兴趣的由来:1、成功观念不同,不虚度此生,就是我的成功。2、喜欢思考,挑战逻辑思维。3、喜欢CC是一种能发挥思维极限的语言。关于C的精神的一些方面可以被概述成短句如下:相信程序员。不要阻止程序员做那些需要去做的。保持
15、语言短小精干。一种方法做一个操作。使得它运行的够快,尽管它并不能保证将是可移植的。4、 喜欢底层开发,讨厌 vb类开发工具(并不是说 vb不好)。5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。 方法步骤:1、基础知识:目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优 势。科目:数字电路、计算机组成原理、嵌入式微处理器结构。汇编语言、C/C+、编译原理、离散数学。数据结构和算法、操作系统、软件工程、网络、数据库。-C2。方法:虽科目众多,但都是较简单的基础, 且大部分已掌握。不一定全学,可根据需要选修。 主攻书籍:the C+ Programmin
16、g Ianguage (直没时间读)、数据结构linux内核。先看深,情是目。剖析则是0.112、学习 linux : 目的:深入掌握linux系统。方法:使用linux linxu系统编程开发一驱动开发和分析 那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲, 版,适合学习。最后深入代码。主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。x86。uClinux。3、学习嵌入式linux : 目的:掌握嵌入式处理器其及系统。方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复(2) 嵌入式操作系统类:ucOS/ll简
17、单,开源,可供入门。而后深入研究(3) 必须有块开发板(arm9以上),有条件可参加培训(进步快linux设备驱动开发详解(第2版),能认识些朋友)。主攻书籍:毛德操的嵌入式系统及其他arm9手册与arm汇编指令等。4、深入学习:A、 数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。B、 通信协议及编程技术:TCP/IP 协议、802.11, Bluetooth,GPRS、GSM、CDMA等。C、 网络与信息安全技术:如加密技术,数字证书CA等。D、DSP技术:Digital Signal Proeess,DSP处理器通过硬件实现数字信号处理算法。 说明:太多细节未说明,可根据实际情况调整。 重点在于1、3,不
18、必完全按照顺序作。对于学习C+,理由是C+不只是一种语言,一种工具,她还是一种艺术,一种文化,一种 哲学理念、但不是拿来炫耀得东西。对于linux内核linux系统日志,学习编程,读一些优秀代码也是有必要的。注意:要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。不要一味钻研技术,虽然挤出时间是很难做到的, 但还是要留点余地去完善其他的爱 好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要 做的!技术是通过编程编程在编程编出来的。永远不要梦想一步登天, 不要做浮躁的人, 不要觉得路途漫
19、上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要 相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)嵌入式书籍推荐Linux基础1、Linux与Unix Shell编程指南C语言基础1、C Primer Plus,5th Edition【美】Stephen Prata着2、The C Programming Language, 2nd Edition【美】Brian W. Kernighan David M. Rithie (K & R )着3、 Advaneed Programming in the UNIX Environment ,2nd Ed
20、ition(APUE )4、嵌入式Linux应用程序开发详解Linux内核1、深入理解Linux内核(第三版)2、 Linux内核源代码情景分析毛德操胡希明著研发方向1、UNIX Network Programming (UNP)2、TCP/IP详解内核编程设备驱动开发(LDD ) 高级程序设计杨宗德著3、Linux4、Linux5、Linux体系结构与编程杜春雷着硬件基础1、ARM2、S3C2410 Datasheet英语基础1、计算机与通信专业英语体系结构、编程与设计系统教程1、嵌入式系统2、嵌入式系统一一采用公开源代码和 StrongARM/Xscale处理器毛德操胡希明着3、Build
21、ing Embedded Linux Systems4、 嵌入式ARM系统原理与实例开发杨宗德著理论基础1、算法导论2、数据结构(C语言版)3、计算机组织与体系结构 ?性能分析4、 深入理解计算机系统【美】Randal E. Bryant David O"Hallaron 着5、操作系统:精髓与设计原理6、编译原理7、数据通信与计算机网络8数据压缩原理与应用C语言书籍推荐1. The C P rogram ming Ian guage C程序设计语言2. P oi nters on C C和指针3. C traps and pitfallsC陷阱与缺陷4. Expert C Lan
22、uage专家C编程5. Writi ng Clea n Code Microsoft Tech iniq ues for Developing Bug-free C P rograms编程精粹-Microsoft编写优质无错C程序秘诀6. P rogrammi ng Embedded Systems in C and C+ 嵌入式系统编程7. C语言嵌入式系统编程修炼8. 高质量C+/C编程指南林锐尽可能多的编码,要学好 C,不能只注重 C本身。算法,架构方式等都很重要。这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!四嵌入式LinUX学习的基本的原则是通学+专长。通学,即了
23、解该方向的相关领域,但是通”不等于 泛”对待学习应该举一反三,把握事物的本质。如果能用通用的思想去解决问题,那么才算学有小成。比如,五一学习MarkBalch的COMPLETE DIGITAL DESIGN后,对嵌入式系统在上电之后,软硬件如何配合工作有了更深入的理解。虽然这本书不是介绍嵌入式系统,但是很多技术是通用的。有开放的思维,把握自己研究的中心,把其他领域的方法思想吸收过来为我所用,这样可以对研究中心有更为深入的认识。专长,即研究中心。通学的目的在于打好基础,融会贯通。但是仅仅如此是不够的。因 为通学不可能把每个方向都研究精深,人的精力毕竟是有限的嘛, 所以要有自己感兴趣的方向,以此作
24、为研究中心, 深入深入再深入,成为该方向的专家。 以通促专,提炼自己的思想,以开放的思维谋求最大的提升!我选择的研究领域是嵌入式系统(ARM+Linux),在该领域有四种类型的工作:1、系统设计2、硬件设计3、驱动开发及内核移植4、应用开发成为嵌入基于我目前的认识, 研究中心是驱动开发及内核移植,争取以后做系统设计,式系统设计工程师。嵌入式Linux学习分为三个阶段:第一阶段:建立嵌入式 Linux知识体系框架。 第二阶段:深入学习嵌入式Linux的基本技术。第三阶段:精深专长。现在JTAG这三个阶段可以交叉。第一阶段通过2006年暑假两个月的强化学习,已经完成。正在进行第二阶段的学习。这个阶
25、段关注嵌入式Linux软件开发的基本技术,包括:的工作原理及其实现(以JFlash为主)、bootloader的原理及实现(以U-boot为主)、kernel 移植与开发(尝试2418、2.6.X )、FS制作(尝试ramdisk、cromfs等)、应用程序的移植(基本掌握开发)、调试和诊断技术。在这个阶段,同时打好硬件基础(掌握 S3C2410 )和 软件基础(bash、C和基本的开发工具)。第三个阶段在读研期间,以研究OS原理和Linux 内核源代码为主linux查看硬件信息,与第二阶段交叉进行。其实,每天进步一点点,把这一点点所学加到已经建立的知识体系框架中,日积月累, 思想认识必定会有所提升。虽然都认可宁
26、可断其一指,不可伤其十指,但是应该承认人的认 识是有局限性的。比如学习A时,因缺乏实践等各方面原因,可能认识不深入,也许在学习B时突然认识到了。所以一定要举一反三,而且要反复学习。记住基础的技术,努力学 习先进技术,不停止前进的脚步。五【序】学习Linux开发近一年,由于我是实验室第一个从事这方面开发的,学习 过程中遇到了很多问题,可是总是求师无门,只能一个人自己摸索,同时也充分 利用了网络,参考了广大 CSDN博友及相关论坛的帖子,在此表示感谢!嵌入式Linux的学习涵盖的范围比较广,下从 bootloader,到内核移植、文件系 统,中间的驱动开发,到上层的应用程序调试、开发环境等,变化莫
27、测,经常是 别人的能用自己的就有问题。由于缺乏他人适当指点linux设备驱动开发详解(第2版),自己在学习过程中也走了很多弯路,整个开发环境的搭 建整了 N久,更搞笑的是经常听说模块加载insmod,可连这个命令在主机还是 ARM上用都没搞明白,那叫一个汗啊!大家勿笑,嵌入式 Linux的初学者确实 对交叉环境比较不懂,我是其一啊。现在适逢好友小布丁要学习嵌入式 Linux,就将近一年来的学习体会总结下,整 理了一个总体的学习计划,希望给那些曾经像我一样彷徨的人一些帮助。后续将完善此文档,上传到个人空间上,先贴出目录。本人水平有限,不当之处,还请 大家指正!小布丁同学曾在我处于困境时一如既往的理解我支持我,给我信心给我鼓励,谢谢
28、你,美丽开怀的小布丁,希望你能 ha ppy and fasc in ati ng forevef谨以此文献给我们永远可爱迷人的小布丁!Sailor_foreverSep tember 3, 2007*第一篇Linux主机开发环境(15天)1.1 Vmvare下Linux的安装(优先)1.2 Windows下从硬盘安装Linux (可选)1.3 Linux的基本命令及使用1.4 Linux的文件系统及与windows的文件共享1.5 GCC开发工具1.6 GDB调试1.7 Makefile 编写1.8主机端的模块编程1.9简单应用程序第二篇ARM + Linux开发环境(7天) 2.1交叉开发
29、环境介绍2.2交叉编译器cross-tool2.3配置主机开发环境2.3.1 配置超级终端 minicom 或 hyperterminal 或 DNW2.3.2配置TFTP网络服务2.3.3配置NFS主机端网络服务2.4建立交叉开发环境2.4.1配置NFS ARM端网络服务2.4.2 编译 ARM-gdb2.5交叉调试应用程序2.6 ARM上的简单模块编程第三篇Linux系统bootlaoder移植(7天)3.1 Bootloader 介绍3.2 u-boot命令及环境变量3.3 u-boot的编译配置3.4 u-boot源码分析3.5 u-boot移植过程第四篇Linux的内核移植(15天)
30、4.1配置编译Linux内核4.1.1 Linux内核源代码结构4.1.2 Linux内核编译选项解析4.1.3 Linux内核编译链接4.2 Linux启动过程源代码分析4.3 Linux内核移植平台相关代码分析第五篇Linux的驱动编程(15天)5.1 Linux的设备管理5.2 Linux的驱动程序结构5.3简单的字符设备驱动程序5.4 Linux内核模块的加载卸载5.5 Linux的打印调试方法5.6字符设备的高级属性一中断5.6常见的串口网口驱动分析第六篇文件系统制作(5天)6.1 Linux文件系统制作6.2文件系统和存储设备的选择6.3部署Ramdisk文件系统的过程第七篇Linux的高级应用编程(5天) 总用时15+ 7+ 7+ 15 + 15+ 5+ 5大概两个半月