- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
*uClinux内核移植的若干问题1uClinux内核移植源程序阅读问题1uClinux内核源代码非常多,且结构复杂,uClinux内核有接近10000个文件,4000000行代码。因此,阅读uClinux时必须借助一些工具SourceinsightUltraedit等uClinux内核使用GNUC,它在ANSIC基础上进行了一些扩充,因此在许多编程习惯上与ANSIC不同。大量使用宏定义,且许多宏定义非常复杂,这也在一定程度上增加了难度。*uClinux内核移植的若干问题1uClinux内核移植源程序阅读问题2uClinux中并不是所有代码都编译进去,对于一个体系结构,只有很少部分的代码参与编译,因此,必须掌握uClinux发布中各目录的意义才能进一步清楚是否参与编译。还可以通过查看.o文件的方式查看当前参与编译的是哪个文件,通常xxx.c文件生成的目标文件为xxx.o,只有生成了.o的文件才参与编译,注意:这适合于大部分情况,但是不是绝对的。uClinux中大量使用条件编译,阅读代码时需要弄清楚,到底哪部分代码参与编译。#ifdefxxx…#elif…#endif*uClinux内核移植从C++中吸收了inline和const等关键字。添加标题ANSIC代码与GNUC中的保留关键字冲突通过双下划线(__)解决:如inline等价于__inline__、asm等价于__asm__添加标题结构体的初始化添加标题GNUCuClinux内核移植的若干问题2添加标题*uClinux内核移植结构体声明uClinux内核移植的若干问题2GNUC结构体初始化ANSIC结构体初始化,必须按顺序GNUC结构体初始化,无需按顺序*uClinux应用程序编写程序编写Makefile文件编译运行uClinux应用程序设计*编写Makefile文件uClinux应用程序设计指定编译器生成的执行文件和链接过程中的目标文件编译和链接的参数编译命令拷贝leddemo映像文件到romfs中生成romfs映像清除*uClinux应用程序设计应用程序运行可以采用如下两种方式:添加标题在uClinux内核启动起来,并且有办法从主机获取文件时,可以在uClinux控制台直接从主机获取编译后的应用程序。可以通过ftp、nfs、ssh等方式达到。添加标题也可以在编译应用程序后将该应用程序拷贝到uClinux-dist/romfs中,然后重新调用genromfs生成romfs映像文件并重新编译内核,然后下载运行新的内核,此时文件系统已经更新。添加标题贰壹叁uClinux应用程序运行1*uClinux应用程序运行2uClinux应用程序设计uClinux应用程序必须编译成平坦格式的(flat),通过连接参数-Wl,-elf2flt完成。leddemo为平坦格式leddemo.c不是平坦格式*uClinux应用程序设计当直接在uClinux控制台中从主机上获取应用程序时,必须保存到可写的位置,比如JX44B0中的ram盘中:/var目录下,而不能保存到只有只读属性的/bin里面,也必须修改其具有执行属性,且通过如下命令执行该程序:./leddemo重新编译内核时,通常将应用程序添加到uClinux文件系统的bin目录,该目录有全局路径。且该文件应该具有执行属性,可以通过如下命令修改:chmod777leddemo在新内核启动后,直接在命令行输入文件名即可运行。uClinux应用程序运行3*uClinux应用程序设计配置uClinux应用程序启动后自动运行如果需要在系统启动以后自动运行leddemo程序,需要编辑romfs中的启动脚本文件,该文件为uClinux-dist/romfs/etc/rc使用vi编辑器编辑,在该文件最后添加如下脚本:/bin/leddemo该脚本将启动后运行leddemo,直到程序退出。或/bin/leddemo它将在后台运行leddemo,不影响其他的程序运行。*linux驱动程序uClinux驱动程序设计Linux下对外设的访问只能通过驱动程序进行Linux具有统一的驱动程序接口,以文件操作的方式管理驱动程序,如:open、read、write、ioctl…驱动程序是内核的一部分,可以使用中断、DMA等操作驱动程序需要在用户态和内核态之间传递数据*uClinux驱动程序((unsignedchar*)0=0x3e;uClinux没有屏蔽应用层对外设的直接访问,可以在用户态直接进行如下操作:
文档评论(0)