framebuffer驱动设计文档_第1页
framebuffer驱动设计文档_第2页
framebuffer驱动设计文档_第3页
framebuffer驱动设计文档_第4页
framebuffer驱动设计文档_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、FrameBuffer驱动设计文档内核版本文档设计: 侯辉华版 本: 1.01时 间: 2007/03/10文档简介:本文描述了如何完成framebuffer驱动的过程,并详细介绍了整个完成过程中所遇到的的一些基础问题及相应解决办法,内容安排顺序依据整个工作的进展来。1. 开始应该注意linux的基础.当时初步分析LINUX时, 没有安装LINUX系统,以立宇泰的LINUX开发包为基础,怎么搞也没能在CYGWIN下编译成功, 当时对于LINUX的配制以及编译过程都没有任何了解, 遇到错误提示不知原因, 在MAKE DEP出现错误,亦不知原因是什么要知道,LINUX的配制如果不正确,make d

2、ep以及后面的make zImage的问题那是千奇百怪的,不一而足,不同环境根本说不清楚.所以要能自己独立的解决问题,还必须对于配置以及make dep等等过程有一个大至的理解才行,这样有问题才可能进行分析.2. 文档主要内容.以下简单的记录一下近段时间在LINUX上基础方面一些介绍. 其实仅对初学者有帮助, 因为初学者根本很多基本的东西都不知道,但是这些不知道的东西在网上基本没有全面的介绍,仅仅可以在不同的文章当中,可能会只言片语的顺便带出, 因此在这里我仅以自己初学的过程做一记录, 希望大家可以分享我的苦与乐, 不要象我一样再痛苦一次.有点后悔没有当天记录, 以至于丢失了最原始的茫然与无助

3、的感觉.追忆莫及.我虽然有了几年的编程和学习经验, 也看过不少的嵌入式的系统软件, 代码规模也不小,对GUI方面也有很多深入的学习与了解, 但是对于LINUX, 水平是比较次的, 以前工作的时候虽然着力分析过GDB的源码, 但是感觉也是太庞大的, 不过还好能把握主体的结构, 也基本完成了移值, 之后就放下了, 对于LINUX也就是这种层次.近时时间由于要弄一个显卡的FRAMEBUFFER驱动, 所以又不得不从零开始分析LINUX的相关东西, 遇到的问题很多, 所以希望记录下来, 可以用帮助初学者. 基本上同cirrus logic公司提供的无异, 周边的相关驱动都已经完成了, 但是因为要外括一

4、个显卡上去, 所以要做的工作就是在这个开发包的基础上增加显卡的framebuffer驱动,  这个开发包在网上有下载, 他准备的很齐全, 基本上所有的包都有了, 而且建立了一个很方便的编译环境, 将很多东西捆在一起. 通过简单几个命令就可以完成工作:如:make linuxconfigmake linuxmake ramdisk.gz以上三个命令就完成LINUX配置,编译内核zImage, 生成虚拟盘ramdisk.gz, 如此非常方便.如何开始接触Linux, 要大体了解些什么?1. 分析了LINUX在ARM这方面的代码, 要看这部分还必须先搞清一些ARM的平台知识以及汇

5、编知识.2. 熟悉了MAKEFILE文件规则.3. 熟悉LD链接器的LDS链接文件规则.4. LINUX的启动加载部分, 可以支持由其它的BOOTLOADER来加载, 也可以自己加载, 这当中涉及到比较让人不太清楚的地方就是:1) 要理清运行时的顺序, 内核是压缩过的, 起先压缩过的的内核运行, 解压出完整的内核, 然后转去解压后的完整内核运行.2) 要理清楚压缩过的内核的组成部分, 分别由head.S这个启动部分, misc.c解压部分, LINUX内核压缩文件piggy.o文件. 这几部分链接在一起组合输出名为linux的内核. piggy.o这个内核压缩文件是由archarmbootco

6、mpressedMakefile这个makefile当中产生的. 产生他依赖完整的带所有符号信息的LINUX内核的ELF格式的文件, , 由此逐层调用各个其它模块内的Makefile, 模块的划分基本依据文件夹层次结构.3) 要理清各个部分在内存中的位置关系, 一是压缩过的内核在什么地方, 二是解压后的内核在什么地方, 三是解压后的内核是否须要重定位而搬到其它地方.要特别注意有些LDS链接文件是链接后生成的, 看时间就可以知道, 它的作用就是告诉你内核链接后的位置, 因为先前的LDS文件中是一些符号.4) 搞清楚解压后的内核包含哪些部分, 先前我们谈到压缩过的内核的组成部分, 说到包含了压缩过

7、后的piggy.o, 这个才是真正的纯内核,不包含archarmbootcompressedhead.s, archarmbootcompressedmisc.c这些解压缩代码,archarmkernelhead-armv.S的代码才是解压缩后的真正起始.5) 以上所有所讲的, 内核的组成部分必须从makefile中分析, 然后再分析各个目录下的lds连接文件, 理清了这两部分才能正确理解以上所说的几条. 才能搞清楚整个内核的配置, 包括处理器类型, 硬件板子类型等.4月17日有关LINUX发行版的安装在linux面前,我是非常浅薄的,而且我以至于我开要装什么样的发行版,有什么最新发行版可装,

8、都是不太清楚的,只是简单的停留在学校阶段时的Red Hat 7.0/Tubro Linux/Blue Point/Red Flag等这些, 对于如今的Flodra/Deabin等等,都不知道的, 所以还只能借助网络来查找, 所幸有找到一个好网站,人气也很旺,也积累了好多的的资料,耐心查看就是了.-LINUX各种方面资料网站,虽然编程方面的显得少了,但是各种发行版安装使用方面的问题,以及文档介绍等等,都是非常好的,简单的说:1.如果遇到GRUB出问题了,如在LINUX上又装了XP,找不回LINUX启动菜单了,你可以找它; 2.如果遇到不知道如何安装TFTP服务,不知道如何配置或者关闭防火墙什么的

9、,你可以找它;3.如果想知道各种发行版的介绍以及安装相关知识,你可以找它.一.查找LINUX的发行版,安装LINUX.经过一番的查找, 终于了解了Fodara 5是一个比较好的稳定版本(这个稳定害死我了,后面讲), 但是不知道安装源在哪里, 也不知道哪里比较快, 所以还是先去下载了Red Hat 9.0这个非常这老的东西,应该是2003年的时候的吧, Fodara系统是RED HAT面对开源社区的版本, 后面RED HAT发行了企业版是收费的, RED HAT9.0因为先前就已经找到过一个下载源, 所以花了一点时间, 就找到了下载网址, 这是一个FTP.Red Hat 9.0下载FTP:好不容

10、易把RED HAT三张盘下载下来了, 加起来也有2G多吧,开着机品, 用FlashFXP开着机器下,好在是晚上睡觉的时候,第二天一大早起来可以看到下载完成,大喜哦.不过这个FlashFXP不太好,速度不行而且经常在下载过程中弹出是不是要覆盖原来已有的文件,这是在下载半路中弹出来的,很郁闷.最好大家可以用自己的更好的FTP工具.可是后面一想,RED HAT比较老了,我的机器很新,估计到时候安装可以硬件驱动是个麻烦事,不如找个新的发行版,这样安装之后可能会省心很多, 事实证明确是如此,后面就知道了.最新的Fodara 5有五张安装碟,一张修复碟;如果是DVD就只有一张碟,总体的大小是4G左右.我是

11、在官方安装源下载的, 使用的是BT下载,用FLASHGET1.8正好支持,免了到处找BT下载工具,这很烦.感谢FLASHGET这个这么好的工具,一直以来都在发展,感谢.Fodara 5下载源:Fedora Core 5 Final - Bordeauxbordeaux-binary-i386.torrent Fedora Core 5 Final - Bordeaux binary CD iso images for i386. 3.1GB 2006-03-20 开着机器DOWN整晚,多半都没有问题,可以下载过错成,呵呵,不要心疼爱机.Debian 4.0发行版的安装源:下载了Debian 4

12、.0发行版的DVD碟,总共是3张, 大小有14G左右, 如果是CD的话据说是21张, 我是DOWN了整天才DOWN下来的, 但是郁闷的是,DOWN下来我记录到DVD时, 因为是用另外一台机子下载的, 所以直接用网络记录, 因为选的刻速过高, 是16X, 所以居然在第二张时刻坏了一张盘, 郁闷,最后都用6X的最低速记录, 才算平安无事.Debain 4.0 发行版的BT下载种子:我用的官网的, 一来稳定, 二来也好找, 三来速度也不错, 平均都有50K左右吧,种子如下:4月27日WINXP与LINUX FC5双系统的共存想着LINUX总是不太便,最惨是不能用IS来阅读代码,所以很郁闷,于是想再装

13、一个WINXP,于是悲扰又着来了:现在WINXP总算可以正常的使用了, 不会再上不了网,也没有中什么毒,心想可以安静一段时日了, 但是想起LINUX FC5, 还得把它找回来呀,不然就白装了,于是到: 一番查找,终于找到,可是执行过后,WINXP的菜单项一选择就进了LINUX去了,当时郁闷了好半天,还以为是自己的一个误操作才导致如此:root (hd0, 5) /执行这个前我执行了一次root (hd0, 0), 开珆以为这里错,事后表面与此无关.setup (hd0, 0)至于正确的解决办法,那是好多天后才偶然尝试成功的,就这么一个小问题,也把我搞死,仅须改setp (hd0, 0)为set

14、up (hd0), 就可以正常在GRUB上启动WINXP了2. 正式开始使用linux FC5, 遇到不少好资料.这些资料当中,特别值得介绍一下的就是那本介绍如何自己编译一个最小型的LINUX操作系统环境的书, 而不用从发行版安装,它一步一步教我们如保建立编译工具链,以及如何建立内核,如何建立启动环境与脚本,让我们可以明白LINUX整个系统的组成,简称LFS:Linux From Scratch版本以上讲解了最基本的一个LINUX环境的建立过程, 后绪的别一本书接着介绍了如何建立整个GUI图形界面以有一些更加多的网络服务等:Beyond Linux From Scratch版本 1.0这个资料

15、是我遇到的非常好的资料,大家可以好好的享受,多看几遍,经常的看,肯定会有很大的收获的.3. 再有一个好的资料就是chinaunix了,这里面包含了一个linux howt中文资料,虽然网上到处都有,但是这里的比较全,便于查看:HOWTO 索引Linux HOWTOs目前已经有下列的 Linux HOWTOs 存在,共计 156 篇:4月28日编译MINIGUI的问题装好LINUX后, 尝试着编译了一下在PC上跑MINIGUI,配置编译倒是一路无事:./configuremakemake install经过这3个步骤, 编译好了MINIGUI在PC的动态库,还有如下几个小细节:/usr/loca

16、l/lib这样就指定了链接时查找MINIGUI的库路径。2. 执行/sbin/ldconfig更新共享函数库系统的缓冲.3. 修改GRUB的启动文件grub.conf,在kernel那一行当中,加入VGA0x317, 以此打开FRAMEBUFFER支持。4. 编译示例最后兴冲冲的去MAKE示例, 结果遇到错误, 说在链接的时候找不到pthread_kill_other_threads_np()这个函数的定义, 于是在IS中查找了一下,发现这个函数仅有一次调用, 就是在/src/kernel/init.c文件当中这个函数TerminateGUI():void GUIAPI TerminateGU

17、I (int rcByGUI)    if (rcByGUI >= 0)         pthread_join (_mg_timer, NULL);    #ifdef _LINUX_    else         pthread_kill_other_threads_np ();  &

18、#160; #endif 于是注掉了,重新编译安装了一次MINIGUI, 再编译示例, 正常通过。5. 运行示例运行示例没有马上看到结果,提示说什么在初始化GUI时失败, 于是想起用GDB来调试,结果高度的时候,发现有些函数符号找不到,不能正常源码级跟进,百思不得其解, 于是在论坛上找找, 还是没有找到原因。最后突然想起, 以前我在移值GDB时,用得很熟悉, 对于其执行文件格式,调试信息格式都相当熟悉, 知道在调试信息加载时如果源码文件目录不对的话, 会出现这种问题,于是直接打开MINIGUI的SO库文件来看, 发觉真的是路径有问题, 产生问题的原因是:1. 之前我的MINIGUI是

19、放在WINDOWS上的盘上, 挂到/mnt/e目录下, 后面把MINIGUI移到LINUX的根目录下了, 是直接COPY的, 而且没有重新的配置以及清除已经编译的.o目标文件,所以那些文件的调试信息对就源码都是指向/mnt/e目录下的。2. 因为目录指错的原因,所以GDB无法正常找到调度信息, 无法正常源码级调试,但是我不明白我的/mnt/e那个目录下的MINIGUI是存在的, 为何GDB找不到,不甚明了,难道是因为mount挂上去的WIN磁盘目录有在找寻时有问题? 这个挂上去的分区目录在后面编译LINUX时还会提到,问题不少,到时再说。找到不能正常调试的原因了, 于是源码级调试, 最后跟到打

20、开输入设备文件时,GDB调试器就死掉了, 不知何故, 但是差不多明白是输入设备配置的问题吧。于是在到MINIGUI上的论坛上查找, 查找到原来在2.6版的内核当中,关于键盘以及MOUSE的设备名称已经变化了,不再是:/dev/mouse于是查找内核的dev目录, 找到MOUS设备名称:/dev/input/mice于是打开MINIGUI的配置文件, 注间去MINIGUI的安装目录下的ETC文件夹下找,然后修改成如上把示, 终于可以正常的运行MINIGUI的示例了。MINIGUI还算是比较小的规模, 所以遇到问题实在很少, 以后我会详细补记我在LINUX下编译出现的种种怪问题, 以及如何解决问题

21、的,希望大家持续关注。4月29日尝试建立整个开发的环境,如TFTP下载等安装好LINUX FC5,于是准备尝试编译一下LINUX。在编译LINUX之前,首先尝试了一下如何把开发包中本来已经编译好的映象文件DOWN到板子上运行。1. 用烧录的东西,首先按步就斑的把redboot.bin这个文件烧录到FLASH当中,这是一个BOOTLOAD工具,而且还支持人机界面,可能通过一些命令来下载内核到RAM当中,支持TFTP服务,因为考虑到通过网络下载会快很多,于是选用TFTP。2. 建立TFTP环境,我安装时没有选择安装TFTP服务,于是须要自己安装,在网上查找了半天,了解了TFTP服务的安装以及如何配

22、置,如果默安装了TFTP,则根目录下面会有/tftpboot文件夹, 安装倒是比较简单:1. 安装TFTP, 运行如下命令, 会直接从网终上下载安装,如果有本地光盘,可以通过Add and Remove Software来添加安装包。yum install tftp-server2. 配置TFTP,配置本来是很简单的,找到文件/etc/xinetd.d/tftp, 如果没有成功安装则不会有这个文件,如果没用安装也不会有这个文件,只须编辑一下, 把disable的由YES改成NO:disable        

23、60;           =no另外还有一个特别要注意的就是防火墙的关闭,你如果开着它,就会导致下载的时候出现:Can't load 'ramdisk.gz': operation timed out我被这个错误提示搞得浪费了几个小时间,最后终于才在一篇文章中介绍到这个,在终端上运行:setup然后关掉 防火墙, 希望大家不要出现这种错误来浪费时间,这是经验教训。3. 使用TFTP,如果初学的人没有用过TFTP,那么可能不太理解这个东西是如何使用的,其实相当简

24、单,只须开启TFTP服务即可,然后把你要下传到板子上的文件放置在这个目录下即可:开启服务: #service xinetd restart如果你要命名板子下面可以上传文件,则要修改服务器的TFTP目录可写:#chmod o+w       /home/lqm/tftpboot如果你已经通过Redboot把LINUX以及它的磁盘文件下载到了RAM当中,并且运行起来了,那么此时你可以在跑起来的LINUX下面运行如下命令来获取你在服务器上交*编译好的执行文件到目录板上来运行:3. 如何与板子进行连接, 直接在命令行运行minicom,然后进

25、行配置,先按crtl+a, 再按 z,然后配置界面,设置串口的一些参数,这些都不会有什么问题,之后在设置完成中,选择保存设置,会将设置保存到/etc目录下,下次启动时默认加载。在REDBOOT命令行下输入:这里,将内核ramdisk.gz下载至RAM的8M处,内核代码在512K处,ramdisk.gz大小为0x600000这样你的板子上就会跑起LINUX来了。总结:今天终于把整登上开发环境建立起来了,这样才可以测试自己编译的内核以及程序,不然的话没办法进行开了的。5月12日编译LINUX的问题 前面有讲过好多了, 但是还没有怎么讲到编译LINUX时所遇到的问题,现在正式开始进入这一块.EP93

26、XX开发包资源及工具文档首先我的开发包是EP9302的, 是cirrus logic公司的, 由国内一个公司抄过来卖的, 在以下的地址可以下载到各种开发包, 这个现在是支持EP系统的板子的, 最早支持的是EP7312, 现在ARM9的应该也支持了, 我现在还没有拾建起这个模拟器的环境, 以后会试试, 应该会方便调试一些.下载EP9302系统的开发包以及工具链及相关说明帮助文档首先指出两个容易出现的错误:1. 我先是在WINDOW下COPY光盘的开发包到磁盘E, 然后直接用WINRAR来解压, 其实用WINRAR来解压是有问题的, 一来格式不对; 二来解压时间超级长;三来解决到最后一点点的时候会

27、报出一点错误;四来解压后发现有个别文件丢失.2. 后面我进入LINUX后, 直接把E盘挂装到/mnt/e目录下:mount -t 'vfat' /dev/hd8 /mnt/e我后就开始配制, 结果配置的时候出现各种各样的错误码, 到后面编译也遇到奇怪的问题, 最后没有办法, 直接把光盘的源码包解压到LINUX的根目录下, 然后再来配置和编译, 就没有什么奇怪的问题了, 不知道这个问题是不是和挂装的目录相关, 目前还不太清楚.现在总体说明一下LINUX配置编译的基本东西:1. 首先要安装好针对ARM的交*编译工具链, 一般的情况下你的开发板都会为你准备好了这些东西的, 所以无须你

28、自己去编译那么多的工具链与库, 我想这个工具是所以开发的基础,弄错了以后的工作是无法开展的.在LINUX下就有已经打包的针对LINUX平台的工具包(.sh文件), 直接执行就可以了,不过也有那些直接解压就可以的, 以下地址有打包好的arm-linux-XXX一类的工具包, 目前还不太清楚arm-elf-gcc与arm-linux-gcc到底有何区别, 以后了解一下.1. 配置LINUX:LINUX的配置支持图形化的配置, 图形化配置时, 如果发现你的linux根目录下面有.config配置文件, 会读取这个文件作默认的配置文件. 然后调用它来产生图形配置菜单及保存配置选项,生成配置产生的头文件

29、(autoconfi.h等).3. menuconfig配置控件菜单选项: 各个模块目录下config.in, 如:如果用户想要自己增加一个配置选项到LINUX当中, 则必须修改这些config.in文件, 以产生在make menuconfig时的配制菜单, 另外还要在各模块目录下的Makefile文件中增加自己相应模块的.o文件, 则其编译进内核.注: 在后面我增加ep9302的framebuffer支持时, 就是通过修改了上面列出的两年config.in文件, 让CPU为ep9302时也显示出FB相关的支持选项, 以及键盘等支持项选.4. LINUX每一个相应模块下面都有一个Makefi

30、le文件, 由根目录下的Makefile文件来调用各级的Makefile文件来编译生成内核, kernel.o这些分别是显卡驱动, 字符设备驱动, 内核等打包生成的, 并没有相应的video.c char.c kernel.c这些文件.特别提醒:请不要手动的修改配置文件, 这样修改是无用的, 因为每次make 这个文件基本上就是.config文件的C语言头文件版, 是被内核包含的一个文件, make dep时会根据这个文件来检测内核的配置并产生依赖关系, 2007/05/15Linux与BootLoader的传参今天算是有些收获吧,总算把以前一些弄不清楚的问题搞明白了, 回过头来一想原来是很简

31、单的事, 不过我觉得还是值得多说几句以记下来供初学者参考.我的开发包是广州一家公司的, 不过他基本也照抄别人的开发包吧,什么声卡/USB/串口等, 基本上原样没什么变化吧, 就是用的EP9302, 唯一提供多的东西就是把工具链以及库等都打包了, 多少方便了些. 而且它针对不同的开发板,如EP9301, EP9315等, 都在各自的一个单独文件夹中编译, 所以开发包中的LINUX源码目录还是保持整洁的, 编译各种EP9302时, 是在一个叫做EP9302文件夹下, 编译的中间代码都在一个隐藏文件.do_not_edit, 真是夹如其名, 意思就是你无须修改这个文件夹了, 这只是中间编译结果存放的

32、地方, 最后所有的生成映象都会COPY到EP9302目录下的, 外国人做事不是细心, 名字取得好极了.简单的看看EP9302下的MAKEFILE文件, 相信大多数人都没什么问题吧, 这个文件还是很方便的, 你只须要如下即可:make linuxconfigmake linux即完成了LINUX的配制与编译, 无须(make menuconfig, make dep, make zImage), 但如果细心的话, 自己去看看开发包目录下的buildrules, 就知道具体的原因了, 为了方便他们把他封装成一些很方便的编译SHELL.现在讲讲我所遇到的问题:我的问题在于, 我想对EP9302增加F

33、RAMEBUFFER的支持, 想加上显卡驱动, 但是我却总是看不到在配制菜单中有关EP9302的FRAMEBUFFER配制选项, 所以我就想借用EP9315的配制选项.当然了, 现在我再看这个问题,在我清楚了之后, 感觉已经不再是问题, 但是在我不了解LINUX的配制的时候, 我的问题是蛮多的:1. 如何往配置选项中加入自己定义的配制选项? 从而让自己的驱动模块可以让用户通过配置菜单来选择, 让自己的代码被编译进内核?2. 为什么很多的选项都看不到?3. 当我将显卡的FRAMEBUFFER驱动编译进内核后, 如何让它开启?问题1: 其实很简单, 在LINUX下每一个模块下面都有一个config

34、.in的文件, 就是这个文件控制着每一个LINUX模块的编译选项, 要加入自己的配置选项, 就在这个里面, 照着样子加.问题2. 在相应模块下的config.in, 控制着具体有哪些选项可选, 会根据相应的配制, 显示下一级的相应配置, 因此针对不同的平台, 不同的板子, 你能够看到的子选项是不一样的, 所以当我在EP9302的板子上, 想看到FRAMEBUFFER选项的时候, 一个都看不到, 当初我最开始弄不明白这个简单问题, 苦恼了一段时间, 没有想到这一层, 现在想清了, 这么easy.注:有关LINUX的配制方面, 我找到一篇很好的介绍文件, 大家可以看看:Linux内核配置系统浅析问

35、题3. 开启FRAMEBUFFER支持, 在PC上的LINUX下来说是比较EASY的, 在GRUB上只须要在grub.conf文件有关内核位置那一行示加上vga=0x317(具体数字代表模式可以查看Documentation/FB下面文档),但是在嵌入式平台下面怎么办呢? 参数如何传, 谁来传, 在哪传?文档介绍:1. 经过进一步的了解, 知道在ARM上面的LINUX, 上必须有BOOTLOADER才能够启动内核, 关于这一点大家可以查看内核文档:DocumentationarmBootingDocumentationarmSetup另外还有几篇介绍BOOTLOADER的文件, 都是在IBM上

36、面的, 那里资源很好, 大家在里面查找更多资源:2. 嵌入式系统 Boot Loader 技术内幕3. Linux bootloader 编写方法还有一篇更全面的E文文档, 里面介绍了ARM的BOOTLOADER原理, 向内核传递的参数, 以及实现一个简单的BOOTLOADER原型:4. Booting ARM Linux我想通过这几篇文章, 大家可以了解到以下几点:1. 为什么要Bootloader-arm上linux内核, 有别于i386pc上的内核, 因为它没有PC上的硬盘主引导扇区以及BIOS方面的支持, 所以必须有一个Bootloader来完成这个事.2. Bootloader主要做

37、什么-主要就是配置内存,初始化硬件环境,这部分工作可以等同为PC上的BIOS做的工作; 还有就是引导内核到正确位置, 设置内核的参数区, 跳转入内核执行.现在回过头讲如何在打开FRAMEBUFFER支持的问题, 进和了解内核我们知道内核的参数有好些, 与FB相关的参数就是:#define ATAG_VIDEOLFB 0x54410008struct tag_videolfb u16  lfb_width;u16  lfb_height;u16  lfb_depth;u16  lfb_linelength;u32&#

38、160; lfb_base;u32  lfb_size;u8  red_size;u8  red_pos;u8  green_size;u8  green_pos;u8  blue_size;u8  blue_pos;u8  rsvd_size;u8  rsvd_pos;但是有关这个参数, 我还没有更深入的理解, 我发觉很少有BOOTLOADER在这里传递了这个参数, 有待进一步了解.另外还有一个参数就是:

39、/* command line: 0 terminated string */#define ATAG_CMDLINE 0x54410009struct tag_cmdline char cmdline1; /* this is the minimum size */;这也是内核参数区中的一个参数, 这个参数一般有一个默认值, 如果在配制内核的时候打开了这个支持的话, 有关这个参数可以看内核文档:Documentationkernel-parameters.txt这个参数命令行可是支持相当的广的, 我们的FB的支持选项就是"video=", 如果在命令行中加入video=E

40、P93xx, 就是告诉内核我们使用的是EP93XX的FB驱动.2007/05/16理解Linux的配置文件, 增加Lanrry显示的相关配置选项今天可以说是比较顺利吧, 没有留下太多的郁闷, 碰到了不少问题, 也解决了一些问题, 但还是有不少不懂的问题.一扫前几天的郁闷, 又换了台机器, 如果大家一路看过我的日记的话, 应该知道这是第三台机器了, 不知道是机器太破, 还是我的运气实在的不好, 一路过来碰到这么多的破机器!因为前面那台机器死机的问题, 不知道是我安装的Fodera 5 的问题还是机器的风扇,硬盘,还是光驱的问题, 总之在LINUX状态经常的死, 特别是我在MAKE LINUX的内

41、核后, 多半会死, 死多了还会导致启动LINUX时中途就死了, 要多启动好几次; 但是在WINDOWS系统下, 死的时候很少, 不过今天也碰到一次了, 我在COPY网络上另一台机上的文件时, 因为文件很大, 所以居然死了一次.总之是问题相当的多, 我在前面都已经说过那些问题了, 现在不再重复了.而且我下载了Debian 4来安装时, 也是在安装基本系统那一节就进行不下去, 说是执行什么出错, 搞了几次还是那样, 没办法.中午的时候, 就终于换了机子了, 即第三台机器, 这个机器倒是很好的, 风扇转速不高, 噪声好小, 几乎听不到, 于是就安装Debain 4, 我一来是想验证一下到底我刻录的安

42、装盘有没有问题, 二来也想体验一下这个LINUX的发行版.差不多四十多分钟就装好了, 一路顺利, 没有出错, 进入系统后, 居然不让ROOT用户登录图形系统, 郁闷, 于是用了另一个用户, 但是进去什么也做不了, 文件也不能创建, 于是在网上找找, 原来是在"登录设置"中要设置成ROOT用户可以登录图形系统.现在开始准备LINUX的编译环境, 把工具以及源码开发包都COPY过来了, 结果搞了开始就出问题了.1. 在ROOT用户下找不到.bash_profile文件, 这个文件要修改一下, 设置一下PATH路径, 让编译的工具路径不用每次设置, 结果在DEBIAN 4下怎么都

43、找不到这个文件, 查找也找不到.2. 手工设置了路径, 然后配置LINUX时, 说什么"gcc command not found", 好奇怪, 为什么是GCC, 而且根据提示, 好象说什么没有配置平台什么的, 这样第一步的make menuconfig都进行不下去了, 不知何故.于是掉过头来, 再次安装FC 5, 这次安装也差不多四十分钟, 等得还是很郁闷的, 一边看书一边等.关于DEBIAN上的问题, 目前还不清楚原因, 留待日后再回过头来看看是什么原因, 相信肯定是有不了解的原因在内,由此也可以LINUX在不同环境下配置编译的问题是多样的等到安装完成后, 一路编译,

44、基本没有出错, 但是总在最后链接的时候, 报告一些变量找不到定义, 经常一阵分析, 原来是缺少键盘映象的相关定义, 后面查知了这几个文件编译进去内核的开关, 于是自己在.config文件中加入, 谁知结果还是一样的, 郁闷了一会儿, 才搞清楚我又犯了先前的错误, 如果配置选项不属于你指定的处理器配置, 你千万不要自己去修改.config文件, 你那样修改来打开配置是不行的, 只能通过去修改config.in文件, 打那些配置选项加入到你的处理器当中.具体过程如下:EP9302这个开发板本身是没有LCD支持的, 现在我要为它增加LCD方面的支持,借助的是EP9312等有LCD支持的配制, 然后修

45、改相应的EP93xxfb.c这个LCD驱动,就能完成EP9302的FB驱动, 通过分析总结以及尝试, 必须如下修改配制:  "$CONFIG_ARCH_EP9302" = "y" -o 内容, 这样才make menuconfig时才能看到framebuffer相关的选项, 否则无法看到ep9302相关”Console Driver”下的Framebuffer配置选项.     if "$CONFIG_ARCH_EP9307" = "y" -o  

46、;     "$CONFIG_ARCH_EP9312" = "y" -o       "$CONFIG_ARCH_EP9302" = "y" -o       "$CONFIG_ARCH_EP9315" = "y" ; then       

47、; bool '  EP93xx Frame Buffer support' CONFIG_FB_EP93XX     else        define_bool CONFIG_FB_EP93XX n     fi 即增加相关Lanry显卡的显示模式以及颜色深度的配置.# houhh 20070608. if "$CONFIG_ARCH_EP9302" = "

48、;y" ; then bool ' EP93xx Lanrry Frame Buffer support' CONFIG_FB_EP93XX_LANRRY else define_bool CONFIG_FB_EP93XX_LANRRY n fi if "$CONFIG_FB_EP93XX_LANRRY" = "y" ; then choice ' EP93xx Lattice Frame Buffer Display Resolution' "640x480 CONFIG_FB_EP93XX_LANR

49、RY_640x480 800x600 CONFIG_FB_EP93XX_LANRRY_800x600 1024x768 CONFIG_FB_EP93XX_LANRRY_1024x768" 800x600 choice ' EP93xx Lattice Color Depth' "8bpp_default CONFIG_FB_EP93XX_LANRRY_8BPP 8bpp_custom CONFIG_FB_EP93XX_LANRRY_8BPP_CUSTOM 16bpp_565 CONFIG_FB_EP93XX_LANRRY_16BPP_565" 16

50、bpp_565 fi这样在配制时你才可以打开SPI-PS2 CONFIG_EP93XX_KBD_SPI/CONFIG_EP93XX_VT选项,其原因是当你打开FRAMEBUFFER支持时, 前提是必须打开CONFIG_VT, 这一点可以去看看:这个文件是针对ARM平台的配置, 在里面查找一下CONFIG_VT, 看看就不难理解只有打开了它才能打开FRAMEBUFFER支持, 在MENUCONFIG配置时,打开它后才能看到console driver选项,才能进去配置FRAMEBUFFER支持。特别说明: 这里再次特别的说明一下, 在进行LINUX配制时, 千万不要自己去手动的找开一些选项的支持

51、, 手工的修改.config配置文件是不起任何作用的, 这个文件必须是由配制程序生成, 在执行make dep是会出错的, 这一点我相信初学者是容易出错的, 特引提出来.小插曲:前段时间我提到了, 我在装了linux fc5的机器上直接安装WIN系统, 导致了LINUX系统无法启动了, 看不到GRUB菜单了, 于是使用了LINUX的修复盘,作如下操作将LINUX系统找回来了:1. root (hd0, 5)2. setup (hd0, 0)注: 5是我的LINUX根目录所在盘,至于0我们稍后会讲,正是因为这个浪费我不少时间 其实正确的操作如下, 差别很小,我回想起,看到网上有人修复GRUB时是

52、如下操作的:1. root (hd0, 5)2. setup (hd0)    特别注意这第2条命令, 比起setup (hd0, 0)少了什么, 没有0表示的才是写GRUB到硬盘主引导记录, 不然就是写到第一个分区,我的第一个分区正好是WIN分区,如此修复GRUB后,WIN系统的引导记录就被改写了, 而会直接启动GRUB。至此,我的WIN系统与LINUX系统终于可以共存了, 通过GRUB可以正常的启动我的WIN系统了,LINUX也可以启动了,问题至些我想也不用再多说其它的什么了, 有什么很小的问题也会折磨人的, 大家可以想见我在此过程中的痛苦,但是我坚

53、持下来了,平下心静下气,先把问题放下,一时解决不了,日后再来嘛 2007/05/17编译MINIGUI的应用示例的交叉编译今天上午总结分析了一下先前的一些工作, 整理补记了部分的分析日记,不知道对于大家来说,不是不太零乱了? 以至于看不懂? 或者太长? 呵呵,我相信如果大家认真仔细去看,一定能够体会的用心。总的来说,是编译了MINIGUI针对ARM库以及示例文件,如Helloworld,button等程序,先说说这个过程中遇到的问题以及收获:1. 开始的时候,有点迷茫,不知道如何下手,先前虽然编译过PC上运行的MINIGUI程序,但是在PC上编译是很简单的步骤,虽然运行时有些问题,但总体来说整

54、个过程是相当清晰的;编译ARM上跑的MINIGUI,我开始不太清楚的问题是:1.minigui须要相应C库文件以及头文件在哪里, 是用什么库?glibc或者ulibc?2.minigui须要的相应的LINUX系统头文件在哪?3.如果将MINIGUI配置成ARM平台上运行,以及如何配置成针对具体的操作系统?如传统的LINUX或者是LINUX或者是ECOS?2. 带着以上的几个问题,我精略的查看了MINIGUI源码目录下的配置文件,发现在其build目录下有一些已经配置好的针对LINUX的配置脚本,用的是UCLIB库: 它是针LINUX的, 因此我觉得可以把它拿来作为我们的配制脚本,虽然它的上面指

55、定了LINUX头文件以及UCLIB库文件的路径,但其实我根本没有这些东西, 我的系统已经安装好了针对ARM的工具链,包括各自LINUX头文件以及库,因此只要用的是ARM的编译工具,默认用的就是这些,由此解决了MINIGUI所以须的LINUX头文件以及C库的疑问。3. 直接执行buildlib-LINUX-arm3000这个配置脚本,然后make, make install, MINIGUI的头文件以及生成的静态库文件就被编译到/LINUX/minigui目录下了,当然大家可以修改这个安装目录,我没有修改。4. 开始编译示例,这一步遇到一个奇怪的问题,虽然我也用了buildlib-LINUX-a

56、rm3000这个脚本,但是配制的时候,如果用在编译设置(CFLAGS)中加入头文件包含时,就会配置进提示C编译时无法创建执行映象,在LDFLAGS加入库文件包含选项时也是一样,于是就不加它们,结果正常编译通过,生成了MAKEFILE文件,但是编译示例时提示找不到MINIGUI的头文件以及库文件,最后解决办法是手动找到LDFLAGS以及CFLAGS两个选项,手动加入头文件包含与库文件包含:LDFLAGS = -Wall -L/LINUX/minigui/lib -lc CFLAGS = -O2  -D_linux_ -I/LINUX/minigui/include-I/LIN

57、UX/minigui/include/ctrl -fno-builtin -nostartfiles  -Wall-Wstrict-prototypes -pipe -D_REENTRANT其实如果将MINIGUI安装到系统默认的头文件包含路径以及库文件路径(注意是针对ARM平台的,不是编译宿主机平台),就可以不用加这些选项吧,目前还没有试过。4.  运行MINIGUI时,提示非法指令编译好了MINIGUI,因为是带调试信息,而且指定的是静态库,如果觉得在的话,可以自己在连接选项当中将-g参数去掉,这样就会小很多;我编译为一个MINIGUI的示例hell

58、oworld,然后通过TFTP下载到板了(前面日记有讲如何建立TFTP以及如何进行下载), 结果提示非法指令,于是想起来用GDB来调试.5. 用GDB通过网口调试MINIGUI示例程序开始我想到的是串口,没想到我的网口,真是郁闷,以前用GDB很熟悉了,所以这里就轻车熟路,首先在板子运行 起GDBSERVER:板子上:开发主机:arm-linux-gdbtarget symbol-file /tftpboot/helloworld经过如上简单操作就可以进行调试了, 首先是开启板子上的调试代理端,等侯主机上的GDB来连接,然后用主机上的GDB来控制板卡上的程序执行,记全在主机上记得加载调试程序的符

59、号信息。结果弄了半天, 发现根本没有跑到用户程序的main()就提示非法指令了, 实在是搞不懂, 看来只有留待明天才能解决了。小插曲:1. 于是运行,结果提示如下错误:rootlocalhost firefox# ./firefox./firefox-bin: error while loading shared libraries: libstdc+.so.5: cannot open  shared object file: No such file or directory先前就下载过一次,当时直接运行没有任何问题,持来这次的LINUX安装少安装了一些什么库文件,于是网上找找,别人提示如下做

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论