嵌入式实习个人总结.doc

上传人:Wo****Z 文档编号:30961293 上传时间:2022-08-07 格式:DOC 页数:30 大小:37KB
返回 下载 相关 举报
嵌入式实习个人总结.doc_第1页
第1页 / 共30页
嵌入式实习个人总结.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《嵌入式实习个人总结.doc》由会员分享,可在线阅读,更多相关《嵌入式实习个人总结.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、嵌入式实习个人总结嵌入式毕业实习报告嵌入式系统毕业实习报告学专班学姓院:电子与电气工程学院业:电子信息工程级:电子11201号:1203251024名:徐贤畅嵌入式系统开发与应用概述在今日嵌入式ARM技术已经成为了一门比较热门的学科无论是在电子类的什么领域你都可以看到嵌入式ARM的影子。如果你还停留在单片机级别的学习那么实际上你已经落下时代脚步了ARM嵌入式技术正以几何的倍数高速发展它几乎渗透到了几乎你所想到的领域。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。嵌入式的广泛应用可以

2、说是无所不在。linux系统linux系统主要是由用户空间和内核空间再加上外部的硬件平台构成用户空间就是用户应用程序的运行空间主要包括两方面的内容:用户应用程序和GNUCLibrary(glibc)。而内核空间有三方面的内容一是系统调用接口它作为用户空间和内核空间相互转移的一种方式二是内核空间三是体系相关内核代码在linux内核代码中可以看到arch目录下有许多子目录其中每一个子目录代表一种硬件平台。而为什么要把linux系统划分为用户空间和内核空间呢?主要是一旦用户空间和内核空间没有分开那用户将拥有很大的权限去操控内核或用户应用程序的崩溃将会造成系统的崩溃而linux系统是利用cpu的模式分

3、级来分别运行用户空间和内核空间这样就可以使操作系统得到充分的保护。而现代的cpu通常实现了不同的工作模式以ARM处理器为例实现了7种运行模式分别为:1)用户模式(usr):ARM微处理器正常程序执行模式2)系统模式(sys):运行具有特权的操作系统任务3)中断模式(irq):用于通用的中断处理4)外部中断模式(fiq):用于高速数据传输或通道处理5)数据访问终止模式(abt):当数据或指令预取终止时进入该模式可用于虚拟存储及存储保护6)管理模式(svc):操作系统使用的保护模式7)未定义指令中止模式(und):当未定义的指令执行时进入该模式可用于支持硬件协处理器的软件仿真ARM微处理器的运行模

4、式可以通过软件改变也可以通过外部中断或异常处理改变除用户模式外其他模式都是非用户模式或特权模式除用户模式和系统模式外其他模式都是异常模式常用于处理异常或中断以及需要访问受保护的系统资源等情况。同时用户空间和内核空间是程序执行的两种不同状态通过系统调用和硬件中断去实现用户空间到内核空间的转移系统调用是主动的硬件中断是被动的比如键盘按下或者串口中断。接下来说说linux的内核架构它主要是包含7大组成部分1.内存管理内存管理的主要作用是使多个进程能安全高效的共享内存区域通常使用以下两个手段:内存映射:将物理内存映射到虚拟内存中变有限为无限有效管理:使用各种内存管理算法(如伙伴算法)减少内存浪费2.虚

5、拟文件系统vfs隐藏了各种文件系统的具体细节为文件操作提供统一的接口3.网络协议栈它为linux提供了完善丰富的网络协议实现4.进程管理进程管理的重点是创建进程、停止进程并控制它们之间的通信。进程管理还包括控制活动进程如何共享cpu即进程调度。5.设备驱动设备驱动也是内核的一部分它不同于内核的其他部件并且独立于内核的其他部件同时它是与设备交互的唯一模块通常由第三方厂商开发一个驱动程序不与其他驱动程序交互;内核与驱动程序之间也仅通过一个严格定义的接口交互。6.系统调用接口SCI层为用户空间提供了一套标准的系统调用函数来访问Linux内核搭起了用户空间到内核空间的桥梁。7.体系相关部分Linux内

6、核源代码采用树形结构进行组织非常合理地把功能相关的文件都放在同一个子目录下使得程序更具可读性。下面介绍下这些目录的组成arch目录arch是architecture的缩写。内核所支持的每种CPU体系在该目录下都有对应的子目录。每个CPU的子目录又进一步分解为boot,mm,kernel等子目录分别包含控制系统引导内存管理系统调用等。其下子目录有|-x86/_英特尔cpu及与之相兼容体系结构的子目录_/|-boot/_引导程序_/|-pressed/_内核解压缩_/|-tools/_生成压缩内核映像的程序_/|-kernel/_相关内核特性实现方式如信号处理、时钟处理_/|-lib/_硬件相关工

7、具函数_/block目录部分块设备驱动程序crypto目录加密、压缩、CRC校验算法documentation内核的文档drivers目录(重点)设备驱动程序fs目录存放各种文件系统的实现代码。每个子目录对应一种文件系统的实现公用的源程序用于实现虚拟文件系统vfs。|-devpts/_/dev/pts虚拟文件系统_/|-ext2/_第二扩展文件系统_/|-fat/_MS的fat32文件系统_/|-isofs/_ISO9660光盘cd-rom上的文件系统_/include目录内核所需要的头文件。与平台无关的头文件在include/linux子目录下与平台相关的头文件则放在相应的子目录中。init

8、目录内核初始化代码ipc目录进程间通信的实现代码kernel目录Linux大多数关键的核心功能都是在这个目录实现。(调度程序进程控制模块化)lib目录库文件代码mm目录mm目录中的文件用于实现内存管理中与体系结构无关的部分(与体系结构相关的部分在哪里实现?arch)目录网络协议的实现代码|-802/_802无线通讯协议核心支持代码_/|-appletalk/_与苹果系统连网的协议_/|-ax25/_A_25无线INTER协议_/|-bridge/_桥接设备_/|-ipv4/_IP协议族V4版32位寻址模式_/|-ipv6/_IP协议族V6版_/sles一些内核编程的范例scripts配置内核的

9、脚本securitySElinux的模块sound音频设备的驱动程序usrcpio命令实现virt内核虚拟机Linux内核的配置与编译Linux内核具有可定制的优点配置内核的目的是裁剪掉不必要的文件和目录获得一个最简单的又能满足用户开发的操作系统以解除嵌入式开发过程中所遇到的存储空间有限的困扰。内核配置与编译的具体步骤如下:1.清除临时文件、中间文件和配置文件1)makecleanRemovemostgeneratedfilesbutkeeptheconfig即清除大部分生成的文件但保留配置文件2)makemrproperRemoveallgeneratedfiles+configfiles即

10、清除所有生成的文件还有配置文件3)makedistcleanMrproper+removeeditorbackupandpatchfiles即实现makemrproper命令的同时删除编辑器备份文件和补丁文件2.确定目标系统的软硬件配置情况比如cpu类型网卡型号所需支持的网络协议等。3.使用如下命令之一配置内核:1)makeconfig:基于文本模式的交互式配置2)makemenuconfig:基于文本模式的菜单型配置3)makeoldconfig:使用已有的配置文件(.config)但是会询问新增的配置选项4)makexconfig:图形化的配置(需安装图形化系统)Makemenuconfi

11、g是最为常用的内核配置方式如果一个.config文件已经存在它将使用该文件设置那些默认的值4.编译内核编译内核通常也需要几个步骤一是清除以前编译通过的残留文件;二是编译内核image文件和可加载模块;三是安装模块。下面是编译内核的具体步骤。makedep命令用在内核2.4或之前用于建立源文件之间的依赖关系在执行内核配置命令之后使用不过在2.6内核中已经取消该命令该功能由内核配置命令实现。makeclean命令用于删除前面留下来的中间文件该命令不会删除.config等配置文件。这个步骤是可选的它的目的是清除原先编译过而残留的.和.o(obj文件)。如果是刚下载的源代码那么这一步就可以省略了但是如

12、果已经编译多次内核这一步是必要的不然后面可能会出现很多莫名其妙的小问题。makezImage命令用于编译生成压缩形式的内核镜像当编译成功后就会在archarmboot目录下生成zImage文件大小一般为几百KB。对于嵌入式Linux内核而言直接将生成的zImage下载到嵌入式目标板的flash中即可。对于较大的内核如果用makezImage编译系统会提示使用makebzImage命令来编译bzImage是bigzImage的缩写可用于生成较大的压缩内核比如桌面Linux系统内核。在配置菜单的过程中有些选项被选择为模块的即选项前为M并且在回答Enableloadablemodulesupport

13、(CONFIG_MODULES)时选了Yes的则接下来就还要用命令makemodules来编译这些可加载模块并用makemodules_install将makemodules生成的模块文件复制到相应目录桌面Linux内核一般是在/lib/modules目录下。制作initramdiskmkinitrdinitrd-$version$version例:mkinitrdinitrd-2.6.292.6.29$version可以通过查询/lib/modules下的目录得到Ramdisk是将一部分固定大小的内存当做分区来使用。它并非一个实际的文件系统二是一种将实际的文件系统装入内存的机制并且可以作为根

14、文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过ramdisk放在内存中可以明显的提高系统的性能。在linux的启动阶段initrd提供了一套机制可以将内核映像和根文件系统一起载入内存。cparch/x86/boot/bzImage/boot/vmlinuz-$version$version为所编译的内核版本号(拷贝initrd-2.6.29到/boot下将arch/x86/boot/bzImage更名为vmlinuz-2.6.29移动到/boot下)修改/etc/grub.conf或者/etc/lilo.conf(GNUGRUB(简称GRUB)是一个来自GNU项目的多操

15、作系统启动程序。GRUB是多启动规范的实现它允许用户可以在计算机内同时拥有多个操作系统并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核也可用于向这些内核传递启动参数。)这时重启Linux操作系统在进入内核时按下回车键进入内核选择界面选择自己编译的内核即可进入自己编译的内核的操作系统用uname-r可以查看当前内核版本。嵌入式linux文件系统的制作与移植文件系统包含两个层次的含义:1.按照固定格式组织的目录与文件2.在特定的存储介质上管理这些目录和文件需要的数据当我们在linux下输入ls/的时候见到的目录结构以及这些目录下的内容都大同小异这是因为所有的lin

16、ux发行版在对根文件系统的布局上都遵循FHS(FilesystemHierarchyStandard)标准的建议规定。各个目录名称及其存放的内容:/bin必备的用户命令例如ls、cp等/sbin必备的系统管理员命令例如ifconfig、reboot等/dev设备文件例如mtdblock0、tty1等/etc系统配置文件包括启动文件例如inittab等/lib必要的链接库例如C链接库、内核模块/home普通用户主目录/rootroot用户主目录/usr/bin非必备的用户程序例如find、du等/usr/sbin非必备的管理员程序例如chroot、id等/usr/lib库文件/var守护程序和工

17、具程序所存放的可变例如日志文件/proc用来提供内核与进程信息的虚拟文件系统由内核自动生成目录下的内容/sys用来提供内核与设备信息的虚拟文件系统由内核自动生成目录下的内容/mnt文件系统挂接点用于临时安装文件系统/tmp临时性的文件重启后将自动清除根文件系统是Linux启动时使用的第一个文件系统。没有根文件系统Linux将无法正常启动。根文件系统由一系列目录组成目录中包含了应用程序、C库、以及相关的配置文件。那如何制作一个根文件系统呢?主要包括以下步骤:1、创建根文件系统的目录如:mkdirbinsbinlibetcdevprocsysusrmnttmpvar2、创建设备文件cddevmkn

18、od-m666consolec51mknod-m666nullc13cd.3、安装/etctar-xzvfetc.tar.gz/_x/rootfs/etc4、配置busybox进入busybox目录执行makemenuconfig进入BusyboxSettingsbuildOptions-选中“Buildbusyboxasastaticbinary”,静态链接Crosspilerprefix(arm-linux-)InstallationOptions-选中“Dontuse/usr”,选中该项可以避免busybox被安装到宿主系统的/usr目录下破坏宿主系统BusyboxInstallatio

19、nPrefix(/nfsroot/rootfs)该选项表明编译后的busybox的安装位置7、编译、安装busyboxmakeARCH=armCROSS_PILE=arm-linuxmakeinstall前提是系统中安装好了交叉编译工具arm-linux-gcc至此一个粗略的根文件系统制作完成下面就需要移植到开发板中。我们知道ARM嵌入式系统的组成为:1)bootloader引导加载器2)kernel操作系统内核3)rootfs根文件系统(带GUI,QTopia)在系统加载完内核后就会去启动根文件系统而启动根文件系统这个过程被bootargs这个参数控制所以我们需要修改这个参数以使系统运行我们

20、的根文件系统但这之前我们需要在宿主机上将根文件系统共享出来。我们先在linux系统中配置好nfs服务器并且在设置配置文件exports将根文件系统所在路径共享出来接下来在ARM开发板启动时控制超级终端进入shell界面在这里输入命令print会显示开发板启动的配置信息通过set命令我们可以设置bootargs参数为:console=ttySAC0root=/dev/nfsnfsroot=192.168.0.113:/mynfs/rootfsip=192.168.0.1:192.168.0.113:192.168.0.1:255.255.255.0:mini6410.arm9.:eth0:off

21、设置完成后用save命令保存设置输入reset复位命令ARM系统重启重启完成后我们看到ARM系统的根文件系统就是我们自己制作的根文件系统。实习体会在嵌入式系统中除了课本上的基础知识外还学会了软件编程的基本思路掌握了液晶屏的使用及其电路设计方法;掌握有关音频处理的基础知识;掌握液晶显示文本及图形的方法与程序设计。通过这次设计掌握了液晶显示实验、C/OS-II移植、C/OS-IILCD显示的工作原理及串口通信实验的工作过程学会了使用仿真软件EmbestEduKit-IV实验平台及ULINK2仿真器套件并学会通过应用软件仿真来实现各种通信系统的设计对以后的学习和工作都起到了一定的作用加强了动手能力和

22、学业技能。虽然花了很长时间编写软件程序设计但这一切还是理论上的。希望学校能提供机会和条件让我们能够去真正地将理论和实践相结合。通过这次程序感觉自己所掌握的知识是那么的有限还有许多需要改进和不足的地方同时也帮助了我怎样学好这门课程增加了我对这门学科的兴趣。总体来说这次实习我受益匪浅。在摸索该如何设计电路使之实现所需功能的过程中特别有趣培养了我的设计思维增加了实际操作能力。在让我体会到了设计电路的艰辛的同时更让我体会到成功的喜悦和快乐。通过这次实习通信系统的设计使我更加清楚以后的发展及学习的方向。嵌入式实训总结实训总结ARM体系结构主要内容(1)ARM简介(2)ARM处理器模式(3)ARM的寄存器

23、(4)ARM的异常(5)存储器I/O参考资料详细内容参加ARM体系结构PPT。RealView的使用安装破解详细过程安装破解详细过程1.将虚拟iso文件解压缩(或者用虚拟光驱装载)双击setup.exe进行安装2.安装即将结束的时候会出现一个窗口上面有“下一步”按钮3.此时将rvds4cr.crack文件夹的内容拷贝到C:ProgramFilesARM文件夹4.开始运行输入cmd点击确定5.输入ipconfig/all并回车6.记下“本地连接”的PhysicalAddress例如00-25-3D-5B-7C7.将C:ProgramFilesARM下的rvds.dat以记事本方式打开8.将“HO

24、STID=”后的字符串替换为6中找到的PhysicalAddress不要横杠。9.保存关闭。10.在2中的窗口内点击下一步之后点击“.”按钮选择好rvds.dat之后点击Add按钮点击两次(或一次)“是”之后继续安装。11.最后运行C:ProgramFilesARM下的Crack.bat(齿轮)IDE的使用开始程序ARMARMWorkbenchIDEv4.0启动RealViewIDEFileNewRealviewProject输入ProjectName点击下一步调试和发行都选中点击下一步不需要选择Targets直接点击下一步体系结构选择Cortex-A8其他不用改变点击下一步再点击下一步之后选

25、择Finish即可创建一个RealView工程。在工程上点击右键可以添加文件夹(例如src)也可以添加文件注意汇编文件扩展名为.sC语言文件为.c。汇编语言的例子和C语言的例子见“ARM汇编语言实验”压缩包。调试方法调试方法首先编译工程(ProjectBuildAll)之后点击菜单栏的Debug按钮(虫子样子)选择加载到RealViewDebugger中即可开始调试。点击Stepin按钮即可单步跳入点击Stepover按钮即可过程调试。有可能需要查看Register的内容这时需要点击View菜单下的Register项打开寄存器查看窗口。指令集常用指令集见参考资料“ARM指令集详解”。ARM与C

26、语言混合编程共有四种混合编程方式详细信息可以参考资料“ARM中C语言和汇编语言混合编程”中的内容。串口通信方法串口的基本概念串口通信的方式通信的数据包格式等。详细内容请参考“串口通信”PPT。烧写板子的方法由于各个开发板的使用方法并不相同因此需要参考用户手册。一般使用过程为:1.调至NorFlash方式启动连接超级终端。根据超级终端中的选项选择操作2.格式化NandFlash对于Linux系统3.选择下载bootloader可能会使用到DNW注意按照手册安装usb驱动4.选择下载操作系统内核5.选择下载根文件系统6.选择下载Logo对于WinCE系统3.选择下载Bootloader或者STEP

27、LDR4.下载EBoot到NandFlash5.调到NandFlash并在开机时按空格键空格键6.选择下载WinCE的镜像文件QT程序编写环境的安装1.解压缩交叉编译器交叉编译器(EABI)tarxvfjEABI.tar.bz2C/交叉编译器2.用gedit/etc/profile添加一条pathmunge详细请参见手册3.解压缩qt-embedded-opensourcetar.bz2tarxvfjqt-embedded.tar.bz2C/7.进入/opt/EmbedSky/qt-4.5下./arm_qt4.5_build进行安装需要大约1小时进行安装之后使用sourcesetARM_Env

28、来设置环境变量。8.qt-x11的安装:a)从ftp:/ftp.trolltech./的ftp上下载qt-x11-opensource-src-4.5.3.tar.gzb)解压缩tarxvzfqt-x11-opensource-src-4.5.3.tar.gz-C/c)进入解压后的qt目录(qt-x11-opensource-src-4.5.3)运行命令./configure-qvfb-prefix/opt/qt-x11-4.5.3i)ii)-qvfb参数说明需要编译qvfb设备-prefix/opt/Qt-x11-4.5.3为改变安装安装目录d)运行命令gmakee)运行gmakeinsta

29、ll大约需要1小时左右f)gedit/etc/profile打开profile文件在该文件的最末尾加上以下语句:exportPATH=/opt/qt-x11-4.5.3/bin:$PATHexportQTDIR=/opt/qt-x11-4.5.3exportMANPATH=/opt/qt-x11-4.5.3/man:$MANPATHexportLD_LIBRARY_PATH=/opt/qt-x11-4.5.3/lib:$LD_LIBRARY_PATHexportQMAKESPEC=/opt/qt-x11-4.5.3/mkspecs/linux-g+g)注销重新登陆h)编译qvfb#cd/qt-

30、x11-opensource-src-4.5.3/tools/qvfb/#make9.Qtcreator的安装是图形化的下一步即可安装好后打开QtCreator后依次点击菜单Tools-Options-Qt4-QtVersion之后需要设置编译器的路径可参考手册设置。QT工程创建工程创建1.打开QtCreator点击File-newFileorProject2.选择Qt4GuiApplication点击Ok3.Name中填入项目名称可任取;Createin中填入目录可用Browse按钮选择一个路径点击Ok4.RequiredModules中按需求选取如果不需要可以不用选取点击Next5.Cla

31、ssname中填入类名可任取;BaseClass中选择QWidget或根据需要选择其他单击Next按钮继续6.点击Finish完成创建项目QT程序编写1.在工程窗口中的Forms文件夹下有至少一个.ui文件是界面设计文件2.双击这个.ui文件可以在右侧的窗体上添加按钮等控件3.可以修改控件的objNameText等属性注意objName是程序中用的名字Text而是显示给用户的4.在按钮等控件上单击右键点击Gotoslot可以添加槽函数可以根据自己需要选择信号和槽函数5.实现槽函数完成需要的功能例如响应用户按键信息等QT示例程序更多的示例程序请参见压缩包“qtshili”QT与硬件编程硬件编程最

32、关键的是应用驱动程序。首先需要编写硬件驱动程序或者利用已有的驱动进行QT程序编写。因此需要仔细参阅驱动程序文档认真查看每个函数各个参数的含义。开发硬件相关QT程序流程:1.添加fcntl.h、unistd.h和sys/ioctl.h三个头文件2.添加一个private变量例如intfd;3.一般在构造函数中使用open函数打开设备并存下设备标识符如fd=open(“/dev/PWM-Test”,O_RDWR);O_RDWR是一种设备读取的方法此处也可以为只读(O_RDONLY)只写(O_WRONLY)或者可读可写(O_RDWR)等4.可用ioctl函数操作设备进行IO操作也可用read函数进行

33、读取write函数进行写入需要根据具体应用确定5.在析构函数中加入:close(fd);关闭设备这样在程序结束的时候自动关闭设备6.注意如果需要判断设备是否可用可以用if语句判断fd=0例如在关闭设备时经常需要这个操作即if(fd=0):close(fd);硬件编程示例程序硬件编程示例程序示例程序见压缩包“apps”嵌入式移植Bootloader移植1.解压缩uboot源代码例如tarxvfjuboot-1.1.6.tar.bz2C/2.在uboot目录下修改一些文件并添加支持自己的板子的源代码天嵌的uboot已经改好我们不需要自己修改3.在uboot目录下执行makeEmbedSky配置ub

34、oot使它适用于我们的板子4.执行make进行编译编译出uboot.bin文件即可烧录Bootloader重要文件及函数文件名函数名添加新的命令1.include/cmd_confdefs.h中需要添加一个自定义命令的宏定义例如#defineCFG_CMD_HELLOWORLD0x8000000000000000ULL2.在mon文件夹下创建一个命令的源码文件如cmd_helloworld.c3.编写命令源码文件内容可以参照cmd_cache.c等4.在include/configs/EmbedSky.h中的CONFIG_MANDS宏定义的最后一个元素括号前加入|添加刚才在cmd_confde

35、fs.h中定义的宏如添加CFG_CMD_HELLOWORLD以使能命令5.重新编译uboot即可使用新命令添加命令的菜单栏显示1.打开mon/cmd_menu.c文件找到main_menu_usage函数printf(“Enteryour在selection:”);前面加入自己的printf例如printf(“hHelloworldmand”);2.找到menu_shell函数在caseQ:caseq之后添加自己的caseH:caseh:3.括号中填写run_mand(“Helloworld”,0);即可start.S_startboard.cstart_armbootmain.cmain_l

36、oop内核移植1.使用命令tarxvfjlinux-2.6.30.4.tar.bz2C/对内核进行解压缩2.在内核目录下输入makemenuconfigARCH=armCROSS_CMPILE=arm-linux-打开配置页面内核的配置3.可用loadanalternatefile加入一个已经配置好的文件4.可使用键盘方向键和空格、Y、N、M对其中选项进行勾选和清除5.配置好后在顶级菜单中选择Saveanalternate并将文件保存为.config文件6.退出编译内核使用makezImage即可编译内核会花费一些时间编译好的内核可通过超级终端及DNW烧写到板子中。详细信息更多的详细信息请参考

37、开发版的移植手册。根文件系统移植1.文件系统移植需要工具BusyBox需要先解压缩并编译BusyBos使用命令tarxvfjbusyboxtar.bz2C/进行解压缩2.之后使用命令makemenuconfigARCH=armCROSS_CMPILE=arm-linux-对BusyBox进行配置并用Save选项保存配置名字任意3.之后使用make命令进行编译4.使用makeinstall命令进行安装会生成一个_install文件夹5.建立一个自己的文件夹名为root-2.6.30.4(可任取)6.将_install文件夹全部内容拷贝到自己的root-2.6.30.4文件夹下7.添加一系列目录(

38、文件夹)详细请参考开发板移植手册8.将一些必要的配置文件加入上述文件夹中9.进入root-2.6.30.4的上级目录输入命令mkyaffs2imageroot-2.6.30.4roor.bin即可生成根文件系统10.可将自己的根文件系统烧写到板子上进行测试驱动程序的移植1.编写驱动程序的源文件如helloworld.c并添加到内核源码(内核移植中解压缩出的)的相应目录下例如字符设备需要添加到drivers/char/2.修改drivers/char/中的Kconfig在menu“Characterdevices”后面加入一个菜单项如configHELLOWORLDtristate“Hellow

39、orlddriver”dependsonARCH_S3C24403.修改drivers/char/中的Makefile文件加入目标文件obj-$(CONFIG_HELLOWORLD)如+=helloworld.o注意文件名字的大小写4.使用makemenuconfigARCH=armCROSS_CMPILE=arm-linux-配置内核在Drivers菜单项下的CharacterDevices下会出现Helloworld驱动程序用键盘M按键选中5.在内核源码目录下使用命令makeSUBDIR=drivers/char/modules对驱动模块进行编译会在drivers/char/生成hello

40、world.ko文件6.通过超级终端发送到板子上即可使用insmod命令加载如insmodhelloworld.ko7.可以使用rmmod命令卸载驱动如rmmodhelloworld.ko项目嵌入式电子书设计项目嵌入式电子书设计程序解释见源码注释。可能问的问题:1.程序如何运行?程序首先运行的是mian函数由main函数中创建一个应用程序类和一个电子书的窗体类通过调用电子书窗体类的show方法让这个电子书窗口显示出来同时调用应用程序的exec方法让应用程序运行起来。2.电子书如何读取存储器中的文件?首先调用QT中打开文件的函数显示一个打开对话框让用户选择一个文件之后使用Qfile类对文件进行打

41、开操作。由于需要支持中文所以采用QTextStream类读取文本采用QTextCodec类提供GBK的编码器使用read函数进行读取。3.电子书如何显示文字?采用QPlainTextEdit控件显示文字并通过这个空间的QScrollBar(滚动条类)控制文字的位置实现上滚和下滚。4.电子书如何翻页如何查看上一行、下一行?电子书翻页和上一行、下一行的实现靠嵌入式开发板的四个按钮实现用户按上下按钮时则实现上翻一行或下翻一行按左右按钮时实现上翻一页或下翻一页操作5.电子书是如何响应按键操作的?电子书采用按键驱动程序实现按键的响应。并且为了能够正常响应用户的操作新建了一个线程专门用来监听是否有按键按下

42、如果有按键按下则判断是哪一个按键按下了并且针对不同的按键情况选择不同的操作。例如上翻一行下翻一行等。翻行或翻页通过改变QPlainTextEdit空间的QScrollBar的value属性实现。此外驱动程序中采用中断的方式取得按键信息并用阻塞方式进行读取。上文中可能存在表述不当地方请见谅!谢谢。嵌入式实习报告嵌入式实习报告湖北科技学院嵌入式实习报告个人原酒实习报告范文有效防止雷同!简单修改即可使用!姓名:李_学号:20210820008专业:_指导老师:实习时间:_-_-_-_-_汾酒实习报告书20_年_月_日1目录汾酒实习前言3一、实习目的及任务31.1实习目的31.2实习任务要求3二、实习单位(岗位)简介42.1实习时间52.2实习单位(岗位)简介5三、实习内容63.1熟悉工作流程与工作程序63.2培养实践能力和基本人际关系处理能力73.3强化岗位专业知识的运用能力7四、实习心得体会84.1人生角色的转变84.3人际关系的拓展8五、实习总结95.1实践是检验真理的标准105.2团队合作的重要性115.3良好的心态第 30 页 共 30 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁