第6部分嵌入式Linux开发课件

PPT
  • 阅读 64 次
  • 下载 0 次
  • 页数 86 页
  • 大小 1.157 MB
  • 2022-11-26 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
第6部分嵌入式Linux开发课件
可在后台配置第一页与第二页中间广告代码
第6部分嵌入式Linux开发课件
可在后台配置第二页与第三页中间广告代码
第6部分嵌入式Linux开发课件
可在后台配置第三页与第四页中间广告代码
第6部分嵌入式Linux开发课件
第6部分嵌入式Linux开发课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 86
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】第6部分嵌入式Linux开发课件.ppt,共(86)页,1.157 MB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-55025.html

以下为本文档部分文字说明:

第6章嵌入式Linux开发主讲:李岩现在Linux广泛用于各类计算应用,不仅包括IBM的微型Linux腕表、手持设备(PDA和蜂窝电话)、因特网装置、瘦客户机、防火墙、工业机器人和电话基础设施设备,甚至还包括了基于集群的超级计算机。本章主要介绍了:怎

样应用Linux来进行嵌入式系统的开发。选用Linux操作系统的优势。Linux的简化版本uClinux相关知识。如内存管理、进程管理、启动过程等。开发工具Hittool的具体应用。6.1嵌入式Linux概况Linux操作系统开放源

代码,可以裁剪内核,并已在x86、Alpha、Sparc、MIPS、PPC、Motorola、NEC和ARM等硬件平台上稳定、高效地运行。Linux操作系统作为一种多任务、稳定可靠、内核可裁剪的系统,是开发嵌入式软硬件产

品的优秀软件平台。嵌入式Linux是一种开放源码、软实时、多任务的嵌入式操作系统。6.1.1嵌入式Linux在嵌入式开发中,随着微处理器的产生,价格低廉、结构小巧的CPU和外设接口提供了稳定可靠的硬件架构。高端嵌入式系统要求许多高级的功能

,如图形用户界面和网络支持。许多高端RTOS供应商已经提供了这些功能,但其价格也很高,一般人难以接受。Linux为嵌入式操作系统提供了一个极有吸引力的选择,它是一个类UNIX的、以内核为基础的、有完备内存保护机制

的、多任务多进程的操作系统。由于Linux具有开放性,所以许多人认为Linux非常适合多数Intemet设备。他们认为Linux可以支持不同的设备,支持不同的配置。6.1.1嵌入式Linux1.可运行于多种硬件平台

Linux符合IEEEPOSIX.1标准,使应用程序具有较好的可移植性。Linux内核已经被移植到多种硬件平台上,这对受开销、时间限制的研究与开发项目是很有吸引力的。2.可裁剪,性能优异,应用软件丰富Linux的动态模块加载使Linux的裁剪极为方便,高度模块化的

部件使添加非常容易。Linux是一个全面的多任务和真正的32位操作系统。系统运行稳定,功能强大,支持多种硬件平台,应用工具多。3.使用成本低Linux是免费软件,只要遵守GPL(GNUGeneralP

ublicLicense)的规定,就可以免费获得拷贝,并进行开发和商业发行。6.1.1嵌入式Linux4.强大的网络功能Linux操作系统最突出的是网络部分,基本上所有的网络协议和网络接口都可以在Linux上找到。

Linux内核对网络协议栈的设计是从简捷实用的角度出发的,它有一整套的网络协议模块。Linux的网络功能十分强大,更重要的是,Linux的网络功能和协议是以内核可选的模块方式提供的,它允许用户自由地裁剪和优化。5.GUI开发支持L

inux本身有性能优秀的XWindow系统,在XWindow系统的支持下,能方便地进行图形用户界面的开发。6.1.1嵌入式LinuxXWindow是一个在大多数UNIX工作站上使用的图形用户界面。XWindow系统应用于嵌入式系统时,要考虑嵌入式系统的特殊条件

。6.丰富的开发技术资源Linux在这几年中不断成熟,越来越多的人加入了Linux的行列。这意味着对新硬件的Linux驱动程序甚至比用于其他UNIX系统(如Solaris的驱动程序)还来得及时。Linux庞大的志愿

者网络在生产“补丁”程序方面反应很快。6.1.2嵌入式Linux的组成最基本的嵌入式Linux系统需要3个基本元素:系统引导程序,用于完成机器加电后的系统定位引Linux系统内核,为嵌入式应用提供一个软件环境,为应用程序完成基本的底层的

资源管理工作;初始化过程,完成基本的初始化。为使这个最小嵌入式系统具有一定的实用性,还需加上硬件的驱动程序及—个或几个应用进程以提供必要的应用功能支持。如果应用比较复杂,可能还需要添加一个可以在ROM或RAM中使用的文件系统、TCP/IP网络协议栈等。在PDA

领域,还需要加上—个GUl支持。6.1.3嵌入式Linux的版本1.将Linux移植以满足实时要求的实时操作系统,应用于一些关键的控制场合,如Fsmlabs公司的RTLinux,MontaVista的HardHatLinux。2.尽可能保留Linux的强大功能,尽可能地减少其体积,以满

足许多嵌入式系统对体积的要求,如uClinux。3.针对特定嵌入式领域采用整合方案,如Lineo,TimeSys,合肥华恒等。接下来,简要介绍常用的两个嵌入式Linux操作系统。6.1.3嵌入式Linux的版本1.实时Linux(RTLinux)RTLinux是美国新墨西哥州大

学计算机系研制开发的。RTLinux实现的内核位于通常的Linux内核之下,这个内核是一个实时内核,它只需要完成底层的任务创建、中断服务程序,并为底层任务、ISR和Linux进程之间进行通信排队。

RTLinux的调度方法和用户实时任务的工作是通过Linux的可导入模块的方式进行的。2.uClinuxuClinux是一个GNU的项目,代码完全开放。uClinux的英文解释是MicroControlLinux,可理解为“微

控制领域中的Linux系统”。它专门应用于没有MMU的CPU,并专为嵌入式系统做了许多小型化的工作,已支持的微处理器包括MotorolaMC68000,MCF5206和MCF5207ColdFire等。6.2uCLinux开发介绍目前,uClinux往往基于两个Lin

ux内核版本,2.0.38是一个比较成熟的版本,2.4.x是最新的版本Hitool套件同时提供了对他们的支持。一般uClinux的内核大小在500k左右,如果加上一些基本的应用,也就在900k左右.非常适合于嵌入式系统。uClinux架构如

图6-1所示(下页),一些重要的模块在下面描述。6.2.1启动过程(Bootstrap)启动模块Bootstrap负责用来起动Linux内核,包括ChipSelector初始化,系统堆栈的初始化,把压缩的Linux映像从Flash中解压到RAM中,并把控制权交给内核的初

始化例程。这部分工作是与你的硬件高度相关的,所以这部分的代码要尽量精简。6.2.2内核初始化(KernelInitialization)内核初始化的入口地址是:start_kernel(在init/main.c中)。

它初始化内核的其它部分,包括异常(trap)、中断(IRQ)、内存页(Page)、调度(Scheduling)、驱动程序等等。并启动“init”进程进入多任务环境。6.2.3系统调用处理/异常处理当“init”程序运行后,内核对整个系统

的运行不再进行直接控制,而是通过系统调用给应用程序提供服务和响应外部及内部的异步事件,例如:程序错误,硬件中断等。在ARM中,系统调用采用swi指令所产生的软件异常来实现,如例所示:swi0x900004(其中0x9

00004表示这个系统调用为sys_write)。00002550<write>:2550:ef900004swi0x009000042554:e3700a01cmnr0,#4096;0x10002558:2afff6b0bcs

20<\<>__syscall_error<\>>255c:e1a0f00emovpc,lr6.2.4驱动程序(DeviceDriver)驱动程序是整个Linux内核的主要组成部分,它们控制着操作系统和外部设备的交互。Linux的驱动程序是可选的,但是典型的系统应该包括一个控制台(

Console),一个通用串口驱动程序,一个块设备(用来存放根文件系统)驱动程序。当Linux内核起动的时候,需要一个输出调试信息的设备。这个设备往往通过串口来实现。这个调试终端可以通过register-console这个函数来创建。而所有的调试

信息都通过Printk例程通过这个调试终端来输出。6.2.5文件系统(FileSystem)支持多种文件系统是Linux一个重要的特性,uClinux同样把这一特性带进了嵌入式系统中,并针对嵌入式系统作了一些

取舍。在HitoolforuClinux包括了romfs,Ext2FS,RAMFS,NFS。其中,romfs是最简单的只读文件系统,所占用的空间最少,我们用它来做根文件系统(rootfilesyste

m)。根文件系统里存放Linux启动时要用到的设备文件,配置文件和应用程序。例如:/dev/tty0,/etc/rc,/bin/init,/bin/sh,等等。6.2.6内存管理uClinux不能使用处理器的虚拟内存管理技术但仍然采用存储器

的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。但是由于没有MMU管理,所以实际上uClinux采用实存储器管理策略(物理内存)。uClinux系统对于内存的访问是直接的,(它对地址的访问不需要经过MMU,而是直接送到地址线上输出),所有程序中访问的

地址都是实际的物理地址。由于应用程序加载时必须分配连续的地址空间,所以开发人员在开发应用程序时必须考虑内存的分配情况并关注应用程序需要运行空间的大小。从内存的访问角度来看,开发人员的权利增大了(开发人员在编程时可以访问任意的地址空间),但与此同时系统的安全性也大为下降。6.2

.7进程管理uClinux和Linux之间最大的区别在于平面存储器模型。没有虚拟存储器可以提供非常有效的fork系统调用。由于在使用fork时,内核会将父进程拷贝一份给子进程,但是这样的做法相当浪费时间,因为大多数的情形都是程序在调用fork后就立即调用exec,这样刚拷贝来

的进程区域又立即被新的数据覆盖掉。因此Linux系统提供一个系统调用vfork,vfork假定系统在调用完成vfork后会马上执行exec,因此vfork不拷贝父进程的页面,只是初始化私有的数据结构与准备足够的分页表。这样实际在vfork调用完成

后父子进程事实上共享同一块存储器(在子进程调用exec或是exit之前),因此子进程可以更改父进程的数据及堆栈信息,因此vfork系统调用完成后,父进程进入睡眠,直到子进程执行exec。并且在这段时间内,子进程不能更改数据段和堆

栈的内容。6.2.7进程管理当子进程执行exec时,由于exec要使用被执行程序的数据,代码覆盖子进程的存储区域,这样将产生写保护错误(do_wp_page)(这个时候子进程写的实际上是父进程的存储区域)。这个错误导致内核为子进程重新分配存储空间。当子进程正确开始执行后,将唤醒

父进程,使得父进程继续往后执行。所以,在uClinux中,想让父子进程同时运行同一个程序是不可以的。6.2.8运行时间库及应用程序运行时间库提供了用户程序和内核程序的接口。1.程序的入口代码用户自己写程序一般从ma

in开始,其实程序在运行时真正的进入点是C运行库的一部分。这部分代码执行初始静态数据,例如错误号(errno)以及环境指示符(environ),并且将参数argc和argv传输到main。参数和环境一般根据

宏程序start_thread(定义在include/proc/processer.h)的调用约定,放在寄存器或者堆栈上。execve系统调用利用start_thread建立一个虚拟环境,程序的入口代码因此必须实现把sta

rt_thread所建立的环境恢复出来,并调用__uClibc_main。在__uClibc_main中再调用用户程序的main。.text.global_start.global__uClibc_main.type_start,%function.type__

uClibc_main,%function.text_start:/*清帧缓冲区指针*/movfp,#0/*argc,argv和envp出栈*/ldrr0,[sp,#0]ldrr1,[sp,#4]ldrr2,[sp,#8]/*运行uClibc的main()函数—不应

返回*/bl__uClibc_main6.2.8运行时间库及应用程序2.堆(heap)分配用户程序通过调用malloc从堆中分配内存。在有虚拟存储器的系统中,堆可以使用sbrk调用来扩大。因为虚拟存储器支持分段存储,所以可以在堆的

最高端到堆栈的最底部之间留有很大的虚拟空间来做扩展之用。但在平面存储器系统中,没有这个空间。所以,堆空间改用mmap调用来分配。在uClibc中,内存分配的算法非常简单直接,存储器的管理完全依靠内核的页机制来完成。见图6-2。6.2.8运行时间库及应用程序从图6-2中,可以看

出另一项区别,因为物理上堆栈与静态数据相连,所以,堆栈必须有足够的空间,以防止覆盖静态数据和代码。在标准Linux程序中的虚拟内存允许堆和堆栈之间留有足够大的空间来让他们扩展。系统可以监控页的使用情况,防止堆栈溢出。但在uClinux中要预

留这样大的物理空间是不可能的。另外,因为在uClinux中没有内存保护机制来防止堆栈溢出,在程序链接时要特别小心设定堆栈的大小。6.2.8运行时间库及应用程序4.执行文件格式(Flatbinaryformat)uClinux系统使用flat可执行文件格式,可以使用elf2flt工具把ELF

格式的可执行文件转化为flat文件。当用户执行一个应用时,内核的执行文件加载器(fs/binfmt_flat.c)将对flat文件进行进一步处理,主要是对代码段和数据段进行修正。为什么要修正呢?因为应用程序在连接时并不知道它要在系统的那一段地址上面运行,这样就要求程序在任何地址上都要

能运行,也就是说与地址无关(PIC–positionindependentcode)。这个特性由针对uClinux的编译器和连接器来提供。在ARM中有一条相对跳转指令:ebxxxxxxblxxxxx;可以用来实现地址无关的跳转。6.3u

CLinux启动过程uClinux系统的启动可以分为两个步骤:1.运行bootloader初始化程序SRAM、SDRAM等存储设备属于挥发性的存储器,掉电以后其中的内容就会全部丢失,所以必须把操作系统的内核镜像存放在Flash等不挥发性存储介质上。

从本质上来讲,bootloader不属于操作系统内核。它采用汇编语言编写,因此针对不同的CPU体系结构,这一部分代码不具有可移植性。在移植操作系统时,这部分代码必须加以改写。6.3uCLinux启动过程具

体来讲,bootloader在系统启动时主要完成以下几项工作:1.将操作系统内核从Flash拷贝到SDRAM中,如果是压缩格式的内核,还要将之解压缩。2.改写系统的memorymap,原先flash起始地址映射为0地址,这时需要将RAM

的起始地址映射为0。3.设置堆栈指针并将bss段清零。将来执行C语言程序和调用子函数时要用到。4.改变pc值,使得CPU开始执行真正的操作系统内核。6.3uCLinux启动过程2.运行操作系统内核bootloader程序执行完上述的各项工作后,通过一条跳转指令,转而执行init目录下C语言源

文件main.c中的函数start_kernel()。因为在此之前bootloader已经创建好一个初始化环境,C函数可以开始执行了。整个操作系统内核的初始化工作从这里才算是真正开始。这个函数的长度比较短,代码如下:void__initstart_kernel(

void){char*command_line;unsignedlongmempages;externcharsaved_command_line[];/**Interruptsarestilldisabled.Donec

essarysetups,then*enablethem*/lock_kernel();printk(linux_banner);setup_arch(&command_line);printk("Kernelcomman

dline:%s\n",saved_command_line);parse_options(command_line);trap_init();init_IRQ();sched_init();softirq_init();time_init();/**HACKALERT!Thisisear

ly.We'reenablingtheconsolebefore*we'vedonePCIsetupsetc,andconsole_init()mustbeawareof*this.Butwedowantoutputearly,incasesomethinggoeswro

ng.*/console_init();#ifdefCONFIG_MODULESinit_modules();#endifif(prof_shift){unsignedintsize;/*onlytextisprofiled*/prof_le

n=(unsignedlong)&_etext-(unsignedlong)&_stext;prof_len>>=prof_shift;size=prof_len*sizeof(unsignedint)+P

AGE_SIZE-1;prof_buffer=(unsignedint*)alloc_bootmem(size);}kmem_cache_init();sti();calibrate_delay();#ifd

efCONFIG_BLK_DEV_INITRDif(initrd_start&&!initrd_below_start_ok&&initrd_start<min_low_pfn<<PAGE_SHIFT){printk(

KERN_CRIT"initrdoverwritten(0x%08lx<0x%08lx)-""disablingit.\n",initrd_start,min_low_pfn<<PAGE_SHIFT);initrd_start=0;}#endifmem_init();kmem_ca

che_sizes_init();pgtable_cache_init();mempages=num_physpages;fork_init(mempages);proc_caches_init();vfs_cache

s_init(mempages);buffer_init(mempages);page_cache_init(mempages);#ifdefined(CONFIG_ARCH_S390)ccwcache_init();#endifsignal

s_init();#ifdefCONFIG_PROC_FSproc_root_init();#endif#ifdefined(CONFIG_SYSVIPC)ipc_init();#endifcheck_b

ugs();printk("POSIXconformancetestingbyUNIFIX\n");/**WecountontheinitialthreadgoingokLikeidlersinitisanunlockedkernelthread,whic

hwill*makesyscalls(andthusbelocked).*/smp_init();rest_init();}内核启动之后需要执行的第一个函start_kernel()(在linux/init/main.c文件中)。start_kernel()完成下面一

系列初始化的工作。•printk(1inux_banner),显示Linux内核的版本信息。•setup_arch(&command_line),做与体系结构相关的初始化工作。•parse_options(command_line),解释系统参数。•trap_init(),

设置系统异常的入口点。•init_IRQ(),初始化系统中断服务。•sched_init(),系统调度器的初始化。•time_init(),时钟、定时器初始化。•softirq_init(),系统软中断的初始化。•console_init(),控制台初始化。•kmem_cache_init()

,内核cache的初始化。•calibrate_delay(),校准时钟。•mem_init(),内存初始化。•kmem_cache_sizes_init(),创建及设置通用cache。•fork_init(mempages),建立uidcache,并且根据系统内存大小来确定最大进程数目。•

buffer_init(mempages),块设备缓冲区的初始化。初始化一系列的cache。•check_bugs(),检查体系结构漏洞。•kernel_thread(initNULL,CLONE_FS|CLONE_FILES|CLONE_SIGNAL),创建第一个核

心进程,启动init进程。•cpu_idle(),运行idle进程。接下去做的工作由init()函数来完成。init()首先要锁定内核,然后调用do_basic_setup()来完成外部设备以及驱动程序的初始化。外设的初始化要根据内核的配置来决定,一般需要做下面的初始化工作:◆PCI总线初始化。

◆网络初始化。◆一系列其他设备的初始化。◆start_context_thread()创建事件管理核心进程keventd。◆通过do_initcalls()函数来启动任何使用__initcall标识的函数。◆文件系统初始化。◆加载文件系统。6.4开发工具介绍针对没有MMU的CPU架构,uCli

nux采用了一种平板式(Flat)的内存模型来去除对MMU的依赖,并且改变了用户程序的加载方式,开发了运用于uClinux的C函数库--uCLibc.由于这些变化,一般的Linux开发工具(例如GDB)在开发uClinux时会碰到一些困难,包括内核的移植,驱动程序及应用程序的调试

。针对这样状况,HitoolSystem公司开发了HitoolforuClinux开发套件,来帮助用户开发基于uClinux的系统。6.4开发工具介绍HitoolforuClinux与其它的Linux开发工具相比,有几个优点:整个开发过程只在Windows环境下完成,包括

内核的配置、编译,应用程序的编译,文件系统的生成,内核的调试,用户程序的调试。可以采用多种调试方式,既可以采用JTAG方式来调试,也可通过网口用Hitool自己的监控程序(MDB)来调试。通过JTAG方式调试,可以调试内

核和驱动程序,也同时可以调试应用程序。一般的开发工具做不到这一点。对于那些只要调试应用程序的客户,就可以采用MDB的方式。采用这种方式,你不但不需要仿真器,而且在调试一个应用时,不会影响别的应用的运行。提供了一个内核的追踪工具(Trace)来帮助用户分析整个系统。6.4.1安

装安装HitoolforARMsupportinguClinux的过程主要有三个步骤:1.安装Cygwin:你需要安装的cygwin套件如下:BASE:全部Devel:全部Interpreters:expect,gawk,m4,perlLibs

:tcltkShells:bashText:lessUtils:bzip26.4.1安装2.安装HitoolDebugger:(1)Hitool安装时会检查Cygwin是否己安装,若不使用Win32环

境Buildlinuximage则可略过Cygwin安装。(2)因为Hitool可支持众多Target,因此建议在安装时选择不同的uclinux安装目录,例如将AtmelTarget开发环境安装于\uclinux.atmel而把SamsungTarget的uclinux

kernel安装于\uclinux.Samsung。(3)Hitool会安装于指定安装目录之下的Hitool目录。(如\uclinux.Samsung\hitool)6.4.1安装3.安装armtools及uClinux套件:Hitool安装完成后,会将uClinux套件复制到uclinu

x安装目录下。(1)执行Armtools解压缩与安装:$shunpack_armtools.sh(2)执行uClinux套件解压缩与安装:$shunpack_uClinux.sh6.4.2开发环境的建立建立uC

linux的内核开发环境,你需要一个JTAG仿真器(PowerProbe或JEDI),与开发板和宿主机相连。再使宿主机的串口与开发板的串口相连,并在宿主机上启动HyperTerm程序,设置波特率为9600。如图6-3所示:6.

4.2开发环境的建立其中HyperTerm用来作为uClinux的标准输入输出。网口可以作为MDB的调试界面,也可以通过它来使用网络文件系统(NFS)。当所有连接都正确后,启动ConfigurationofHitool(

只有在第一次使用时才需要)。根据JTAG仿真器类型,选择正确的JTAG协议。具体配置可参照HitoolforARM用户手册或者在线帮助。6.4.3调试方法调试主要有三种方法:JTAG调试方法;MDB调试方法;FTP

调试方法1JTAG调试方法首先在uClinux的控制台(PC上的HyperTerm)上执行这个程序。当这个用户程序被内核加载时,会有一个对话框跳出问你是否想要调试此程序。选择No按钮表示继续此程序,不进行调试。如果

你不希望下次运行此程序时对话框再次跳出,只需选择“Don’tshowthismessageagainwhenthisprogramlaunches”选项。如果点击Yes按钮,一个‘AddSymbolTab

le’对话框将跳出,请你选择下载合适的符号文件(*.elf)。6.4.3调试方法在对话框最下面的三个编辑框显示的是这个程序被加载后在RAM中各个段的位置,请不要改动它们,如图6-4所示。图6-4uClinux

应用程序调试对话框6.4.3调试方法在符号文件下载以后,这个程序将被执行到main函数后停止。这是你可以像普通嵌入式程序一样调试它。而且你仍然可以在内核上设置断点,当程序用到系统调用或设备驱动程序时,你可以设断

点直接执行到断点。6.4.3调试方法2.FTP调试方法关于JFFS/JFFS2文件系统的建立,请读者参考相关技术资料。在此仅描述如何将用户程序通过局域网,从FTP服务器(运行Linux宿主机)上,传输到运行

uClinux的目标系统(FTP客户机)并执行的过程:(1)将目标系统与Linux宿主机连接在同一网段中,在宿主机的任意目录下编写应用程序,并用交叉编译工具生成flat格式的文件。(2)启动目标系统的uClinux,

通过超级终端,输入下面的命令:ifconfigeth0192.168.100.50ifconfig命令用于配置目标系统的IP地址其中,eth0代表目标系统的网络设备,IP地址192.168.100.50为目标系统的IP地址,此时宿主机的IP地址为:192.1681.100.21。执行命令:ifc

onfig–all可以看到目标系统的IP地址已被正确配置6.4.3调试方法(3)测试一下与宿主机的连接,键入命令:ping192.168.100.21应能得到宿主机的应答信息。(4)当目标系统与宿主机已

正确建立连接后,进入目标系统的可写目录/var或/tmp,并登录到宿主机:cdvarftp192.168.100.21(5)输入宿主机上的合法用户名及密码,便与宿主机建立了FTP连接。为传输二进制文件,键入命令:ftp>binary200TypesettoI6.4.3调试方法注意:在用FT

P进行文件传输的时候,一定要选好文件传输的模式,FTP默认模式为二进制模式,但是为了保险起见,还是手动把传输模式显式改写为二进制模式。通常的txt、html和绝大多数PS文件都是文本格式的,而其他的可执行文件、压缩文件都是二进制格式。两种格式之间要用ascii和b

inary命令切换,两者都可以适当缩写。6.4.3调试方法(6)传输已编译好的可执行文件(如lednxy)到目标系统并退出FTP服务,键入命令:ftp>getlednxyftp>quit(7)此时,可执行文件lednxy已传输至目录/var或

/tmp下,但文件的可执行属性未被设置,添加文件的可执行属性,键入命令:chmod755lednxychmod是一个文件权限修改的命令,在文件创建的时候会自动设置存取权限,若是这些默认权限无法适合企业环境的需求,就可以利用chmod命

令来修改存取权限。通常在权限修改的时候可以用两种方式表示权限类,数字表示法和文字表示法。6.4.3调试方法这里我们采用的是数字表示法。就是说将读取(r)、写入(w)和执行(x)分别以4、2、1来代表,没有授予权限的部分就表示值为0,然后再

把所授予的权限相加而成。表6-1为读者列出了几个例子。表6-1存取权限范例6.4.3调试方法表中每三位字符为一组,这样权限可以被分为三组:第一组表示此文件拥有者的存取权限第二组表示该文件拥有者所属组成员的存取权限最后一组表示该文件拥有者所属组之外

的用户存取权限。(8)执行程序lednxy,键入命令:./lednxy6.4.3调试方法3.MDB调试方法MDB是一个Linux的任务调试监控程序,它本身也是一个Linux的应用程序,这个程序可以作为其他需要调试的程序的父进程,来控制它们的运行。(1)单应用程序MD

B调试方法如下:①要使用MDB协议,先要在‘StartupConfiguration’里进行设定如下:•选择protocol为MDB•选择Port为Ethernet,如果你板子上的网口不可以用来做调试

,请选择COM1或COM2,并写上相应的IP地址或波特率(9600-57600之间)。•在TgtSvr框中,填入运行TargetServer的PC的IP地址,缺省为本地。图6-5MDB配置对话框6.4.3调试方法②然后让u

Clinux在开发板上运行起来,以root身份进入,密码uClinux。在控制台上打入MDB:9999(用网络连接,9999是port)或MDB/dev/ttySx(用串口连接,x为1或2)如果控制台与调试使用同一个串口,请把控制台中断。③运行TargetSer

ver。④启动Hitool,选择’Project|InitDebugger’命令。现在,可以下载需要调试的文件了。6-6uClinux控制台6.4.3调试方法(2)如果要同时调试多个程序,请打开多个Hitool,一个Hitool只能调试一个程序。你可以用下

列命令来开始一个调试过程。①Loadimage下载一个uClinux可执行文件(flatbinaryfile,*.exe)到目标板。②fork运行一个程序,并把相应的符号文件(*.exe.elf)加到符号表中,使程序停在main函数上。③loa

dimagethenfork顺序执行load和fork。④kill中止当前被调试的进程。⑤attach截获一个已经在运行的任务,并进行调试。6.4开发工具介绍6.5.1配置内核启动HitoolforuClinux后,会有一个叫做“LinuxKernel”的工具栏出现在屏幕上(如图

6-7所示)。图6-7Linux工具条6.5.1配置内核请按“Setting‖按钮设置Linux相关的源文件路径,内核版本,以及运行时间库的版本。例如,如果你的Linux源结构为:C:\uclinux\uClinux-dist\

userC:\uclinux\uClinux-dist\linux-2.4.xC:\uclinux\uClinux-dist\lib如图6-8所示则设置源文件路径为:C:\uclinux\uClinux-dist设置Kernelversion

为:linux-2.4.x设置Library为:uClibc(useuC-libcforSamsung4510/44B0)图6-8uClinux环境设置6.5.1配置内核当这些参数设定以后,按‘ConfigKern

el’按钮,就进入了系统配置主窗口(如图6-9所示)。如果选择‘y’for“CustomizeKerenelSettings‖or―CustomizeVendor/UserSettings‖,会依次出现图6-11和图6-12窗口。图6-

9uClinux配置主窗口图6-10目标配置主窗口图6-11内核配置窗口图6-12开发板配置窗口6.5.1配置内核你可以根据开发板的参数填入相应的值。所有的预设值都是为所带的评估板而设定的。其他配置窗口不再一一赘述。

当配置完成之后,会自动作依赖关系设定。这会需要一段时间。在整个过程中,如果你希望终止至,可以按”stop‖按钮。6.5.2编译内核第一步是编译user目录下的一些应用程序,例如init.exe,agetty.exe,sh.exe,mount.exe等等第二步是把

第一步编好的程序考到romfs目录下,并调用genromfs命令来生成根文件系统的映像romfs.img。第三步才是编译内核,并把romfs.img连接进去,产生linux.elf。第四步是把linux.elf去掉条是信

息,转成linux.bin,并把它与boot目录下的启动代码连接在一起,生成最终的Flash映像linux_bootrom.bin。6.6内核的调试6.6.1下载uClinx内核要进行调试,先执行菜单命令Project|InitDebugger,使Hitool与仿

真器连接。如果你将要调试的uClinux内核(linux.elf)已准备好,点击Load按钮将内核下载到开发板的RAM上。这样,你可以调试Linux内核就像调试一个普通的嵌入式程序。Hitool会帮你处理掉很多和Linux相关的细节。在Hit

oolforuClinux中,我们包括了一个预先编译好的Linux内核,该内核存储于uClinux-dist/linux-2.0.x(forEV40board)或者uClinux-dist/linux-2.4.x/(for4510B

board)中。6.6.2几个调试窗口1.uClinux源代码结构窗口和调试符号窗口在调试过程中,有几个窗口会很有帮助,一个是项目窗口中的“LinuxSRC”pane,这里会列出uClinux的源代码的文件结构。另一个是”Symbol‖Pan

e。你可以通过他们在复杂的Linux源代码中找到需要的信息,如图6-13和如图6-14所示。图6-13uClinux源代码结构和调试符号6.6.2几个调试窗口2.调试源代码窗口图6-14给出了uClinux调试源代码窗口,行号前的圆点表示设置的断点。图6-14uClinux调试源代

码窗口6.6.2几个调试窗口3.uClinux任务信息窗口(1)uClinux进程窗口Hitool为开发者提供了uClinux中运行的任务的详细的信息。点击工具菜单的TaskInfo,打开uClinux窗口,窗口信息如图6-15所示。uClinux窗口显示了系统的所有进程

,它们按照创建顺序排列。对于每一个线程,给出了详细内容如下:①Name–程序名;②Pid–进程标示符;③State–目前进程执行状态,图6-15uClinux进程窗口进程可处在五个状态中的一个状态下:Running(运行

态):进程已经在被CPU执行或者正在等待被CPU执行。Interruptiable(可中断态):进程正在等待某些事件或者资源。可以被一些信号中断。Uninterruptible(不可中断态):进程正在等待某些

事件或者资源,一般情况下,它在等待硬件资源,不可用任何方式中断。Zombie:进程实际上已被中止。但是由于某种原因,进程task_struct还停留在任务向量表taskvector中,这是进程的最后状态。Stopped:进

程被中断,被调试的进程有可能中断。在Linux中有的Swapping状态在uClinux中是不存在的。④Counter–进程计数器⑤Priority–进程优先级⑥Policy–进程的调度算法。FIFO

–运行首先创建的进程。RR–按顺序标记完成进程。这样,直到所有的进程都已完成。⑦Register-所选进程的寄存器6.6.2几个调试窗口(2)uClinux窗口快捷菜单当你右击uClinux窗口上部任何地方,会弹出如图6-16的快捷菜单:①Identifiers窗口这一

项弹出如图6-17的Identifiers对话框,显示选中进程标识符,用户标识符和组标识符。②Time窗口如图6-18所示,显示选中进程的时间信息。包括进程的创建时间,在用户态的运行时间,在内核态的运行时间等等。③Timer窗口Linux

支持以下三种计时器:实时,虚拟,以及检索Profile计时器如图6-19所示,Timer对话框显示着三个计时器的信息。图6-16uClinux任务快捷菜单图6-18uClinux进程时间统计窗口图6-19uClinux进程定时器窗

口6.6.2几个调试窗口④MemoryManagement窗口弹出如图6-20所示的存储器管理对话框,显示选中进程的代码段,数据段,以及堆栈段的信息。⑤Attach窗口调试一个已经在运行的进程,执行后,会弹出下载符号文件的对话框。图6-20

uClinux进程内存管理窗口6.4小结本章主要介绍了怎样应用Linux来进行嵌入式系统的开发。首先说明了为什么要选用Linux而不是其它的操作系统。接着阐述了Linux的简化版本uClinux相关知识。如内存管理、进程管理、启动过程等。最后介绍了开发工具Hittool的具体应用练

习题:1.为什么要选用Linux作为嵌入式开发系统?2.uClinux的内存管理跟Linux的内存管理有何异同?3.简述用HitoolforuClinux配置uClinux内核的过程。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?