第一篇:嵌入式linux学习内容
知识结构
1. 嵌入式处理器与裸机程序开发 2. linux系统管理 3. linux应用程序开发 4. linux驱动程序开发 5. linux内核开发与系统移植
一、处理器
1. arm处理器工作模式 2. arm系统寄存器 3. arm寻址方式 4. arm 汇编指令集 5. arm环境c语言编程 6. arm中断与异常 7. ads集成开发环境
8. 裸机程序开发(串口、lcd、时钟、led、按键……)
二、系统管理
1. linux定制安装 2. linux命令详解
3. samba、nfs、tftp、wireshark使用4. shell编程
三、应用程序开发
1. gcc、gdb、makefile 2. 文件、时间编程
3. 多进程、多线程程序设计 4. 进程间通讯 5. 网络编程
6. qt图形化应用程序开发 7. android图形化应用程序开发
四、内核开发
1. linux内核配置与裁剪 2. linux内核模块开发 3. 根文件系统制作 4. 进程子系统 5. 内存子系统 6. proc文件系统 7. 系统调用 8. 内核定时器 9. 内核异常分析
五、驱动程序开发
1. 字符设备驱动程序 2. 总线、设备、驱动模型 3. 硬件访问技术 4. 中断处理 5. input设备驱动 6. platform驱动程序 7. pci、usb驱动程序 8. 网卡驱动程序 9. 触摸屏驱动程序 10. 串口驱动程序
学习顺序
1. 嵌入式处理器与裸机程序开发 2. linux系统管理 3. linux应用程序开发 4. linux内核开发基础 5. 嵌入式linux环境搭建 6. linux驱动程序开发 7. 深入学习linux内核
第二篇:嵌入式linux学习步骤
嵌入式linux学习步骤
作者:phantom 时间:2014-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 文件系统
第三篇:嵌入式linux学习经验谈
打印版本,(转载)前面废话省略,进入正题:一、废话(已删)。
二、起步:你应该为自己创造一个学习linux的环境--在电脑上装一个linux或unix
如何选择版本:北美用redhat,欧洲用suse,桌面mandrake较多,而debian是技术最先进的linux开发人员中用debian的最多,其次是redhat,从全球linux各应用领域市场份额来看无疑redhat是最多的,此外还有很多出名的发行版本,不再列举。
对于初学linux的人来说,我建议是使用redhat,原因如下:
1)现在很多书都是以redhat为例讲的,为了与书本协调一致
2)周围的人都用redhat,交流比较方便
3)redhat应用范围广,有典型性和代表性
4)它易于使用和安装,我们没有必要把时间浪费在“装系统”上而应集中精力学习最有用的东西。
【注】现在觉得rh很死板,as,es等用在服务器上或许不错,personal desktop用mandrake,debian,suse都不错,笔者现在用mandrake,因为她长得漂亮:)
如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择
我强烈建议:自己亲自动手把linux装到你的硬盘上,你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装winxp一样简单
从此现在开始,请不要以windows的工作方式来考虑问题,应该尝试挖掘linux身上的“天才unix”的气质。
三.进阶
掌握至少50个以上的常用命令
理解shell管道"|",文件流重定向">"及追加">>"等
熟悉gnome/kde等x-windows桌面环境操作
掌握.tgz.rpm.biz等软件包的常用安装方法
学习添加外设,安装设备驱动程序(比如modem)
熟悉grub/lilo引导器及简单的修复操作
熟悉系统固有目录的名称及公用
学会用mount命令访问其他文件系统
了解vi,gcc,gdb等常用编辑器,编译器,调试器
学习linux环境下的简单组网
建议:买一本不需要太厚的linux教材,大致可以满足要求(现在的书越来越多了,还带很多图,我当时可没这么多书)
四.高级应用
澄清一些概念:linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识
1.英语
即使你不学linux,我也强烈建议你学好英文[u.s.english]。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档在搜索引擎找到的英文网站和网页中熟练的检索最好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距。
2.shell[sed/awk]
shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的.bat但shell比.bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上
这也是cs中的一个重要思想。此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用。
3.perl/php
漂亮的脚本, cgi的首选,比asp好,应用面很广
4.cc++
c、c++是linux/unix的核心语言,系统代码都是c写的
5.asm
系统底层及内核,硬件,设备驱动程序,嵌入式开发都需要。//走核心路线的话,cc++,asm最重要
6.java,python,tcl,xml
五、系统管理篇
在熟悉linux的基础上还需要掌握至少一种unix。我首推solaris,其次是freebsd比如运营级系统一般是
solaris+oracle/db2之类的学习apache、ssh、sendmail/qmail、proftp/vsftp、samba、squid、mysql/postgresql/oracle、bind等各种应用服务器的构架及电子商务的应用熟悉tcp/ip协议族,学习诸如apache+php+proftp+mysql+quota的实现以及大型局域网,分布式集群等各种企业级应用解决方案熟悉多用户管理,数据库管理,文件系统,逻辑存储管理,日志分析,备份与灾难数据修复系统补丁,内核升级,以及在此基础上的防火墙构架等以保障系统安全在内的各种系统管理技能。 我觉得,如果在此基础上再掌握路由/交换设备便是一个不错的系统管理员
各种基于linux的解决方案可参考相关书籍和文献,必要时用google或各大linux站点站内搜索引擎寻找最新文档,以避免错误和漏洞有几本技术大全和技术内幕我认为都是这方面不错的书
六、深入学习linux
我个人理解的读linux内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解
1.c
如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),建议再看一下《the c programming language》second edition这本圣经(如果想学缓冲区溢出,这点c的功力可能是不够的,还有<c陷阱与缺陷>,<c专家编程>,<cc++深层探索>,反正经典书看多了是没有坏处的)
2.asm (at&t语法,保护模式)
保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有80x86 intel语法的基础就行, 有兴趣可以看看intel的官方网站
3.数据结构(离散数学)
计算机专业的核心课程,重要性我就不说了
4.操作系统原理
看懂这个再去读linux吧
5.微机原理/组成原理(数字电路)
底层直接和硬件打交道,所以这个也要
6.了解linux/unix
我想至少你要会操作吧,了解unix的api
7.软件工程/编译原理
这方面的经典书去可以搜到很多我觉得apue这种书不适合初学者,还是先看看upe之类的吧。 apue: 《advanced programming in the unix environment》,中文名《unix环境高级编程》,作者:w.richard.stevens(共有6本经典),尊为“圣经”。他的书为全世界黑客所拜读!upe:《unix programming environment》,中文名《unix编程环境》比较适合初学者的,深入浅出,其中有一些比较重要的思想。
另外,介绍linux下应用层编程的书也有很多,比如<gnulinux编程指南>,redhat,redflag出的书...........
经典书还有很多很多......
《操作系统:设计与实现》(交大的考研参考书目,讲minix的unix操作系统设计)、4.4bsd操作系统设计与实现、昂莱氏unix源代码分析、understanding the linux kernel (2nd)深入理解linux内核、linux设备驱动程序 (2nd)、linux内核源代码情景分析及《保护方式下的80386及其编程》(次书已绝版,只有超星的电子版,如果谁能搞到纸书,清一定告诉我一下,非常感激!!!)
在这里你能明白"黑客"及"haching"一词所代表的真正意义.希望我写的这篇文章能造就更多的黑客,而不是骇客
七、一些资源
// 下载软件不错
.cn
学习嵌入式系统的经验【转载】
实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发,订立合适的阶段目标,在允许的条件下多动手多思考。
三、
一般情况下硬件设备是比较短缺的,所以可以在软件方面和嵌入式系统开发模式上下功夫。提醒大家一点,嵌入式系统开发设计的内容很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux
下的c,比如uc/os ii(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。无论对初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的。而锻炼编程水平需要的条件只是一台pc而已,条件比较容易具备。有了较高的编程水平(嵌入式主要是c,当然oo的几种语言c++,java是发展趋势),等到有机会的时候及时补充硬件知识,会很快成为高手的。
四、
还有,一定记住,学习嵌入式,"要想办法,不要找理由"。当年在dos下用tc编程时的条件,现在回想起来简直就是奇迹。
五、
我推荐一条发展道路吧,仅供参考,
六、
1、c开发经验
条件:linux
方法:随便,主要是掌握ansi c编程(不包括gtk,qt等图形可视化开发)
七、
2、网络、操作系统、体系结构
条件:linux,各种书,算法、例程。
方法:通过c编程实现简单的网络等知识的算法和过程。
八、
3、嵌入式系统概念
条件:各个嵌入式网站,讨论组,书籍
方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。
九、
4、嵌入式开发实践
条件:各种嵌入式系统开发工具的demo版,包括编译器,仿真器。可以找高手们要,也可以下载。
方法:这里有两个分支,一个是基于mcu/mdsp的嵌入式系统开发,一个是象palm os,wince,uc/os ii等rtos下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。
十、
5、硬件开发
条件:各种嵌入式芯片、存储器等电路器件,protel99等电路设计软件,电路板制作。
方法:这时候该有开发条件了,最起码是51系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。
十一、
6、硬件工程/软件工程/项目管理
条件: 各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目
参与经验方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。你该是管理者了。 十二、
抛砖引玉,以上出自我的经验,欢迎各路高手们补充,初学者提问。
【后记】嵌入式系统,从小的方面来说,大家都做过。一个单片机为核心的小的电子系统,包括了软件和硬件。但是,在很多人的心目中,单片机就是51,软件就是自己从头用汇编写的监控程序,然后实现自己的功能。事实是这样的吗?单片机==51吗?市场上的单片机何止上千种,从4位到8位到16、32、64位,功能差的只有控制功能,功能强的运算能力超过一般台式机,我们所作的,是根据自己的需求,熟练程度,资源以及性价比来选择所需。拿我比较熟悉的arm来说,移动通讯市场的控制器至少85%采用arm作为其内核,手持设备以及嵌入式装置的市场份额其至少占60%,但我估计大部分的同学可能还不知道arm是个什么,更别说去搞基于arm的开发了。同样从软件的角度来讲,嵌入式系统的规模越来越大,对可靠性和实时性的要求越来越高,再也不是自己从头做一个监控程序,利用键盘驱动的时代了,大多数的嵌入式系统都采用了操作系统。这就对开发人员提出了更高的要求,需要对操作系统的原理比较了解。大家也许学过操作系统,但有几个人去接触过操作系统的源代码呢(当然,也许大家读过linux的源代码,不过规模较大)。
第四篇:嵌入式linux学习七步曲
?
嵌入式linux学习七步曲
sailor_forever sailing_9806@163.com 转载请注明
http://blog.csdn.net/sailor_8318/archive/2014/09/03/1769662.aspx
?
?
【序】学习linux开发近一年,由于我是实验室第一个从事这方面开发的,学习过程中遇到了很多问题,可是总是求师无门,只能一个人自己摸索,同时也充分利用了网络,参考了广大csdn博友及相关论坛的帖子,在此表示感谢!?
?
嵌入式linux的学习涵盖的范围比较广,下从bootloader,到内核移植、文件系统,中间的驱动开发,到上层的应用程序调试、开发环境等,变化莫测,经常是别人的能用自己的就有问题。
?
由于缺乏他人适当指点,自己在学习过程中也走了很多弯路,整个开发环境的搭建整了n久,更搞笑的是经常听说模块加载insmod,可连这个命令在主机还是arm上用都没搞明白,那叫一个汗啊!大家勿笑,嵌入式linux的初学者确实对交叉环境比较不懂,我是其一啊。?
现在适逢好友小布丁要学习嵌入式linux,就将近一年来的学习体会总结下,整理了一个总体的学习计划,希望给那些曾经像我一样彷徨的人一些帮助。后续将完善此文档,上传到个人空间上,先贴出目录。本人水平有限,不当之处,还请大家指正!
?
小布丁同学曾在我处于困境时一如既往的理解我支持我,给我信心给我鼓励,谢谢你,美丽开怀的小布丁,希望你能happy and fascinating forever!
?
谨以此文献给我们永远可爱迷人的小布丁!
?
sailor_forever
september 3, 2014
?
*****************************************************************************?
?
第一篇 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.9 简单应用程序 ? 第二篇 arm+linux开发环境(7天) ? 2.1 交叉开发环境介绍 2.2 交叉编译器cross-tool 2.3 配置主机开发环境 2.3.1 配置超级终端minicom或hyperterminal或dnw 2.3.2 配置tftp网络服务 2.3.3 配置nfs主机端网络服务 ? 2.4 建立交叉开发环境2.4.1配置nfs arm端网络服务2.4.2 编译arm-gdb ? 2.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天) 4.1 配置编译linux内核 4.1.1 linux内核源代码结构 4.1.2 linux内核编译选项解析 4.1.3linux内核编译链接 4.2linux启动过程源代码分析 4.3linux内核移植平台相关代码分析 ? 第五篇 linux的驱动编程(15天) 5.1 linux的设备管理 5.2 linux的驱动程序结构 5.3 简单的字符设备驱动程序 5.4 linux内核模块的加载卸载 5.5 linux的打印调试方法 5.6 字符设备的高级属性-中断 5.6 常见的串口网口驱动分析 ? 第六篇 文件系统制作(5天)
6.2 文件系统和存储设备的选择 6.3 部署ramdisk文件系统的过程 ? 第七篇 linux的高级应用编程(5天) ? 总用时 15+7+7+15+15+5+5 大概两个半月
第五篇:嵌入式linux驱动学习总结
调用gcc: export path=$path:/usr/(请帮助宣传好范文 网:WWw.hAoWoRD.COM)local/arm/3.4.1/bin
用gcc编译:arm-linux-gcc –o run adc.c
查看gcc: arm-linux-gcc –v
配置nfs
安装nfs
ubuntu上默认是没有安装nfs服务器的,首先要安装nfs服务程序: sudo apt-get install nfs-kernel-server
安装nfs-kernel-server时,apt会自动安装nfs-common和portmap 这样,宿主机就相当于nfs server
配置nfs
(1)配置portmap
方法1: 编辑/etc/default/portmap, 将 -i 127.0.0.1 去掉. 我用的是第一种方法!!但不知道具体什么意思
方法2: $ sudo dpkg-reconfigure portmap , 对should portmap be bound to the loopback address? 选n.
(2)配置/etc/hosts.deny
禁止任何host(主机)能和你的nfs服务器进行nfs连接,加入:
### nfs daemons
portmap:all
lockd:all
mountd:all
rquotad:all
statd:all
(3)配 置/etc/hosts.allow
允许那些你想要的主机和你的nfs服务器建立连接。下列步骤将允许任何ip地址以192.168.2开头的主机(连接到nfs服务器上),也可以指定
特定的ip地址,加入:
### nfs daemons
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.
/etc/hosts.deny 和 /etc/hosts.allow 设置对portmap的访问. 采用这两个配置文件有点类似"mask"的意思. 现在/etc/hosts.deny中禁止所有用
户对portmap的访问. 再在/etc/hosts.allow 中允许某些用户对portmap的访问.
sudo /etc/init.d/portmap restart
重启portmap daemon.
(4)配置/etc/exports
nfs挂载目录及权限由/etc/exports文件定义
比如我要将将我的/opt/friendlyarm/mini2440/root_nfs目录让用户的ip共享, 则在该文件末尾添加下列语句:
/opt/friendlyarm/mini2440/root_nfs *(rw,sync,no_root_squash)
nfs客户端能够共享nfs服务器/opt/friendlyarm/qq2440/root_nfs目录内容.且有读,写权限, 并且该用户进入
/opt/friendlyarm/mini2440/root_nfs目录后的身份为root
最好加上sync, 否则 $ sudo exportfs -r 时会给出警告, sync是nfs的默认选项.
showmount -e 查看nfs server的export list.
若更改了/etc/exports, 运行 sudo exportfs -r 更新
运行 /etc/init.d/nfs-kernel-server restart 重启nfs服务
(5)测试nfs
可以尝试一下挂载本地磁盘
我前面开始时已经提到了我的主机ip是192.168.1.101
我现在试把/opt/friendlyarm/mini2440/root_nfs目录挂载到/mnt目录下 mount -t nfs 192.168.1.101:/opt/friendlyarm/mini2440/root_nfs /mnt 就101和:之间的空格我耗了1个小时
成功的挂载上的话你会在/mnt目录下看到root_nfs这个文件夹下的内容 arm9之家账户:李向阳85
安装ncurses
ncurses是字符终端下屏幕控制的基本库。可能很多新开发的程序都不使用了,不过如果要编译一些老程序,还经常遇得到。
安装:ncurses
http://ftp.gnu.org/pub/gnu/ncurses/
./configure --without-debug #以及其它自己需要的参数
make
make install
3,继续你的make menuconfig。
图形界面出来了。
允
23:22:22
小允
23:22:31
小允 23:22:40
有用不同的名字的吗
寂寞沙洲冷 23:22:42
我把drivers下面的makefile都添加上了 寂寞沙洲冷 23:23:17
叫misc devices 可以吧
小允 23:23:22
2410adc_driver和2410adc_featuresnengbutongma小允 23:23:33
这两个必须一样
小允 23:23:42
这才是kconfig的工作原理