这样的项目应该给老板报多长时间的工期?

wuh2003   2007-1-11 09:33 楼主
目标:要在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下也可以读取出已存储的图片.
    期盼大家的帮忙^_^. 谢谢.

回复评论 (22)

发错板块了?怎么没人回复啊.
点赞  2007-1-11 11:56
按照楼主的资力,应该两三个月完成不是问题!

但是我发现楼主还是有些问题没搞清楚~~~

在描述的过程中存在明显的概念上的错误~~

多看书,不要浮躁就好!
点赞  2007-1-11 14:47
实话实说:你现在的能力的需要6个月以上,至少
点赞  2007-1-11 15:55

5楼 iyj 

是你上次说的那个项目吧?ARM9的内核,做JPEG可以,不过要做mp4,那就不行了。

   时间方面,最关键的是,这板子是否保证可用? 如果涉及硬件故障, 问题就比较麻烦,时间会变得难以估计。只要是ARM9,那bootloader和内核移植不会有太大问题。SD卡驱动和文件系统较为现成,时间花的也不会多。由于你的芯片比较特殊,因此USB和LCD驱动要花一点时间。如果觉得3个月可以完成,也建议多报一段时间,毕竟是第一个项目。
点赞  2007-1-11 16:10
呵呵,建议报1.2--1.5倍你认为可以完成的时间,因为在你工作的过程中,有可能会有没想到的情况出现。另外说不定还会有其它的一些事情会来打扰或中断你的工作。
点赞  2007-1-12 13:12
kinges() :
你好,感谢回复.你说的明显的错误应该是指RAMDISK和YAFFS的描述吧? 是的这两个东西我只是在网上找到了介绍性的描述.对他们是用来干什么,怎么用还没有个理解.你能给大概说一下吗?
另外也感谢其他兄弟的回复.
ningxin(资深民工):
   是的,还是那个项目.其实老板是想用已有的IC的IP核做一个MCU,但是他不想用硬件实现JPEG解码,而且一直让我考虑用软件实现LCD控制器的功能,说除非软件确实不能才决定在MCU中内嵌LCD控制器.当然IC设计是包给专门的公司做的.目前能确定的是该MCU是要基于ARM9内核,要带USB,SD卡和支持LCD屏.这几天我是呕心沥血的找阿,只找到一片介绍用MCU实现LCD控制器的文章,可还只是个摘要而已.(在我的上一个求助帖中我帖上去了).
   LCD控制器要将原始的图象信息按屏幕的实际显示能力进行缩放,我想这个里边的算法应该是比较难的.就算找到别人的源码,要移植到我的系统中也是不容易的. 哪位兄弟有这方面的信息或者是建议,帮帮忙阿. 憔悴阿.
点赞  2007-1-12 15:45
RAMDISK一般用于那些不需要永久存储的场合,因为在ram中,重起内容就没了。yaffs用在flash上。如果你想让windows也能读你sd上的内容,一定要用vfat文件系统。
顺便问一句,你用的arm9芯片型号是什么?如果没有现成的内核不支持(或找不到支持的patch),自己移植的难度和工作量是不小的!
点赞  2007-1-12 20:39
主要是lcd那里可能会化肥你不少事件。其他的都应该没问题 。  建议你至少要4个月时间吧。
点赞  2007-1-13 21:00
说句实话,依据你现在的能力有些困难,感觉你有些基本的概念都还没有清楚。
开发一个新的project,而且是嵌入方面,对于移植OS和写driver,你必须具备了解:linux的内核工作机制,内存管理,中断处理,文件系统,你看看你有多大的把握,当然这些可以边干边学,但是有个前提: 有一个前辈可以指导你,如果这点都没有,如果你不幸碰上内存段问题(驱动中容易碰到),那你慢慢熬吧。
点赞  2007-1-15 17:20
谢谢大家的回复.
xqxxl(xqxxl)谢谢你的建议,我这边没有人可以指导我.也只能边干边学了,还有能说一下我那些概念没有搞清楚吗?
点赞  2007-1-15 21:58
至少6个月,
点赞  2007-1-15 22:00
时间多了不一定是好事,我们要经验,所以说不要太久,给自己加压,对自己会有好处的.
点赞  2007-1-16 09:00
可以给这么长的时间么?
点赞  2007-1-17 10:18
我没有理解你说的LCD控制器的含义。一方面你说: 要求MCU支持LCD屏,一方面又说,用软件实现。
如果说,软件只是实现JPEG解码,那是有现成的C语言代码的,实现起来也不困难;如果你要用一个ARM9的引脚用软件时序来实现驱动LCD(TFT或者eeworld类液晶),那可以肯定ARM9 CPU的能力不够。
点赞  2007-1-17 13:50
zgz(时光飞逝)
LINUX系统的移植和什么有关系呢? 是不是只要CPU是基于ARM核的就可以使用象patch-2.4.0-rmk1.gz这样的PATCH呢? 还是说和整个包含CPU的那个芯片有关(可以称整个芯片为MCU吧?),如果是和整个芯片有关的话,那我可能找不到相关的PATCH包了,因为我们的芯片是要包给IC公司开发的,所以应该和现在的主流芯片有差别.比如和三星的S3C2410相比,我们的芯片肯定有不一样的地方.
ningxin(资深民工)
是这样的老板是想用ARM9的引脚用软件时序来实现驱动LCD(TFT或者eeworld类液晶),他说除非证明这样是不行的,才考虑在要设计的芯片上加上硬件的LCD控制器. 你说用软件的方法肯定不行,能给说说理由吗? 我直觉上也觉得不行,但给老板说不出为什么不行.郁闷.
点赞  2007-1-19 11:43
一般来说,移植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有什么特别之处了。




点赞  2007-1-20 08:12
zgz(时光飞逝)
     对,你说的很对.我们的IC就是在标准的ARM核上定制一些外设.但还有些问题我不是很清楚,
  我在自己的PC上用patch-2.4.0-rmk1.gz给相应的内核源码进行PATCH,然后就是在make menuconfig那一步选择SYSTEM TYPES和选一些需要支持的模块.这样就可以给某一基于ARM内核的主流芯片(在SYSTEM TYPES中列出的一些芯片)打造LINUX内核了,也就算移植了,对吗? 我看网上的一些文档是这样说得.
  你说的"参考和你的CPU内核版本相同的CPU,找到现有linux内核对该cpu的支持代码,比较你的cpu和这个cpu有哪些外设是相同或不同,再作些增删". 不是指在make menuconfig那一步的配置吧? 你的意思是不是说在内核源代码中找到相近的芯片的支持代码,比如\linux-2.6.10\arch\arm\mach-s3c2410 这个目录下的代码然后修改相应的源代码? 是不是只需要修改这个目录下的代码? 要有能力修改这些代码是不是必须系统学习过LINUX内核源码,比如说认真学习过这本书,还是在网络上找一些相关的文章和资料就可以胜任?
  很感谢大家的回复.
点赞  2007-1-20 13:55
关于LCD控制器的问题,你可以去找一份TFT液晶的datasheet来看。如果你采用地址线输出加其它控制信号的方式驱动的话,你会发现,如果要满足LCD驱动时序,就要要求你的ARM每秒钟处理几百万甚至上千万个的中断。
  
  这样说你可能不太明白,这样跟你解释吧:
  目前的LCD控制器,都是从存储器里去把需要写到LCD数据线上的数据读出来,然后用固定的时序写到数据线上,这样的读写,CPU干涉是很少的,CPU只需要把需要显示的数据写入到内存里,读是通过DMA一类的方式,不需要CPU管理。如果你要采用内核直接处理的办法,就需要内核把存储器里的数据按字节进行读写(ARM是32位,可以一次读4个字节,LCD一般16位到18位,一次能写2个字节),假设你采用的LCD是640*480,每个点是16位的颜色,LCD的数据线是16bit宽度。那么每一屏的数据量就是640*480=30k字,每秒钟通常要求刷新60次以上,也就是每秒钟要有30k*60=1800k次CPU写操作。如果你存储器是32位宽度,那么至少要有900k次读操作。由于LCD的时序严格,每次的操作必须在指定的时间内完成,既没有办法提前,也不可以推后,否则图像就要出错。你觉得你的软件可以实现么?就算你软件能实现,你的ARM还能用操作系统么?还可以完成其它功能么?
  
   你可以看看这几个方面:ARM内核访问存储器需要的时间(内部SRAM也好,SDRAM也好,都一个数量级的,看看读写各需要多长时间);LCD控制的时序;有时间的话可以看看DMA什么的。这样你就明白了,为什么不能用软件做。
  
   很简单一个道理,如果说用ARM内核操作LCD绰绰有余,那么,那些在MCU里集成LCD控制器的人,他们是傻子么?

   不太明白你们老板是个什么样的人。LCD控制器的IP,又不算贵。有钱来设计MCU,却在这地方抠。
点赞  2007-1-20 14:21
For "Porting", there are 'board' specific porting and 'arch' specific porting, your case is 'semi-arch', coz your are using ARM kernel but it's custom IC.

'make menuconfig' won't help you, because you are making your own CPU, it shouldn't already in the linux kernel, but the most source codes you need are there, in linux kernel, you just arrange them up, like others did.

Once you build your own source tree, it's trival to add your options into kernel config system, hence you chose your options by 'make menuconfig'.

In short, you really need to know the kernel better before you start porting kernel to a new CPU.


点赞  2007-1-20 22:02
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复