嵌入式linux学习心得(精选多篇)

更新时间:2024-03-15 22:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

嵌入式linux学习心得(精选多篇)

第一篇:嵌入式linux学习内容 知识结构

1嵌入式处理器与裸机程序开发2linux系统管理3linux应用程序开发4linux驱动程序开发5linux内核开发与系统移植

一、处理器

1arm处理器工作模式2arm系统寄存器3arm寻址方式4arm汇编指令集5arm环境c语言编程6arm中断与异常7ads集成开发环境

8裸机程序开发(串口、lcd、时钟、led、按键……) 二、系统管理

1linux定制安装2linux命令详解

3samba、nfs、tftp、wireshark使用4shell编程 三、应用程序开发

1gcc、gdb、makefile2文件、时间编程

3多进程、多线程程序设计4进程间通讯5网络编程 6qt图形化应用程序开发7android图形化应用程序开发 四、内核开发

1linux内核配置与裁剪2linux内核模块开发3根文件系统制作4进程子系统5内存子系统6proc文件系统7系统调用8内核定时器9内核异常分析

五、驱动程序开发

1字符设备驱动程序2总线、设备、驱动模型3硬件访问技术4中断处理5input设备驱动6platform驱动程序7pci、usb驱动程序8网卡驱动程序9触摸屏驱动程序xx串口驱动程序

学习顺序

1嵌入式处理器与裸机程序开发2linux系统管理3linux应用程序开发4linux内核开发基础5嵌入式linux环境搭建6linux驱动程序开发7深入学习linux内核

第二篇:嵌入式linux学习步骤 嵌入式linux学习步骤

作者:phantom时间:xxxx-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编程基础

linuxc语言环境概述gcc使用方法gdb调试技术autoconfautomakemakefile代码优化熟悉linux系统下的开发环境熟悉gcc编译器熟悉makefile规则编写hello,world程序使用make命令编译程序编写带有一个循环的程序调试一个有问题的程序

4、嵌入式系统开发基础

嵌入式系统概述交叉编译配置tftp服务配置nfs服务下载bootloader和内核嵌入式linux应用软件开发流程熟悉嵌入式系统概念以及开发流程建立嵌入式系统开发环境制作cross_gcc工具链编译并下载u-boot编译并下载linux内核编译并下载linux应用程序

4、嵌入式系统移植

linux内核代码平台相关代码分析arm平台介绍平台移植的关键技术移植linux内核到arm平台了解移植的概念能够移植linux内核移植linuxxx内核到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类方法处理事件

xx、linux字符设备驱动程序

设备驱动程序基础知识linux系统的模块字符设备驱动分析fs_operation结构加载驱动程序了解设备驱动程序的概念了解linux字符设备驱动程序结构能够编写字符设备驱动程序编写skull驱动编写键盘驱动编写i/o驱动分析一个看门狗驱动程序对比linuxxx内核与xx内核中字符设备驱动的不同linux块设备驱动程序块设备驱动程序工作原理典型的块设备驱动程序分析块设备的读写请求队列了解linux块设备驱动程序结构能够编写简单的块设备驱动程序比较字符设备与块设备的异同编写mmc卡驱动程序分析一个文件系统对比linuxxx内核与xx内核中块设备驱动的不同

xx、文件系统

虚拟文件系统文件系统的建立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等用在服务器上或许不错,personaldesktop用mandrake,debian,suse都不错,笔者现在用mandrake,因为她长得漂亮:)

如果你并不打算深入学习linux,而是有诸如适应北京市政府办公平台迁移到linux上这种需要,那么中软,红旗等中文linux是不错的选择

我强烈建议:自己亲自动手把linux装到你的硬盘上,你必须学会独立安装linux系统的技能,对于现在的版本来说,其实跟装winxp一样简单

从此现在开始,请不要以windows的工作方式来考虑问题,应该尝试挖掘linux身上的“天才unix”的气质。

三进阶

掌握至少xx个以上的常用命令

理解shell管道"|",文件流重定向">"及追加">>"等

熟悉gnome/kde等x-windows桌面环境操作

掌握tgzrpmbiz等软件包的常用安装方法

学习添加外设,安装设备驱动程序(比如modem) 熟悉grub/lilo引导器及简单的修复操作 熟悉系统固有目录的名称及公用 学会用mount命令访问其他文件系统

了解vi,gcc,gdb等常用编辑器,编译器,调试器 学习linux环境下的简单组网

建议:买一本不需要太厚的linux教材,大致可以满足要求(现在的书越来越多了,还带很多图,我当时可没这么多书)

四高级应用

澄清一些概念:linux的普通操作与真正的系统管理不能相提并论,后者需要很多知识

1英语

即使你不学linux,我也强烈建议你学好英文[usenglish]。因为实质上计算机语言就是英文和字符,所谓的多国语言只是外部包装。你必须能无障碍的阅读大量的英文技术文档在搜

索引擎找到的英文网站和网页中熟练的检索最好能有用英文直接交流的能力,摆脱了这个障碍,你的学习和理解速度就能快很多,你就有机会拉开和别人的差距。

2shell[sed/awk]

shell是命令解释器,是内核与用户界面交流通道,shell写的小脚本有点类似于win下的bat但shell比bat强大的多,shell不只是解释命令,更是一种编程语言,有时候几百行的c用shell几十行就能代替完成工作,因为shell的工作方式建立在系统已有的众多应用程序之上

这也是cs中的一个重要思想。此外,shell可以实现工作自动化,这个概念也比较重要sed,awk用来处理文本,历来很常用。

3perl/php

漂亮的脚本,cgi的首选,比asp好,应用面很广 4cc++

c、c++是linux/unix的核心语言,系统代码都是c写的 5asm

系统底层及内核,硬件,设备驱动程序,嵌入式开发都

需要。//走核心路线的话,cc++,asm最重要

6java,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内核需要的基础:在此之前,希望先把应用层的东西学一下,那样会比较好理解

1c

如果学过潭浩强的大学教科书(除了编几个数学模型好像什么也做不了的那种),建议再看一下《thecprogramminglanguage》secondedition这本圣经(如果想学缓冲区溢出,这点c的功力可能是不够的,还有<c陷阱与缺陷>,<c专家编程>,<cc++深层探索>,反正经典书看多了是没有坏处的)

2asm(at&t语法,保护模式)

保护模式下的比较复杂,基本上每本讲内核的书都会有介绍有xxxxxintel语法的基础就行,有兴趣可以看看intel的官方网站

3数据结构(离散数学)

计算机专业的核心课程,重要性我就不说了 4操作系统原理 看懂这个再去读linux吧

5微机原理/组成原理(数字电路) 底层直接和硬件打交道,所以这个也要 6了解linux/unix

我想至少你要会操作吧,了解unix的api 7软件工程/编译原理

这方面的经典书去可以搜到很多我觉得apue这种书不适合初学者,还是先看看upe之类的吧。apue:《advancedprogrammingintheunixenvironment》,中文名《unix环境高级编程》,作者:wrichardstevens(共有6本经典),尊为“圣经”。他的书为全世界黑客所拜读!upe:《unixprogrammingenvironment》,中文名《unix编程环境》比较适合初学者的,深入浅出,其中有一些比较重要的思想。

另外,介绍linux下应用层编程的书也有很多,比如<gnulinux编程指南>,redhat,redflag出的书

经典书还有很多很多

《操作系统:设计与实现》(交大的考研参考书目,讲minix的unix操作系统设计)、xxbsd操作系统设计与实现、昂莱氏unix源代码分析、understandingthelinuxkernel(2nd)深入

理解linux内核、linux设备驱动程序(2nd)、linux内核源代码情景分析及《保护方式下的xxxx6及其编程》(次书已绝版,只有超星的电子版,如果谁能搞到纸书,清一定告诉我一下,非常感激!!!)

在这里你能明白"黑客"及"haching"一词所代表的真正意义希望我写的这篇文章能造就更多的黑客,而不是骇客

七、一些资源 //下载软件不错 cn

学习嵌入式系统的经验【转载】

实践当然是最锻炼人的方式,但是我想在校生很少有这样的机会,别说本科生,硕士生也未必有条件。所以我想学习嵌入式要从个人的知识背景和现实条件出发,订立合适的阶段目标,在允许的条件下多动手多思考。

三、

一般情况下硬件设备是比较短缺的,所以可以在软件方面和嵌入式系统开发模式上下功夫。提醒大家一点,嵌入式

系统开发设计的内容很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux

下的c,比如uc/osii(有开放源代码),虽然可能无法在硬件上仿真,但也不必着急。无论对初学者还是自以为是高手的人来说,编程水平(这可不受硬件条件限制)绝对是没有止境的。而锻炼编程水平需要的条件只是一台pc而已,条件比较容易具备。有了较高的编程水平(嵌入式主要是c,当然oo的几种语言c++,java是发展趋势),等到有机会的时候及时补充硬件知识,会很快成为高手的。

四、

还有,一定记住,学习嵌入式,"要想办法,不要找理由"。当年在dos下用tc编程时的条件,现在回想起来简直就是奇迹。

五、

我推荐一条发展道路吧,仅供参考, 六、

1、c开发经验

条件:linux

方法:随便,主要是掌握ansic编程(不包括gtk,qt等图形可视化开发)

七、

2、网络、操作系统、体系结构 条件:linux,各种书,算法、例程。

方法:通过c编程实现简单的网络等知识的算法和过程。 八、

3、嵌入式系统概念

条件:各个嵌入式网站,讨论组,书籍

方法:少提问(尤其是等着天上掉馅饼,这主要是防止增长惰性,也解决不了实际问题),多思考。

九、

4、嵌入式开发实践

条件:各种嵌入式系统开发工具的demo版,包括编译器,仿真器。可以找高手们要,也可以下载。

方法:这里有两个分支,一个是基于mcu/mdsp的嵌入式系统开发,一个是象palmos,wince,uc/osii等rtos下的应用软件开发。对硬件感兴趣,想成为真正高手的由第一个分支入手,以后进入第二个分支;如果十分厌烦硬件,只想停留在软件开发上的,可以只由第二个分支入手,以后就和pc上的开发没有什么本质上的区别了,找份不错的工作应该没问题,可以不用进行下面的步骤了,感兴趣可以参考第6条。

十、 5、硬件开发

条件:各种嵌入式芯片、存储器等电路器件,protelxx等电路设计软件,电路板制作。

方法:这时候该有开发条件了,最起码是xx系列,这个比较方便。电路的设计内容较多,不过看起来吓人,实际上比软件要简单的多。只要下功夫,实践会告诉你一切。

十一、

6、硬件工程/软件工程/项目管理

条件:各个芯片详细资料和使用经验,软件工程知识,项目管理知识,培训,大型项目

参与经验方法:已经是高手了,但是学无止境,沾沾自喜于已有的知识是致命的。那个下一步。你该是管理者了。十二、

抛砖引玉,以上出自我的经验,欢迎各路高手们补充,初学者提问。

【后记】嵌入式系统,从小的方面来说,大家都做过。一个单片机为核心的小的电子系统,包括了软件和硬件。但是,在很多人的心目中,单片机就是xx,软件就是自己从头用汇编写的监控程序,然后实现自己的功能。事实是这样的吗?单片机==xx吗?市场上的单片机何止上千种,从4位到8位到xx、xx、xx位,功能差的只有控制功能,功能强的运算能力超过一般台式机,我们所作的,是根据自己的需求,熟练程度,资源以及性价比来选择所需。拿我比较熟悉的arm来说,移动通讯市场的控制器至少xx%采用arm作为其内核,手持设备以及嵌入式装置的市场份额其至少占xx%,但我估计大部分的同学可能还不知道arm是个什么,更别说去搞基于arm的开发了。同样从软件的角度来讲,嵌入式系统的规模越来越大,对可靠性和实时性的要求越来越高,再也不是自己从头做一个监控程序,利用键盘驱动的时代了,大多数的嵌入式系统都采用了操作系统。这就对开发人员提出了更高的要求,需要对操作系统的原理比较了解。大家也许学过操

作系统,但有几个人去接触过操作系统的源代码呢(当然,也许大家读过linux的源代码,不过规模较大)。

第四篇:嵌入式linux学习七步曲 ?

嵌入式linux学习七步曲

sailor_foreversailing_xxxx@xx3com转载请注明

http://blogcsdnnet/sailor_xxxx/archive/xxxx/xx/xx/xxxxxx2aspx

? ?

【序】学习linux开发近一年,由于我是实验室第一个从事这方面开发的,学习过程中遇到了很多问题,可是总是求师无门,只能一个人自己摸索,同时也充分利用了网络,参考了广大csdn博友及相关论坛的帖子,在此表示感谢!?

?

嵌入式linux的学习涵盖的范围比较广,下从bootloader,到内核移植、文件系统,中间的驱动开发,到上层的应用程

序调试、开发环境等,变化莫测,经常是别人的能用自己的就有问题。

?

由于缺乏他人适当指点,自己在学习过程中也走了很多弯路,整个开发环境的搭建整了n久,更搞笑的是经常听说模块加载insmod,可连这个命令在主机还是arm上用都没搞明白,那叫一个汗啊!大家勿笑,嵌入式linux的初学者确实对交叉环境比较不懂,我是其一啊。?

现在适逢好友小布丁要学习嵌入式linux,就将近一年来的学习体会总结下,整理了一个总体的学习计划,希望给那些曾经像我一样彷徨的人一些帮助。后续将完善此文档,上传到个人空间上,先贴出目录。本人水平有限,不当之处,还请大家指正!

?

小布丁同学曾在我处于困境时一如既往的理解我支持我,给我信心给我鼓励,谢谢你,美丽开怀的小布丁,希望你能happyandfascinatingforever!

?

谨以此文献给我们永远可爱迷人的小布丁!

?

sailor_forever september3,xxxx ?

*****************************************************************************?

?

第一篇linux主机开发环境(xx天) ?

xxvmvare下linux的安装(优先) xxwindows下从硬盘安装linux(可选) xxlinux的基本命令及使用

xxlinux的文件系统及与windows的文件共享 xxgcc开发工具 xxgdb调试

xxmakefile编写

xx简单应用程序?第二篇arm+linux开发环境(7天)?xx交叉开发环境介绍xx交叉编译器cross-toolxx配置主机开发环境xx1配置超级终端minicom或hyperterminal或dnwxx2配置tftp网络服务xx3配置nfs主机端网络服务?xx建立交叉开发环境xx1配置nfsarm端网络服务xx2编译arm-gdb?xx交叉调试应用程序xxarm上的简单模块编程?第三篇linux系统bootlaoder移植(7天)xxbootloader介绍xxu-boot命令及环境变量xxu-boot的编译配置xxu-boot源码分析xxu-boot移植过程?第四篇linux的内核移植(xx天)xx配置编译linux内核xx1linux内核源代码结构xx2linux内核编译选项解析xx3linux内核编译链接xxlinux启动过程源代码分析xxlinux内核移植平台相关代码分析?第五篇linux的驱动编程(xx天)xxlinux的设备管理xxlinux的驱动程序结构xx简单的字符设备驱动程序xxlinux内核模块的加载卸载xxlinux的打印调试方法xx字符设备的高级属性-中断xx常见的串口网口驱动分析?第六篇文件系统制作(5天)

xx文件系统和存储设备的选择xx部署ramdisk文件系统的过程?第七篇linux的高级应用编程(5天)?总用时xx+7+7+xx+xx+5+5大概两个半月

第五篇:嵌入式linux驱动学习总结

调用gcc:exportpath=$path:/usr/(请帮助宣传好:)local/arm/xx1/bin

用gcc编译:arm-linux-gcc–orunadcc 查看gcc:arm-linux-gcc–v 配置nfs 安装nfs

ubuntu上默认是没有安装nfs服务器的,首先要安装nfs服务程序:sudoapt-getinstallnfs-kernel-server

安装nfs-kernel-server时,apt会自动安装nfs-common和portmap这样,宿主机就相当于nfsserver

配置nfs (1)配置portmap

方法1:编辑/etc/default/portmap,将-ixxxxxx去掉我用的是第一种方法!!但不知道具体什么意思

2:$sudodpkg-reconfigureportmap,

shouldportmapbeboundtotheloopbackaddress?选n

(2)配置/etc/hostsdeny

禁止任何host(主机)能和你的nfs服务器进行nfs连接,加入:

###nfsdaemons portmap:all lockd:all mountd:all rquotad:all statd:all

(3)配置/etc/hostsallow

允许那些你想要的主机和你的nfs服务器建立连接。下列步骤将允许任何ip地址以xxxxxx2开头的主机(连接到nfs服务器上),也可以指定

特定的ip地址,加入: ###nfsdaemons portmap:xxxxxx1 lockd:xxxxxx1

rquotad:xxxxxx1 mountd:xxxxxx1 statd:xxxxxx1

/etc/hostsdeny和/etc/hostsallow设置对portmap的访问采用这两个配置文件有点类似"mask"的意思现在/etc/hostsdeny中禁止所有用

户对portmap的访问再在/etc/hostsallow中允许某些用户对portmap的访问

sudo/etc/initd/portmaprestart 重启portmapdaemon (4)配置/etc/exports

nfs挂载目录及权限由/etc/exports文件定义

比如我要将将我的/opt/friendlyarm/minixxxx/root_nfs目录让用户的ip共享,则在该文件末尾添加下列语句:

/opt/friendlyarm/minixxxx/root_nfs*(rw,sync,no_root_squash)

nfs

客户端能够共享

nfs

服务器

/opt/friendlyarm/qqxxxx/root_nfs目录内容且有读,写权限,并且该用户进入

/opt/friendlyarm/minixxxx/root_nfs目录后的身份为root 最好加上sync,否则$sudoexportfs-r时会给出警告,sync是nfs的默认选项

showmount-e查看nfsserver的exportlist 若更改了/etc/exports,运行sudoexportfs-r更新 运行/etc/initd/nfs-kernel-serverrestart重启nfs服务 (5)测试nfs

可以尝试一下挂载本地磁盘

我前面开始时已经提到了我的主机ip是xxxxxxxxxx 我现在试把/opt/friendlyarm/minixxxx/root_nfs目录挂载到

/mnt

mount-tnfsxxxxxxxxxx:/opt/friendlyarm/minixxxx/root_nfs/mnt就xx1和:之间的空格我耗了1个小时

成功的挂载上的话你会在/mnt目录下看到root_nfs这个文件夹下的内容arm9之家账户:李向阳xx

安装ncurses

ncurses是字符终端下屏幕控制的基本库。可能很多新开发的程序都不使用了,不过如果要编译一些老程序,还经常遇得到。

安装:ncurses

http://ftpgnuorg/pub/gnu/ncurses/

/configure--without-debug#以及其它自己需要的参数 make makeinstall

3,继续你的makemenuconfig。 图形界面出来了。 允 xx:xx:xx 小允 xx:xx:xx 小允xx:xx:xx

有用不同的名字的吗 寂寞沙洲冷xx:xx:xx

我把drivers下面的makefile都添加上了寂寞沙洲冷xx:xx:xx

叫miscdevices可以吧 小允xx:xx:xx

xxxxadc_driver和xxxxadc_featuresnengbutongmaxx:xx:xx

这两个必须一样 小允xx:xx:xx

这才是kconfig的工作原理

小允

本文来源:https://www.bwwdw.com/article/phm8.html

Top