您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 嵌入式Linux学习七步曲_Chap2 - 交叉开发环境
嵌入式Linux学习七步曲Sailor_forever(扬帆)自由传播版权所有翻版必究八一卦-我是whon目前就职于通信行业某外企研发中心n参与校园招聘和社会招聘的技术面试工作n5年嵌入式软件开发经验,擅长嵌入式Linux开发;n接触的软硬件平台包括ARM,DSP,PowerPC,uC/OS-II,Linux,VxWorks及OSE八一卦-我是whon嵌入式Linux七步曲学习群交流讨论资源共享n群号107900817n7steps2linux@gmail.comn嵌入式水平小调查n0—3个月n3—6个月n1年左右n2年以上n多少人参加过系列交流会?嵌入式Linux学习七步曲111333444Linux主机开发环境嵌入式Linux交叉开发环境Linux系统bootloader移植Linux的内核移植555Linux的内核及驱动编程222666文件系统制作777Linux的高级应用编程6GrammyforLinux7STARVolunteernLinux主机开发环境n于艳丽,豆豆,Mount、hgfs、nfsn王钢,布鲁诺,Samban黄康莹,lightWind,GDB调试n王晓宇,阿飞,Linux安装8STARVolunteer9VolunteerTaskn宗旨n鼓励大家实际的参与嵌入式Linux的开发n自己解决动手解决问题n总结记录、分享n形成知识库n采用统一的模板,争取成为系列交流会的特色项目n扩大BUPTBES的影响力,创造品牌n运作n下次交流会之前完成上次的总结文档nShare给大家,提建议意见n每次交流会颁奖鼓励n最终将评出STARVolunteer10VolunteerTasknLogo11KeyToSuccessnGoogle、Baidun理论+实践(开发板)n勤于思考,善于总结n多上相关技术论坛,他山之石可以攻玉n良好的文档撰写习惯nPassion!12CHAPTER嵌入式Linux交叉开发环境13主要内容111333444交叉开发环境介绍交叉编译器cross-tool配置主机开发环境建立交叉开发环境555交叉调试应用程序222666ARM上的简单模块编程14交叉开发环境介绍15交叉开发环境介绍n为何生出了这个怪胎呢?n嵌入式系统资源受限n板子运行之前不能用于开发n解决方案n在PC上编辑编译程序,生成二进制代码,下载至目标平台运行n何谓CrossDevelopmentn交叉开发环境是指编译、链接和调试嵌入式应用软件的环境n组成n宿主机Host,即开发机n目标机Target,及开发板16交叉开发环境介绍n通信工具n串口,程序下载(速率较慢,适用于网口不能用的时候)、打印终端n网口,程序下载及更新(速率较快),信息反馈nJTAG,仿真器调试,程序烧录(裸板)nUSB,启动、存储(大部分嵌入式设备不支持USB启动且板子上没有USB接口)n通信协议nUARTnGDBnJTAGnUSB17交叉开发环境介绍n典型环境及工具nARMADS或者SDTnMSE-VC或者WindowsMobilenWindriver的Tornado,用于VxWorksnTI的CCS,用于DSP开发nFreescale的MetrowerksCodeWarrior,用于PowerPCnGCC用于Linux开发18交叉开发环境介绍1920主要内容111333444交叉开发环境介绍交叉编译器cross-tool配置主机开发环境建立交叉开发环境555交叉调试应用程序222666ARM上的简单模块编程21交叉编译器cross-toolnARMcrosstooln适用于ARM平台n2.95.3,2.4内核n3.3.2,2.6内核n可自己通过相关工具编译生成,也可以直接网上下载n://handhelds.org/download/projects/toolchain/nELDKnEmbeddedLinuxDevelopmentKitn适用于ARM、PowerPC等多种平台n交叉编译器cross-tooln版本匹配问题nkernel、软件包及编译器三种的版本需要matchn编译器的版本并非越高越好n根据各个包Release的时间可以初步判断对应关系n参照软件包的相关说明n相关工具narm-linux-gcc,编译器narm-linux-ld,链接器narm-linux-objcopy,反汇编相关narm-linux-strip,剥离符号信息narm-linux-objdump,反汇编narm-linux-ar,打包成lib23交叉编译器cross-tooln如何设置生效n命令行里输入exportPATH=$PATH:/home/sea/linux_dev/cross_tool/usr/local/arm/3.4.1/binn也可在~.bashrc或~.profile或/etc/profile中设置此搜索路径,否则仅仅在当前终端下有效n如何交叉编译nMakeCC=arm-linux-gccnexportCROSS_COMPILE=arm-linux-nMakeCROSS_COMPILE=arm-linux-2425主要内容111333444交叉开发环境介绍交叉编译器cross-tool配置主机开发环境建立交叉开发环境555交叉调试应用程序222666ARM上的简单模块编程26配置主机开发环境n串口nTFTPnNFSnTelnetnSSHnFTP27配置主机开发环境n串口n用于打印调试,输出终端nWindows下Hyperterminal、DNW、SecureCRT、PuttynLinux下面的Minicom、Kermitn8N1,无流控28配置主机开发环境nTFTPnTrivialFileTransferProtocol,中文名叫简单文件传输协议n与FTP不同的是,它使用的是UDP的69端口,因此它可以穿越许多防火墙n不过它也有缺点,比如传送不可靠、没有密码验证等。只能从文件服务器上获得或写入文件,不能列出目录。n非常适合传送小型文件n传输模式,ASC11和Binary(更安全可靠)n512字节块,ACK确认n主要用于U-boot下程序印象的下载更新29配置主机开发环境nTFTPnWindows下面有tftpd.exe,因为协议实现上的细微差异,大文件传输时会出现socketrecverrornLinux上面配置tftpserver性能较好,和U-bootmatchn典型问题Transfertimedout,防火墙设置问题,打开UDP69niptables-AOUTPUT-pUDP--dport69-jACCEPTniptables-AINPUT-pUDP--dport69-jACCEPTniptables-AOUTPUT-pUDP--dport69-jREJECTniptables-AINPUT-pUDP--dport69-jREJECT30配置主机开发环境nNFSnNetworkFileSystem,用于Linux机器之间资源共享n嵌入式系统中主要用于NFS网络根文件系统启动或者网络加载调试应用程序n包括nfs-utilis及portmap等套件n相关诊断工具包括exportfs、showmount-a/-e、rpcinfo,dfn需客户端和server端同时提供nfs支持nserver端文件本身的权限及共享的权限nPortmapperfailure,portmap未启用naccessdeniedbyserver,防火墙或者hostdeny31配置主机开发环境nNFSnnotresponding,timedout,添加-onolock参数即可nwarning:mountversionolderthankernelniptables-AINPUT-pTCP--dport111-jACCEPTniptables-AINPUT-pUDP--dport111-jACCEPTniptables-AINPUT-pUDP--dport111-jREJECTniptables-AINPUT-pTCP--dport111-jREJECT32配置主机开发环境nsshnSecureshell,远程登录,调试,安全拷贝ntelnetnNonsecureshell,远程登录,调试nftpn主要用于将文件从目标板上拷贝到主机上33VolunteertasknTftpservern编译安装步骤n典型问题分析n主机端验证实例n目标板上测试实例nNfsserver及client搭建n编译安装步骤n典型问题分析n主机端验证实例n目标板上测试实例3435主要内容111333444交叉开发环境介绍交叉编译器cross-tool配置主机开发环境建立交叉开发环境555交叉调试应用程序222666ARM上的简单模块编程36建立交叉开发环境n配置目标板上的NFS客户端n需要内核支持NFS,打开相应的编译选项37建立交叉开发环境nGdb和GdbServernarm-linux-gdb在主机上运行,提供交叉调试功能narm-linux-gdbserver在板子上提供服务n版本匹配问题,一定根据内核版本选取合适的Gdb源代码版本n可借鉴主机端的软件环境和GDB的版本的匹配关系ngcc-v,gdb-v,uname-a38建立交叉开发环境nGdbn./configure--target=arm-linux--prefix=/home/sea/linux_dev/cross_tool/arm-gdbnmakenmakeinstallnexportPATH=$PATH:/home/sea/linux_dev/cross_tool/usr/local/arm/3.4.1/bin/:/home/sea/linux_dev/cross_tool/arm-gdb/bin39建立交叉开发环境nGdbServern/home/sea/linux_dev/gdb-6.6/gdb/gdbserver进入此目录n./configure--target=arm-linux--host=arm-linux--prefix=/home/sea/linux_dev/cross_tool/arm-gdbnmakeCC=arm-linux-gccnmakeinstalln将在项目及安装目录目录下生成arm-linux-gdbservern拷贝到板子上即可40建立交叉开发环境nGdbServern编译时注意动态库的问题,板子上资源有限,最好选static编译成静态链CFLAGS+=-staticnarm-linux-striparm-linux-gdbserver裁剪大小nerrorinloadingsharedlibraries:libthread_db.so.1nLddgdbserver查看动态库依赖关系4142主要内容111333444交叉开发环境介绍交叉编译器cross-tool配置主机开发环境建立交叉开发环境555交叉调试应用程序222666ARM上的简单模块编程43交叉调试应用程序n试验环境n板子通过nfs映射开发机目录,以便访问主机上的程序及源代码narm-linux-gdbserver运行在开发板上,等待arm-linux-gdb的调试链接narm-linux-gdb运行在开发主机上,连接目标板上的arm-linux-gdbservernarm-linux-gdb必须在项目目录下启动,需要访问源代码n测试问题n单步定位segmentationfault44交叉调试应用程序n编译选项n可执行目标文件n-g,-ggdbn禁止和-O1/2/3、-Os一块使用n调试命令nFile,载入elf文件nRun,启动运行nList,显示当前程序及函数或变量nBreak,设置断点nDeleteb,删除断点nNext,step,单步运行nConti
本文标题:嵌入式Linux学习七步曲_Chap2 - 交叉开发环境
链接地址:https://www.777doc.com/doc-6465511 .html