阅读:1369回复:2
2个月Linux行后感
最近无事,花了2个月的时间去Linux下玩,有些所得,特写出来给大家分享一下。由于我以前从来没有用过Linux,也仅仅是研究了2个月,很多东东可能是错误的,请大家指正。
我用的OS是Redhat 9.0和Fedora Core 1。 1。在Linux下做驱动,最好编译自己的内核。虽然没有看到说这一步是必须的,但好处是有的,最少可以避免兼容的问题。不过,编译内核却是一个非常麻烦的事情,像我这样的新手,花了3个星期,才从2.6.0-test8到2.6.0-test9,最后到2.4的所有版本都轻松搞定。 2。LDD2的代码和Makefile/Rules.mak都是针对2.4的,如果要编译2.6的,需要修改。对USB驱动来说,不仅仅是代码要修改,Makefile也要改(具体修改的方法,还没有来得及看。xixi :D) 3。没有搞清楚是从2.4的某个版本开始,还是从2.6开始有一个Hotplug的功能。没有来得及仔细研究这个玩艺儿到底有什么用处,但似乎是和Windows的PnP差不多,只是不知道对USB的支持到底是怎样的。 4。虽说在很多kernel下,插一个U盘可以成功的使用,但如果是自己写的一个USB驱动,得手动加载 - 不管是在设备插入前,还是插入后。似乎也可以实现自动加载,但可能是要把驱动的代码加入到source tree里面,重新编译内核;但这个方法我没有试过,不敢妄下定论。 5。单单加载一个driver是没有用的,如果想app可以访问,还要用mknod来建立一个联接。不过,我对那些Major/Minor还是有点迷糊 :P 6。Linux对USB的支持似乎没有Windows好,由于没有时间做更多的测试,这个结论不一定准确。我有一个USB/1394的硬盘盒子,在RedHat9上用的很好,后来换到Fedora Core 1和2.6下都不能用。还一个USB板子,枚举也不行,而在Windows下却正常。 不过,在此倒是发现了Philips的那个D12 Demo的firmware中的一段bug - Linux在枚举的时候,第一次读8个byte的device descriptor,然后接下来读全部的device descriptor。而看Philips的代码中,永远是发送全部的device descriptor。由于很久不搞USB了,也忘记了Windows下枚举的过程,似乎当中有一个reset吧?由于没有时间研究,就放弃了。 7。在Linux下,不用太担心当机的问题。曾经碰到一个错误,要是在Win下肯定BSOD了,而Linux只是出来一个oops,其他的一切照常。看来在Linux下做开发,得心脏病的几率会很小啦!:D 不过,有个问题却没有搞清楚,就是那个error产生的原因,不知道是gcc的设置问题,还是kernel运行的问题,哎:( 8。Linux的调试器真的不敢恭维。gdb功能很强大,却是命令行的,有几个GUI前端,研究很长时间结果发现不能和kgdb相连,遗憾。kdb比较类似softice,但不能调试source,只能对asm,也甚是不方便,除非本来就是用asm写的代码。所以,最常用的还是printk :) 9。Linux下的体系真的很复杂,每个人都可以修改,所以发行一个软件最好的办法就是以source来发行,由用户根据自己的平台去编译,这样可以可以避免诸如不能运行/出错之类的情况发生。可是,这样的一个方式并不是每个开发商愿意接受的,有些代码本身就是机密的,或者是受其他license约束。所以,以后我在决定开发Linux下的项目时,肯定要考虑怎么发行,是否可以赢利肯定也是最主要的因素 - 不解决温饱,怎么做雷锋? :D 晚上不睡觉,上来随便写一些,算是对这一段日子的一个纪念吧! 大家给我纠正一下错误 :D [编辑 - 11/27/03 by rayyang2000] |
|
最新喜欢:mapofl
|
沙发#
发布于:2003-11-27 09:12
hehe,不错。
linux做内核程序就是因为兼容的原因头疼。linux不象win那样能保持内核接口的相对不变性。 它是喜欢怎样就怎样,所以每个版本都不同。这样也有好处, 可以提供最好的实现和最好的性能。不过对于开发者来说就是恶梦了。 还好,应用程序不用大改。俺最近也只是在做应用程序。 用熟悉了,linux还是不错的,可以绝对控制它,比当年在dos下的感觉还好。(谁让咱当年没有dos的源码呢? )你如果不明白,可以参看源码。让起几年前一个清华的哥们说的: 在win下拼的是谁文档多,在linux/unix下拼的是谁有创意:) |
|
|
板凳#
发布于:2003-11-27 09:31
不过,linux的实时性,还是要逊色点。
还要大家的共同努力呀! 大家有空可以去embed.com看看吧~ |
|
|