目标:要在ARM9的板子上进行JPEG解码并驱动7寸LCD屏显示.
硬件资源:ARM9+LCD接口
操作系统:ARM-LINUX.
该ARM9板子并不是现在常用的几个芯片,所以移植操作系统方面可能会有比较大的工作量.
我的任务:JPEG解码方面由其他同事负责,我可能需要负责BOOTLOADER,ARM-LINUX的移植,以及USB,SD卡,LCD的驱动.
我目前的能力:
使用ADS在ARM7上编写过不带操作系统的程序,
C语言还过得去,
对ARM7的体系结构有了解,
熟悉PC上的linux使用(仅仅是使用),
学习过linux系统原理(对linux的系统结构有个大概框架).
没有嵌入式OS的经验.没写过驱动程序. E文还凑合.
可能会有哥们说我做这个项目能力不够,但我对这个项目很感兴趣,而且公司上这个项目对我来说可能是个很好的学习机会(请原谅我的自私).
请做过类似项目的兄弟给点建议,我好给老板汇报,自己心里也有个底.
另外,有两个具体的技术问题也请顺便解答一下,目前ARM9的bootloader哪个比较好用? 是不是uboot? 在我的系统中应该使用RAMDISK还是YAFFS? 如果用YAFFS来管理存储代码的FLASH,那么用来存储JPEG图片的SD卡需要用YAFFS来管理吗? 我是想让该SD卡在WINDOWS下也可以读取出已存储的图片.
期盼大家的帮忙^_^. 谢谢.
------解决方案--------------------
按照楼主的资力,应该两三个月完成不是问题!
但是我发现楼主还是有些问题没搞清楚~~~
在描述的过程中存在明显的概念上的错误~~
多看书,不要浮躁就好!
------解决方案--------------------
实话实说:你现在的能力的需要6个月以上,至少
------解决方案--------------------
是你上次说的那个项目吧?ARM9的内核,做JPEG可以,不过要做mp4,那就不行了。
时间方面,最关键的是,这板子是否保证可用? 如果涉及硬件故障, 问题就比较麻烦,时间会变得难以估计。只要是ARM9,那bootloader和内核移植不会有太大问题。SD卡驱动和文件系统较为现成,时间花的也不会多。由于你的芯片比较特殊,因此USB和LCD驱动要花一点时间。如果觉得3个月可以完成,也建议多报一段时间,毕竟是第一个项目。
------解决方案--------------------
呵呵,建议报1.2--1.5倍你认为可以完成的时间,因为在你工作的过程中,有可能会有没想到的情况出现。另外说不定还会有其它的一些事情会来打扰或中断你的工作。
------解决方案--------------------
RAMDISK一般用于那些不需要永久存储的场合,因为在ram中,重起内容就没了。yaffs用在flash上。如果你想让windows也能读你sd上的内容,一定要用vfat文件系统。
顺便问一句,你用的arm9芯片型号是什么?如果没有现成的内核不支持(或找不到支持的patch),自己移植的难度和工作量是不小的!
------解决方案--------------------
主要是lcd那里可能会化肥你不少事件。其他的都应该没问题 。 建议你至少要4个月时间吧。
------解决方案--------------------
说句实话,依据你现在的能力有些困难,感觉你有些基本的概念都还没有清楚。
开发一个新的project,而且是嵌入方面,对于移植OS和写driver,你必须具备了解:linux的内核工作机制,内存管理,中断处理,文件系统,你看看你有多大的把握,当然这些可以边干边学,但是有个前提: 有一个前辈可以指导你,如果这点都没有,如果你不幸碰上内存段问题(驱动中容易碰到),那你慢慢熬吧。
------解决方案--------------------
至少6个月,
------解决方案--------------------
时间多了不一定是好事,我们要经验,所以说不要太久,给自己加压,对自己会有好处的.
------解决方案--------------------
我没有理解你说的LCD控制器的含义。一方面你说: 要求MCU支持LCD屏,一方面又说,用软件实现。
如果说,软件只是实现JPEG解码,那是有现成的C语言代码的,实现起来也不困难;如果你要用一个ARM9的引脚用软件时序来实现驱动LCD(TFT或者CSDN类液晶),那可以肯定ARM9 CPU的能力不够。
------解决方案--------------------
一般来说,移植linux到一款新cpu要做的事情如下:
1. Bootloader:就是能够初始化你的cpu,memory,设定内核需要的参数(tags),把内核从某处拷贝到ram(xip内核除外),然后跳到内核入口,内核自解压.... 通常bootloader你不用自己从头写,找一个成熟的(如u-boot),稍许修改即可。
2. Kernel-Arch specific: 这部分是让内核适应你的cpu体系架构,通常包括mmu管理,cache管理以及其他和体系架构相关的东西(如:浮点协处理器?)。对于ARM体系来说,底下还分很多种: arm7tdmi, arm720t, xscale, arm9??? .... arm10??? 。linux内核对arm家族支持很完备,不过你要根据你的cpu来挑选相应的支持代码。
3. cpu内的外设:集成在cpu内部的外设,这些你要自己编写驱动,至少串口设备的驱动要能驱动起来,这样才好调试。同样,如果你的外设借用了现成的ip核,多半你能从linux内核众多的驱动中找到你所需要的,加以少许修改就能用。
既然你的ic是定制的(可能也就是某一款arm核加上一些定制外设,我猜?),像patch-2.4.0-rmk1.gz这样的patch肯定是没什么用的,而且2.4内核也太老了, 你如果在arm-linux-kernel maillist上问rmk如何移植linux2.4我保证他不会给你任何回答。(大部分提问2.4问题的人会被告知去读FAQ :-)
所以,明智的做法是,参考和你的CPU内核版本相同的CPU,找到现有linux内核对该cpu的支持代码,比较你的cpu和这个cpu有哪些外设是相同或不同,再作些增删.....具体的工作量就要看你的定制ic有什么特别之处了。
------解决方案--------------------
关于LCD控制器的问题,你可以去找一份TFT液晶的datasheet来看。如果你采用地址线输出加其它控制信号的方式驱动的话,你会发现,如果要满足LCD驱动时序,就要要求你的ARM每秒钟处理几百万甚至上千万个的中断。