下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 嵌入式专业入门笔记

嵌入式专业入门笔记.pdf

嵌入式专业入门笔记

皮皮
2010-03-30 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《嵌入式专业入门笔记pdf》,可适用于IT/计算机领域

嵌入式Linux入门笔记作者:阿南嵌入式Linux入门笔记前言第一阶段在PC机上学习熟悉Linux一.RedHatLinux下的常用操作二.Minicom的使用三.NFS的使用四.应用程序编程实验五.模块编程实验六.简单的字符设备驱动实验第二阶段在开发板上学习研究Linux一.MIZILinuxSDKforSC开发环境及工具使用构造软件开发环境编译嵌入式Linux生成image将嵌入式Linux的image下载到目标板嵌入式平台测试二.嵌入式Linux驱动开发模块编程实验点亮目标板的LED.按键中断实验.定时器驱动及PWM输出.点亮目标板LCD.安装触摸板三.构建完整的嵌入式Linux系统.桌面系统的启动.下载可读写的文件系统Yaffs.Yaffs文件系统移植.Yaffs作为根文件系统启动.完整的嵌入式Linux系统四.嵌入式WEB服务器.Boa移植.WEB应用开发五.NFS的配置.主机的NFS服务器配置.目标机的NFS客户端配置.出现的问题第三阶段在项目中应用Linux一.进程间隔定时器.概念.数据结构.操作函数.测试程序二.虚拟地址三.以太网控制器CSA硬件调试.调试步骤.出现过的问题四.WiFi无线网络.在RedHat上安装TLWN无线网卡驱动无线网络配置.RedHat上使用WL无线网卡.无线网卡控制器PD硬件测试.Linux下驱动程序及装载五.CPLD扩展外部设备.扩展IO.扩展串口C六.PWM驱动蜂鸣器.驱动源码.驱动测试程序.出现过的问题七.网络驱动.硬件测试.Linux驱动程序.驱动测试程序.出现的问题八.红外学习与发射.硬件测试程序.Linux驱动程序.驱动测试程序.出现的问题.总结九.网络编程.常用函数.服务器程序.测试用客户程序.利用IO复用替代多进程的并发服务器.用无线网络测试上述程序十.系统时间的实现十一.关于进程的体会.进程间不共享变量.进程通信信号的使用.防止僵死进程第四阶段用户图形界面设计一.QT应用编程二.QtEmbedded和QTOPIA.Linuette平台.QTEQtopiaQTEQtopiaPDA.linuette的root、rootenglish、usr比较后记前言很多朋友(无论是单片机出身的底层软件工程师还是PC机的Windows程序员)都很想学习Linux(觉得只有嵌入式Linux才有钱途而我觉得无论什么只要比别人做的好都会有前途)同时却觉得它很难把它神密化了(就象当初神密化ARM一样)还认为必须要先买个ARM开发板才能开始Linux的学习或问是否应先装个虚拟机等等然后一直在徘徊着(时间就这样一天天过去了)!我讨厌徘徊宁可花时间去尝试失败然后总结经验。这份笔记基本上按时间顺序记录了我刚接触Linux到对它有个整体认识的学习、调试过程出现的问题及心得总结等也是我平时工作中不可缺少的手册。本想按内容重新整理但后来还是保持着原来的时间顺序因为觉得这样更容易让初学者借鉴学习过程和方法。Linux我还只是一个新手所以一定会有很多错误很多非常不恰当的想法和问题肯请见谅和批评指正!如果觉得它对您有帮助甚至非常的棒请您写信(ccnhotmailcom)告诉我以给我最大的鼓励!如果您想表示感谢那么请您上ICBBS的ARM论坛和我一起帮助那些需要帮助的朋友吧!我知道中国足球很差但还会一如既往的关注和支持!自己也会执着的抽出时间千方百计的寻找踢球机会培养激情。同样也知道中国的电子技术环境不好但还会执着追求、学习下去发表心得与大伙共勉。亲爱的工程师们让我们象伊拉克足球一样战斗吧!!!第一阶段在PC机上学习熟悉Linux刚学会ARM不久就遇到很多工程师在学习和使用Linux当时很是好奇和羡慕!注意到几乎所有工程师都拥有《GNULinux编程指南》故也买来收藏着看了些介绍性的篇幅也有了在PC机上装个Linux系统的念头。由于对RedHat还不了解包括基本的操作于是买了本《Redhat入门》在电脑城找了张Readhat光盘(现在肯定找不到了去网上下吧)还担心在原来硬盘上安装会破坏原来的数据(担心是多佘的后来都用PartitionMagic在原盘符下直接分区)于是花了元买了G的旧硬盘就这样回家瞎玩起来。后来又买了本《Redhat系统管理》应付RedHat的基本操作已经足够。熟悉一两个星期的Redhat基本操作与环境后是该玩点深入的东东了觉得自己将来应该是先以嵌入式Linux驱动为主而不是应用编程所以在还没有进一步学习《GNULinux编程指南》的情况下就买《Linux设备驱动程序》钻研(后来证明这是错误的有些急功近利)。《Linux设备驱动程序》看的比较费劲通读了一遍后在PC机做的第二个实验就遇到了困难编译总是出错。去书店参考其它驱动的书上网查找等试了很多方法都没有解决困惑了很久。后来又开始研读《GNULinux编程指南》读了这本书再翻《Linux设备驱动程序》就轻松多了。问题没有解决总会有个结会时常有针对性的去书店翻些相关的书上网查些资料等。在了解到了内核源码树结构编译等之后才知道驱动和应用程序是有区别的是属于内核级在编译时要指定Linux内核源代码树下的头文件(–Iusrsrclinuxinclude)问题就这样解决以后的学习、实验都变得顺利了出现问题基本都能很快排除。总结这阶段的学习顺序我觉得应该是:首先在PC机上安装Linux系统再买本相应的入门书籍主要是熟悉Linux环境学习常用的命令和操作(不一定多基本、常用的就可以以后在使用过程中慢慢积累)理解各目录结构与作用等。其次学习在Linux环境下编程《GNULinux编程指南》就可它会介绍文件描述符的概念打开、读、写等操作的系列基础知识没有这些基础而直接看《Linux设备驱动程序》会觉得累。后来研读了《UNIX环境高级编程》觉得也很好它讲了很多前者没有的细节。再次拿本内核的书翻翻了解一下linux内核源代码树的目录结构编译等。最后学习《Linux设备驱动程序》理解驱动程序的结构框架等。注:我觉得学习不需要都直接记住有点不现实(但应该理解不要留下疑问如果有应及时的用实验去证实再记录)在以后的应用中再查阅巩固这阶段也不例外。一.RedHatLinux下的常用操作.如何修改在开机引导装载程序中等待自动登录默认操作系统的时间?答:如果引导装载程序是GRUB则修改etcgrubconf文件中的timeout=秒数。如果引导装载程序是LILO,则修改的是etcliloconf文件。可用vi等编辑器修改,下同。.在字符(Text)模式下如何关机、重启、注销?答:关机:poweroff或shutdown–hnow重启:reboot或shutdown–rnow注销(即重新登入):logout其中在shutdown指令中的now是指现在就执行也可以指定多少时间后再执行此命令。.U盘的使用答:先创建mntusb目录再执行mountdevsdamntusb挂载此时mntusb就是U盘的目录在拔出U盘时要执行umountmntusb进行卸载。.在字符模式(Text)下如何进入XWindow模式(Graphic)?在XWindow模式下如何返回字符模式?答:执行startx命令启动XWindow模式鼠标点击“MainMenu(主菜单)>Logout(注销)”打开对话框中选择“注销”进入字符模式或CRTLALTF~F来进入不同的虚拟控制台(即文本模式下)。.如何重新指定开机默认进入的执行模式(字符或XWindow模式)?答:修改etcinittab文件中的内容(id::initdefault:)。其中表示以XWindow模式(Graphic)登入为字符模式(Text)登入.在字符模式下如何使用户登入时系统不要求输入密码?如何恢复或更改用户密码?答:取消输入密码:passwd–d用户帐号。如要取消root登入时的密码则执行passwd–droot。也可以用vi打开etcshadow文件删除密码的方法取消。恢复或更改密码则执行passwd用户帐号(如果是取消自己则不用)命令后会提示输入Newpassword和Retypenewpassword。.字符模式下如何新增用户帐号?答:使用“useradd用户帐号”命令来增加但在新增后还不能登入使用还需要用passwd命令来设置密码后才行。.在XWindow下如何选择系统默认使用的语言?答:鼠标点击“主菜单>系统设置>语言”打开选择语言对话框中选择。.用ls等命令查看的内容太多超过一页时如何分页显示?答:可用ls|more或ls|less进行分页查看。其中在用more浏览时按空格键(Space)则会显示下一页的内容按回车(Enter)键则会向下多显示一行按q键则离开浏览模式。在用less浏览时按h键会出现在线使用说明按q键离开浏览模式。.如何获得命令的使用方法?答:可利用在线手册man(Manual)用法是输入man和待查的命令名称。如要查询ls命令的使用方法则输入以下命令:manls。也可以lshelp.搜索文件及目录和搜索包含特定字符串的文件?答:搜索文件及目录可以用find命令如要在根目录()上搜索apache文件则输入命令:findnameapache–print,注意:如果没有指定目录则系统会以当前的目录为搜索的范围搜索包含特定字符串的文件可以用grep命令如要在etc目录下搜索包含字符串“password”的文件则输入:grep–n‘password’etc**其中加入n参数会标出符合指定的字符串的列数另外不可指定在目录中搜索否则会出现错误信息如上述不能写成:grep–n‘password’etc另外如果想停止搜索可以直接按“CtrlC”键结束该命令就可以。现在我常用:grep–irpasswordetc.控制台间的切换答:在文本模式下用ALTF~F来分别在个虚拟控制台间切换它们可分别用不同的用户名登入和执行不同的命令与程序如果已经启动了XWindow(如:在文本模式下用”startx”命令启动)则按ALTF切换到XWindow图形模式。在XWindow图形模式下用CRTLALTF~F分别切换到文本模式下的个虚拟控制台。CRTLALTBackSpace结束图形模式。因为linux是多任务的系统,所以可以在不同的控制台下用不同(或同一)的用户登陆来运行不同的程序。我觉得这个功能很方便因为有时在文本模式下需要打开多个终端来处理显示多个的任务如:一个终端运行minicom作为目标板的控制一个终端作为宿主机编译目标板要运行的文件还有多个终端打开多个源文件在浏览等等。如果习惯在XWindow模式下就例外因为用鼠标右键就可以打开多个终端。.查看PDF文档和浏览网页答:在XWindow下打开shell终端输入”xpdffilenamepdf”和“mizzofilenamehtml”命令分别查看。注:必须在XWindow下才能运行这两个程序文本模式不能运行。.查看磁盘使用情况答:#df–h.proc目录下几个关于系统资源非常有用的文件procmodules、procioports、prociomen、procdevices、procinterrupts、procfilesystems.关于内核代码调试时输出打印信息的printk语句如:printk(KERNDEBUG“HereIam:s:in”,FILE,LINE)printk(KERNINFO“DriverInitionaln”)等同于printk(“<>”“DriverInitionaln”)printk(“<>Hello,World!n”)没有指定优先级的printk语句采用默认日志级别(DEFAULTMESSAGELOGLEVEL)在kernelprintkc中被指定根据日志级别内核可能会把消息输出到当前控制台上。当优先级小于consoleloglevel整数值时消息才会被显示出来。如果系统同时运行了klogd和syslogd则无论consoleloglevel为何值都将把内核消息追加到vallogmessages中。consoleloglevel的初始值是DEFAULTCONSOLELOGLEVEL可以通过文本文件procsyskernelprintk来读取和修改它及控制台的当前日志级别等。也可以简单的输入下面命令使所有的内核消息得到显示:#echo>porcsyskernelprintk.查看当前正在运行的进程答:#ps.解压缩到指定目录答:#tarxvzflinuttetgz–Clinuette.当etcgrubconf文件中的内容被修改或破坏时不能正常启动时如何在GRUB引导时修改设置使其正常启动答:以修改了etcgrubconf文件中的vga项使启动时显示器不能显示为例在GRUB启动引导菜单中windowsXP和RedHatLinux()两项中使用键头键选中linux系统不按Enter而按E键进入菜单项目编辑器再使用键头键选中kernel项也按E键进行编辑在行的后面输入vga=fb=on后按Enter最后按b键执行命令并引导操作系统。.包管理器RPM使用以tmake为例安装:#rpm–ivhtmakemznoarchrpm升级:#rpm–Uvhtmakemznoarchrpm查询:#rpm–qtmake删除:#rpm–etmake二.Minicom的使用.启动Minicom输入minicom启动或输入minicom–s直接进入设置模式。.设置>选择串口:在选择菜单中的“Serialportsetup”按回车再按“A”以设置“SerialDevice”(如果使用串口则输入devttyS如果您使用串口则输入devttyS注意其中的S是大写)按回车返回。>设置波特率:按“E”键进入设置“bpsparBits”(波特率)界面如果按“I”以设置波特率为按回车返回。>数据流控制:按“F”键设置“HardwareFlowControl”为“NO”。其它为缺省设置然后按回车到串口设置主菜单选择“Savesetupasdfl”按回车键保存刚才的设置(保存到“etcminircdfl)再选择“Exit”退出设置模式回到minicom操作模式。此时可像Windows下的超级终端一样使用了。.退出minicom按下“CtrlA”键松开后紧接着再按下“Q”键,在跳出的窗口中选择“Yes”。.其它有用的功能命令帮助“CtrlA”后按“Z”清屏“CtrlA”后按“C”设置“CtrlA”后按“O”发送文件“CtrlA”后按“S”退出“CtrlA”后按“Q”三.NFS的使用为什么要使用NFS:网络文件系统(NFSNetworkFileSystem)是一种在网络上的计算机间共享文件的方法通过它可以将计算机上的文件系统导出给另一台计算机。我们在宿主机上编辑、编译好的程序可以通过它导出到目标板上进行实际的运行。.宿主机配置从NFS服务器中共享文件又称导出目录etcexports文件控制NFS服务器要导出哪些目录。格式如下:共享的目录可以连接的主机(读写权限其它参数)如果允许目标板(IP:*)挂载主机的home目录则etcexports文件的内容如下:home**(rwsync)注:如果出现mount不成功可将sync去掉试试更改后要使用如下命令重新载入配置文件:#sbinservicesnfsreload或#etcinitdnfsreload然后启动NFS服务器命令如下:sbinservicesnfsstart上面两个命令也可以用下面的一条指令完成如下:sbinservicenfsrestart设置好后也可以通过mount自己来测试NFS服务设置是否成功。如果本机IP为,则可以用mount:homemnt如果mount成功则在mnt的目录就可以看到home目录下面的东西了。.使用mount命令挂载NFS文件系统下面将宿主机(IP:)配置的home目录挂载到(IP:)目标板上的mnt目录。在宿主机启动minicom作为目标板的显示终端启动目标板的linux系统再使用下面命令:mount–onolock:homemnt注意:如果没有“onolock”选项而直接使用命令:mount:homemnt时将出现如下错误:portmap:serverlocalhostnotrespondingtimedout目前我都用:mount–tnfs:homemnt四.应用程序编程实验《GNULinux编程指南》一书的例程是非常全面的下载它的源代码后可以直接编译运行基本上不会有什么问题。五.模块编程实验参考《Linux设备驱动程序》P页helloc源程序如下:#defineMODULE#include<linuxmoduleh>intinitmodule(void){printk(“<>Hello,worldn”)return}voidcleanupmodule(void){printk(“<>Goodbyecruelworldn”)}用以下命令进行编译:#gcc–chelloc#insmodhelloohello,world#rmmodhello注:不是#rmmodhelloGoodbyecruelworld出现的问题:在执行#insmodhelloo时并没出打印出“hello,world”而是出现了下述错误:hello:kernel–moduleversionmismatchhelloowascompiledforkernelversionwhilethiskernelisversion原因:模块和内核版本不匹配即编译内核的编译器与现在编译模块的编译器版本不一致。解决方法:>将usrincludelinuxversionh文件中的#define…“”修改成#define…“”(),再重新编译!>用insmod的f(force,强制)选项强行装入模块如下:insmod–fhelloo>因用viusrincludelinuxversionh查看到定义的内核版本是而在内核原代码树下usrsrclinuxincludelinuxversionh中定义为版本所以用如下命令进行编译:gcc–c–Iusrsrclinuxincludehelloc再装载就OK!注:可查看procmodules文件。六.简单的字符设备驱动实验驱动程序源代码如下:*CharDriverc*#defineNOVERSION#include<linuxmoduleh>#include<linuxversionh>charkernelversion=UTSRELEASE#defineKERNEL#include<linuxtypesh>#include<linuxfsh>#include<linuxmmh>#include<linuxerrnoh>#include<asmsegmenth>#defineSUCCESSstaticintdeviceread(structfile*file,char*buf,sizetcount,lofft*fpos)staticintdeviceopen(structinode*inode,structfile*file)staticvoiddevicerelease(structinode*inode,structfile*file)structfileoperationstddfops={read:deviceread,open:deviceopen,release:devicerelease,}#defineDEVICENAME"chardev"staticintDeviceOpen=unsignedinttestmajor=staticcharMessaegestaticintdeviceopen(structinode*inode,structfile*file){#ifdefDEBUGprintk("deviceopen(p)n",file)#endifif(DeviceOpen)returnEBUSYDeviceOpenMODINCUSECOUNTreturnSUCCESS}staticvoiddevicerelease(structinode*inode,structfile*file){#ifdefDEBUGprintk("devicerelease(p,p)n",inode,file)#endifDeviceOpenMODDECUSECOUNT}staticintdeviceread(structfile*file,char*buf,sizetcount,lofft*fpos){intleftif(verifyarea(VERIFYWRITE,buf,count)==EFAULT)returnEFAULTfor(left=countleft>left){putuser(,buf)buf}returncount}intinitmodule(void){intresultresult=registerchrdev(,"chardev",tddfops)if(result<){printk("chardev:can'tgetmajornumbern")returnresult}if(testmajor==)testmajor=resultprintk("Hello,I'minkenelmoden")return}voidcleanupmodule(void){printk("Hello,I'mgointtooutn")unregisterchrdev(testmajor,"chardev")}用下述命令进行编译:#gcc–ODMODULE–DKERNELcCharDriverc出现下述错误:CharDriver

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/34

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利