免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1029 | 回复: 0
打印 上一主题 下一主题

关于打印机驱动移植及Nandflash空间问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-25 19:56 |只看该作者 |倒序浏览

Linux驱动在PC机器上运行之后,接着的工作就是交叉编译驱动,使其能在嵌入式环境下运行。
理论上的办法就是通过交叉编译工具:arm-linux直接交叉编译,生成于平台相关的机器代码。经过两次交叉编译驱动的实践,分析arm-linux交叉编译的过程,可以总结出交叉编译的基本原理及过程:
当程序采用arm-linux实现编译的时候,首先要使程序的编译工具指向arm-linux,这里有三种方式:
(1) 对小而简单的程序,实现直接编译,采用如下例子命令:
./usr/local/arm/2.95.3/arm-linux/bin/arm-linux-gcc hello.c
(2) 对一般的内核级驱动程序,一般情况,它所包含的文件不多,代码量不大,Makefile文件相对简单,直接修改其Makefile文件,使其所采用的编译工具为arm-linux,并所连接的库文件为arm-linux库。
如:修改Makefile文件的特定几行:
CC=/usr/local/arm/2.95.3/arm-linux/bin/arm-linux-gcc
Kinclude=/usr/local/arm/2.95.3/arm-linux/include
(3) 对于较复杂的程序,一般情况,包含的文件多,所要求的库种类多,代码量大,这样的程序编译起来比较复杂,面对这样的程序:
一种方法是在阅读帮助文档,以此获取信息,是不是程序本身就对交叉编译有所考虑,如(CUPS),可以采用如下命令:
./configure –host=arm-linux   (它本身就为交叉编译做了考虑,由./configure命令生成对应的Makefile文件,采用如上的命令,它自动使用交叉编译工具实现编译)
另一种办法是常用的办法,修改Makefile文件,在比较大的程序,这种办法,需要阅读Makefile文件和配置文件,工作量较大。
交叉编译过程中,所面对的最大问题就是程序所需要的库找不到,或是版本不一致,如此在Make过程中就会出错,面对这种情况,搞清楚arm-linux的编译连接过程,是十分重要的,特别是弄清楚,编译器在哪里找库,在什么地方有库
编译器在哪里找库
所有的库文件和头文件都放在交叉编译工具包的arm-linux/lib,include文件夹,当交叉编译开始之后,编译器会自动的在这两个文件夹里寻找头文件和库。
在什么地方有库:
在交叉编译过程中,最常见和令人头痛的问题就是找不到需要的库文件,而库的来源有两个地方:
1.      如上所述,在arm-linux文件夹里自带了库,这里的库对一般的应用程序已经足够,编译普通程序,足够应付。
    2. 对于需要库比较多,比较复杂的程序,往往编译器自带的库是不足够的,比如gutenprint的编译。如此,查找第二个库中的文件成为唯一的途径,即查找开发板自带的文件系统中的库,然后将需要的库和头文件,copy到arm-linux对应目录下,如此就解决了库不足的问题,通常情况下,文件系统所带的库远比编译器所带的库多。
采用第二种方法,gutenprint的编译通过。另外:即使在以上两个地方都找不到库,那么在报错之后,确定程序所缺少的库文件和头文件,然后在网上下载源代码,交叉编译成项目所需要的库,也能解决交叉编译的问题,只是工作量会大一些。

一.             关于Nandflash空间的问题
1.  项目产品的发布:
我所考虑的:最后的项目产品发布形式应该是:硬件部分——六层电路板,软件部分——系统核心zImage,文件系统XXX.cramfs(文件系统中包含了项目开发发布的驱动程序和应用程序)。
硬件的nandflash决定了最大的硬件空间64M,通过分析现有的优龙文件系统,其压缩后的格式YL2410_camare_demo.cramfs, 其具体大小为27M。但在系统中解压缩之后,已经大到57M左右,基本上将硬件空间占满,但仔细观察其内部文件夹的结构,系统运行必须要的文件夹只有10M左右,而且还有再裁减的空间。而最多的Nanndflash空间,为优龙所开发的QT应用和库所占据,有50M左右,同时在其中QT库只占了10M左右。
可见,最后裁取优龙开发的QT程序,核心所必需的系统文件与QT程序必需的库文件总共需要20M左右的空间,剩余的44M左右空间,应该能够满足驱动移植和QT应用程序的空间需要。
另:在Linux下挂接目标机文件系统的命令如下:
mount YL2410_camare_demo.cramfs /root/filesystem –o loop
挂接之后进入filesystem文件夹就可以看到文件系统所有文件。
另:程序的自加载和自运行问题:
对于驱动程序的自加载,通过阅读资料和跟踪启动过程,已经找到一种方法:
可以通过修改根目录下的Linuxrc文件,在其中加入一条语句,就可以实现驱动的自加载运行:
/bin/insmod  /usr/spca5xx.o      (假定摄相头驱动放在了 /usr目录下)
这样,系统启动之后就会加载此驱动(此方法已通过实验,自加载成功)。
对于QT程序的自加载方法,用户手册有详细的描述,不在此叙述。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/24981/showart_190417.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP