Chinaunix

标题: Linux系统移植从零开始!参与讨论即有机会获得图书一本!(获奖名单公布!) [打印本页]

作者: send_linux    时间: 2011-01-20 11:31
标题: Linux系统移植从零开始!参与讨论即有机会获得图书一本!(获奖名单公布!)
获奖者名单公布,请大家将个人联系方式站内发送给风铃之音,我们将安排获奖图书的投递工作!
amarant (h)
EZWORD (vs复仇之魂)
0vk0
zhengfish
omycle
pekinese
aility
shenlanyouyu (深蓝)
lvc2linux
foxzenith
学习linux系统的移植,要学习哪方面的知识呢?

一般来说,我们有以下几个部分:

1、了解和熟悉Linux内核和嵌入式Linux系统开发环境搭建;
2、了解和熟悉一个基础的嵌入式系统的组成部分、Bootloader移植、内核移植和文件系统移植;
3、设备方面的驱动移植,包括LCD、触摸屏、USB、网卡、音频、SD卡、NandFlash等流行的设备驱动移植过程;
4、从应用角度出发,包括界面、嵌入式数据库,虚拟机和网络层的协议等等。

系统学习后,我们还需要注意哪些关键点呢?如何才不走弯路?这些也都是我们要关注的。

我们今天有幸邀请到《Linux系统移植》图书作者来作为我们的主题讨论嘉宾,和大家一起来探讨这个话题。



Linux系统移植

作  者刘刚 赵剑川 等编著
出 版 社清华大学出版社
图书定价¥69.00


本书目前在ChinaUnix提供独家试读活动:
·第4章  Linux内核裁剪与移植
·4.2  内核配置选项
·4.3  内核裁剪及编译
·4.4  内核映像文件移植到ARM板
·第11章  SD卡驱动移植
·11.2  SD卡驱动程序分析

活动参与:

1、就以上各种问题,发表自己的看法,提出自己的见解
2、将自己在Linux系统移植过程中的一些想法和经验分享给大家,发表出来让大家一起讨论
3、可以向各位邀请嘉宾提问相关问题
4、还可以针对《Linux系统移植》这本书的内容进行提问

邀请讨论嘉宾:
为了加强讨论,我们计划邀请一些专家参与讨论,(邀请嘉宾还在不断增加中),其中包括:

liugang9931706:图书作者,CU网友
T-Bagwell:嵌入式开发版资深版主,专注于网络及无线设备驱动开发及移植
bitmilong:嵌入式开发版资深版主
dreamice:资深版主,专注于嵌入式网络设备研发
Godbach:内核版资深版主,专注于Linux网络及安全协议


活动奖品:


为了鼓励大家积极参与本次讨论活动,我们将提供《Linux系统移植》图书10本作为本次活动的奖品!
针对某一个会员,有价值的讨论贴达到5贴,将获图书一本。(水贴不计,先到先得)
感谢清华大学出版社提供礼品支持!

欢迎大家积极参与,更欢迎大家自荐为讨论嘉宾。如有任何问题请联系我们。
作者: bitmilong    时间: 2011-01-20 13:07
好活动啊,必须支持!
很荣幸被誉为“嵌入式开发版资深版主”,要是“嵌入式开发资深人士”或专家的话,就有问题了,哈哈。

Linux的开发其实就是移植,工业化的结果是没有人会为做一个产品从头做一套系统,代价太大。

Linux就其免费,开源,资源丰富为开发提供方便,周边很多人都想学习这东西的,但真正会的太少,门槛较PC软件高。
作者: amarant    时间: 2011-01-20 13:51
支持!我新手一枚,冒昧说说自己的经验。
以前在学校实验室做过linux到s3c2410上的移植,
感觉嵌入式Linux系统开发环境搭建并不会复杂,网上资料丰富,花不了多少时间就可以搞定了。
但在bootloader的移植上就非常费时间,当时我们老师说不用自带的bootloader(如果按照资料一步一步来是很容易就能把linux移植上去),虽然网上uboot的资料非常多,图书馆关于这方面的资料也挺多的,但是真要做起来就比较麻烦,当时是卡在网卡驱动上了。。记得最后还是没搞定,悲剧啊。
作者: Godbach    时间: 2011-01-20 14:09
嗯,上学的时候不少都用用 s3c2410 进行学习的。
作者: bitmilong    时间: 2011-01-20 14:23
回复 3# amarant


    像现在系统随时可以升级固件的,一定要有一个很强大的bootloader.
作者: EZWORD    时间: 2011-01-20 14:30
以上为本人闲余时间玩arm的过程。
完全从零开始,当时和另一个网友自己制作了一块arm板,芯片为atmel的9200。整个过程花了两年的时间,所有的原理图,布线,完全都是自己制作。由于硬件问题,其中还进行过一次改版,第二版中仍然存在很多问题,如ddr只能工作在16bit模式下。从bootloader移植,到内核驱动移植,再到文件系统制作,最后再到framebuffer的移植,基本上都动过手,最后在framebuffer移植上出了问题,没有成功移植入内核,个人感觉可能是因为EMI问题,只能在uboot阶段控制lcd显示。感觉移植还是很简单的,多数工作都在阅读数据手册上了。目前这块板子基本放弃了,现阶段要深入的学习下内核方面的东西了。
作者: amarant    时间: 2011-01-20 14:35
回复  amarant


    像现在系统随时可以升级固件的,一定要有一个很强大的bootloader.
bitmilong 发表于 2011-01-20 14:23



    是啊,所以我觉得bootloader这一关移植非常复杂~
作者: dreamice    时间: 2011-01-20 17:30
活动大家要踊跃支持,呵呵!
作者: renxiao2003    时间: 2011-01-20 22:14
本帖最后由 renxiao2003 于 2011-01-22 20:05 编辑

做了近一年(11个月)的Android开发,但从来没有编译过Android的源码,只是限于从应用层编写JAVA程序,对嵌入式Linux的环境搭建真的不是很清楚。支持了。有机会应该坐下来研究一下了啊。
作者: chenyx    时间: 2011-01-20 22:30
同意2楼的说法,Linux的开发其实就是移植.但是现在从头开发代价太大,使用现成的Android,又会同质化严重.
嵌入式的前景非常好,就是是门槛太高了
作者: liugang9931706    时间: 2011-01-20 23:57
楼主的问题确实很难,也很有价值,我的教训一定不能让大家不走弯路,如果能让大家少走弯路,我已经很满足了。大家有什么好的经验和教训也可以拿出来分享。
我说说自己的感受:
其一,要坚持不懈,在我的移植经历中,GUI的移植过程中MiniGUI花的时间最长,另外,驱动的移植过程中,USB2.0的TD上网卡及其PPP拨号程序的移植过程比较长,试过很多种方法后觉得快要崩溃时,估计就离成功不远了,这时候要仔细思考,冷静点,也许就可以恍然大悟。
其二,相应的背景知识了解,比如数据库移植,那么有了数据库知识,可能对于移植来说就容易很多,对于Web服务器的移植,如果了解常见的Web服务器tomcat的配置,那么移植起来也容易很多。
其三,先确定环境,环境包括硬件环境>编译环境>内核版本,如果被移植的驱动或者应用程序对上述环境有要求,那么我建议从硬件到编译器到内核的顺序,先确定硬件,再确定编译器,再定好内核。当环境稳定后再着手移植工作,否则到后来花了很多时间,修改代码,换编译器,打补丁还是不能解决问题,换了硬件才搞定,就会浪费很多时间。
最后,多问,有目的性的问,别人的答案不能直接解决我们的问题,也会给我们一个提示。
最后希望大家能分享自己移植的体会,供我们一起学习。
作者: liugang9931706    时间: 2011-01-21 00:12
本帖最后由 liugang9931706 于 2011-01-21 00:14 编辑

另外,还想提醒朋友们,作为学习的话,应该使用资料比较齐全,使用比较广泛的CPU;如果是做开发,那么一定要选择一家技术支持比较好的CPU厂商。技术支持的存在,就是来被我们烦的,有问题就可以直接打电话,或者发邮件,把遇到的问题截图发过去。当然,在排除了硬件问题后,系统稳定后,就一切都要看你自己的努力了。可以把遇到的问题拿到论坛上来,相信论坛里面潜伏的高手会给你一些提示。如果大家遇到具体的移植问题,如果我也遇到过,我会毫无保留的给大家分享。
作者: 0vk0    时间: 2011-01-21 08:08
从踏入社会一直学驱动开发,原来在尚观学习了系统和U-BOOT的移植,其实自学也得有好的资料

并不是每个人都能仔细的完整的看完每个人在网上写的自己移植的经验,当然网上很多也不全,

动手自己实践更是重要:

1、我想最重要要理解你想移植的系统架构,能知道哪个文件是放在哪个目录,哪些文件与哪些文件

相关联。

2、手动能力,一定要多动手(板子就凭你是烧不坏的);

3、其实网上很多牛人的文章,经验都很重要,要有耐心的一遍一遍去看,也许你移植中的问题就在

某位牛人的博客里面。
作者: 0vk0    时间: 2011-01-21 08:25
还有一个我觉得不能懒惰的地方是:

    像我移植S3C2440,网上直接说的个性在board目录下将smdk2410 目录,修改include/configs/smdk2410.h直接复制为100ask24x0.h。 再修改两个makefile就OK了,其实u-boot远没有那么简单,首先就是CPU(时钟,分频)肯定不一样,而且所给的外部控制硬件也不尽然相同,花相对多一点的时间来读源码绝对不会误了你的事,而且对你将移植的内核也会有很大帮助。
作者: EZWORD    时间: 2011-01-21 09:12

作者: liugang9931706    时间: 2011-01-21 09:41
我记得我第一次一直uboot时花了近一周的时间。我第一次成功移植MiniGUI花了将近一个月的时间,中间一直不成功,有一段时间放了一段时间去弄USB驱动了,回头再来整MiniGUI,晚上很安静的时候来仔细整,发现我在板子上的配置文件中指定的路径(MiniGUI.cfg)和对应文件存放的路径不符合,就这个问题卡了一个月。当时没有注意到这个细节。因为报错总是图形无法正常显示,把注意力转移到配置的内容上了。很多时候,别人的文章,或者书中写的很简单,移植就技术来说,操作上没有太多技术,主要是对于问题的分析比较重要,出了问题,能正确判断是哪个部分出了问题,或者缺少什么模块,少配置了什么模块,分析能力很重要,移植步骤实际是比较简单的。
作者: rick.zhao    时间: 2011-01-21 09:43
支持,正想学习呢
作者: zhengfish    时间: 2011-01-21 09:46
大概可以分为3个部分或者阶段吧:
1,BOOTLoader的移植 ,开源、且成熟的由UBOOT;
2,Kernel的移植,这个方面Kernel源码已经比较成熟了,很多架构的CPU/单板只需要配置,编译就可以了;
3,再就是驱动、应用方面的移植,这个根据业务方向而定,有的应用比较简单,开源代码比较成熟,工作量就小;有的应用复杂,或者开源项目不是很成熟,工作量就可能非常的大。
作者: zhengfish    时间: 2011-01-21 09:49
大概可以分为3个部分或者阶段吧:
1,BOOTLoader的移植 ,开源、且成熟的由UBOOT;
2,Kernel的移植,这个 ...
zhengfish 发表于 2011-01-21 09:46



其中,
BootLoader 和 Board的相关性大一些,需要知道Flash/Memory/CPU的具体SPEC.
Kernel的话和CPU关联最紧密.
应用的移植,之前,还有很重要一块,就是FileSystem的打包制作.....................
作者: 0vk0    时间: 2011-01-21 10:22
本帖最后由 0vk0 于 2011-01-21 10:32 编辑
我记得我第一次一直uboot时花了近一周的时间。我第一次成功移植MiniGUI花了将近一个月的时间,中间一直不成 ...
liugang9931706 发表于 2011-01-21 09:41



    说得很好,其实也就是理解,真正理解了就不是很难了,当初移植从NAND FLASH启动时,一直移植不成功,后来从VIVI源码中才看到人家写的
NAND FLASH驱动,那才叫一个牛,后来慢慢自己也理解了,其实学习移植,也得多参考参考其它源码及前辈写的代码
作者: yan8790511    时间: 2011-01-21 17:43
菜鸟一只,发表点意见

感觉嵌入式也就是个噱头,和普通PC开发区别不大。当然前提是不做平台开发,做应用开发。这点远不如服务器开发有前途。

我是某个培训机构出来的,也是玩2410的,有对开发流程有一点粗浅的了解。很多时候搞内核,搞U-boot,等等平台方案公司都会做好的,应用完全不用去管这个。

我现在的公司做机顶盒中间件的,各种CPU,OS(主流是linux),都得去操心下,反而底层管得少。

感觉做得嵌入式,和普通PC一个样子。
作者: smalloc    时间: 2011-01-21 22:46
不知道自己做的算不算嵌入式.近几年更多的是从人的思维角度看问题.各人有各人不同的理解问题的方式.
特别是对复杂的东西.有的人习惯强记细节条文.有的人习惯提炼一个中心意图.有的人习惯直接感觉接触,多次动手理解.自认为属于第2种.
这些思维差异很难通过后天改变.强行改变后效率也是很低的.
作者: liugang9931706    时间: 2011-01-22 07:58
我也说说我自己对嵌入式的理解,嵌入式是分为两套环境,编译环境即宿主机,运行环境即目标机。所以对于嵌入式有个移植性的问题,针对Linux系统来说,PC平台上运行的软件很丰富,开源的代码很多,我们可以通过自己的修剪和移植将这些代码用于嵌入式Linux设备上,事实上很多企业也是这么做的。最能体现的就是游戏行业,以前的PC游戏,现在有了很多手机版,这些移植越来广泛。
作者: 0vk0    时间: 2011-01-22 10:02
本帖最后由 0vk0 于 2011-01-22 10:04 编辑
楼主的问题确实很难,也很有价值,我的教训一定不能让大家不走弯路,如果能让大家少走弯路,我已经很满足了 ...
liugang9931706 发表于 2011-01-20 23:57



    初读一下此书,感觉 Linux系统移植里的 “4.2 内核配置选项” 写得非常好,很多书要么是很笼统,要么是非常简单,此书的一个优点是:以表格的形式列出内核配置选项,特别是对那些不是很容易理解的选项,给了一个建议选择,很适合像我这种对里面选项很模糊的人,而且看图来说是使用的2.6.29,应该算是非常新的内核了。像其它同类的书,很多都是以2。6。10内核来做,虽然可能对低层没有什么大的影响,但上层应用如果是自己来做的话,还是有一些改动。另外此书截图也很多,确实是一本入门的好书。
作者: omycle    时间: 2011-01-22 10:17
本帖最后由 omycle 于 2011-01-22 10:25 编辑

我个人感觉,作为新手的学习,如果资金不是很充裕的话,不要买开发板。

现在的模拟器有QEMU和SKYEYE。能够模拟常用的开发板。如果购买开发板,一方面增加自己的经济负担;另一方面,买了开发板,会出现各种各样的实际问题,会干扰新手的学习效果。举一个常见的例子,移植内核后,需要用到根文件系统,一个很常见的根文件系统是qt,而qt的根文件映像一般都大于64MB,而市面上新手学习用的开发板一般都是64MB的nand.另外一个就是如果使用开发板,bios的移植就很花费时间,楼上的同学都提到u-boot vivi之类的,而如果采用了模拟器,就可以直接入手移植os了,我想os是我们移植的重点。在新手阶段,最好不要碰bios这一块。当然,熟悉嵌入式系统之后,开发板是一定需要的。

另外对于系统移植,最主要的是内核移植,最常见的是驱动移植。而对于内核移植,只要能读懂datasheet,基本上也没什么问题。而对于驱动的移植,多看看书,熟悉一下基本的原理,对C语言熟练,基本上就没有什么问题。对于书籍,推荐两本:国内宋宝华的书和LDD。

除此之外,对于应用的移植,我想这一块不属于新手的范围。
作者: omycle    时间: 2011-01-22 10:22
本帖最后由 omycle 于 2011-01-22 10:23 编辑

回复 21# yan8790511


    同学,等你看看嵌入式系统结构和PC的系统结构再说他们的区别大不大,好吧。

嵌入式是噱头???你真厉害。
作者: zhangsuozhu    时间: 2011-01-22 10:31
那么我到底应该从哪里入门呢?这本书是入门级别的还是提高级别的?

我目前对嵌入式很感兴趣! 也许不久,CU的嵌入式里又添新丁了!

还有,T-bag是不是传说中的九剑兄呢?就是写很早在愽客里写linux netfilter知识的大虾。我对此君甚是仰慕。
作者: 0vk0    时间: 2011-01-22 11:17
我觉得还是买一块开发板开发比较好:

   1、驱动方面的开发,很枯燥,如果有自己的开发板,当成功做出相对应的驱动时会有相应的表现,这种时刻很兴奋。
也会激励初学者进一步学习。
   2、当学到一定的时候,可以尝试自己焊接开发板上一些硬件,毕竟,硬件的了解和学习对一个驱动开发工程师来说
也非常重要。
   3、要进入开发也并不是很难,“bios的移植就很花费时间”,我觉得这点时间是很值得花费的,如果你花了这点时间移植
不仅对接下来的会觉着类似,而且会对启动过程有更深刻的理解,要想进入驱动开发,面试时也很大程度会问到启动过程。
作者: renxiao2003    时间: 2011-01-22 12:51
同意2楼的说法,Linux的开发其实就是移植.但是现在从头开发代价太大,使用现成的Android,又会同质化严重.
嵌 ...
chenyx 发表于 2011-01-20 22:30



    其实主要是看做什么。如果只是做嵌入式应用层的开发也不是很难。比如Android就是使用Java语言开发。但是如果要涉及底层的东西就比较难了。
作者: send_linux    时间: 2011-01-22 23:33
那么我到底应该从哪里入门呢?这本书是入门级别的还是提高级别的?

我目前对嵌入式很感兴趣! 也许不久, ...
zhangsuozhu 发表于 2011-01-22 10:31


t-bag是tbag,九剑是九剑,两个人,呵呵
作者: pekinese    时间: 2011-01-23 00:16
从楼主对书本内容简介可以看出,该书比较全面、详尽地讲解了LINUX嵌入系统开发的技术细节,应该是本不错的教材或参考资料,尤其是针对初学者,的确会少走不少弯路,不会再像我最初踏入LINUX嵌入系统时那样的无助和迷茫。
很期待能尽早地分享到作者辛勤耕耘的成果!同时针对工作中遇到过的一些问题,想向作者了解一下书中是否会有讲解或探讨,这些问题可能比较“水”,但我想不少项目发开者都会遇到的,问题暂想到、归纳以下几点:
1、书中讲解bootloader,应该会有uboot吧?以前使用惯了vivi,感觉uboot使用过于灵活以致于繁琐,主要表现在每次烧写的命令和过程都让人反感,至少会让我这种用惯了vivi的用户反感。由于uboot是开源的,不知作者是否有对uboot的源码进行功能精简等展开探讨?
2、是否有针对PPC和ARM这两种流行处理器进行对比式移植讲解?
3、应用部分的章节,有关于miniGUI的内容吧?miniGUI挺好用,之前部门一高手指导了一下,没几天就能把它用起来了,可惜他已经跳去了HW。做些小应用还是力推miniGUI!
作者: liugang9931706    时间: 2011-01-24 08:16
本帖最后由 liugang9931706 于 2011-01-24 08:19 编辑

pekinese,谢谢你的提问,其实我在linux系统开发方面也不是什么高手,对于系统移植来说本身就是针对初学者的。只要有奋斗精神解决一个又一个问题,积累经验菜鸟也会变成老鸟。先回答你几个问题吧。
1、书中主要介绍了uboot和vivi,主要介绍了bootloader的启动部分,讲解这部分会让读者清楚系统的发布和系统调试时使用的bootloader不同的工作模式。而且,对于自己少量修改是有必要的,其中有关分区,支持的分辨率这些参数可能会自定,因此了解bootloader是有必要的,对于vivi的话,一般是针对三星的开发板。uboot功能相对强大些。
2、很遗憾本书没有针对PPC和ARM的移植做相对讲解,我本人也没有PPC的实际移植经验,手头上没有PPC开发板,也不能做实验,PPC成本相对ARM偏贵,对于自学的话,考虑成本问题,没有买PPC开发板。本书的例子都是在ARM开发板上实验的,有2440,9g45,9260等。如果以后拿到PPC板子,我会将VoIP、数据库、Web服务器等都移植一遍。
3、MimiGUI本书讲了其详细移植过程,我还专门做了视频介绍,因为这个我花的时间比较长,因为有个项目就打算用MiniGUI的,比较的方案中就设计QT、MiniGUI和嵌入式浏览器的结合。
作者: ckf513728912    时间: 2011-01-24 08:51
要,要,要,要,要,要,要
作者: ckf513728912    时间: 2011-01-24 08:59
努力当中
作者: 0vk0    时间: 2011-01-24 17:35
pekinese,谢谢你的提问,其实我在linux系统开发方面也不是什么高手,对于系统移植来说本身就是针对初学者的 ...
liugang9931706 发表于 2011-01-24 08:16



    我觉得这不是书的问题,作者liugang9931706 已经针对ARM开发板上写了很详细的移植过程,是来引导读者自己动手移植的,而且像移植类
都需要有大量的经验,很多程序,像U-BOOT,LINUX内核,文件系统都是相类似的,这些并不是一本书能解释的,板子上的硬件也是千差万别,
《Linux系统移植》只是为了让大家更好的走向驱动开发,不走弯路。
作者: dreamice    时间: 2011-01-24 22:37
我觉得这不是书的问题,作者liugang9931706 已经针对ARM开发板上写了很详细的移植过程,是来引导 ...
0vk0 发表于 2011-01-24 17:35



    思路引导是最重要的,很难有一本书可以解决实际系统与应用的所有问题。
作者: wugang2002    时间: 2011-01-25 10:26
我刚买了这本书,发现光盘里面没有源码,怎么回事阿
作者: liugang9931706    时间: 2011-01-25 11:21
本帖最后由 liugang9931706 于 2011-01-25 12:41 编辑

内核的源码,开源的web,数据库,uboot等都可以在网上下载到。这些都是开源的代码,如果是作为学习的话,是没有问题的。如果放在书中,我不知道会不会侵权,当时就没有放入。还有一些软件,特别是烧写工具等,也可能涉及到侵权的嫌疑,请大家谅解。其实这些开源代码在网上容易下载到。工具也可以弄到,如果大家有需要,也可以通过其他方式得到的。
作者: wugang2002    时间: 2011-01-25 12:34
但是书中给出的一些示例代码没有源码,比如20.7 RTP协议里的发送RTP和接收RTP示例就没有源码,能否给我发送邮件把这些网上没有的源码发给我呢,谢谢。
email:wugang1218@gmail.com
作者: liugang9931706    时间: 2011-01-25 12:40
本帖最后由 liugang9931706 于 2011-02-07 22:01 编辑

好的,我先看看我的本本上面有没有,如果有的话,今晚就可以发给你,如果没有的话,我估计要一段时间才能发给你,目前,我不在家。春节来后再发给你行吧。

邮件已经给你发了,接收和发送程序就在linphone包中oRTP\src\tests路径下。我把整个linphone包给你发送过去了。
作者: renxiao2003    时间: 2011-01-25 15:41
要做LINUX的移植,可能C语言是最基本的功夫了。我看过LINUX的内核(只看了个头),就头痛的放弃了。C语言,我一直很怕的啊。呵呵。
作者: chenyx    时间: 2011-01-25 15:43
回复 41# renxiao2003


    C语言确实很难学习
作者: Godbach    时间: 2011-01-26 09:02
会C 语言应该是基本功啊:wink:
作者: amarant    时间: 2011-01-26 09:14
要做LINUX的移植,可能C语言是最基本的功夫了。我看过LINUX的内核(只看了个头),就头痛的放弃了。C语言, ...
renxiao2003 发表于 2011-01-25 15:41



    看内核难点绝对不是c语言..
作者: notion001    时间: 2011-01-26 17:47
这本书不错,驱动,很难啊
作者: 0vk0    时间: 2011-01-26 17:49
我觉得看内核不仅仅是要看C语言功底,更重要的是要看自己有没有耐心,有没有决心去看完,内核结构初看起来比较复杂,但真正坚持一断时间后,你会看到自己看内核的速度是越来越快,到了这个时候,相信你对内核熟悉已经不远了。我觉得39楼这位兄弟可以看一下网上的其它源码,liugang9931706 写的书重在教你怎么去写驱动,很多时候写驱动就得自己多摸摸,多动手。我觉得你要是跟着书的进度走,学完第20章 VoIP技术与Linphone编译 ,应该再下一节,就没有什么多大的问题了
作者: renxiao2003    时间: 2011-01-26 21:50
回复 44# amarant


    是啊。但是如果你连C语言也不会,就别看了。
作者: renxiao2003    时间: 2011-01-26 21:51
回复 42# chenyx


    大学时学C语言都是勉强过的。那年C教师升院长,一高兴全放行,我是60分过的。
作者: chenyx    时间: 2011-01-26 21:57
回复 48# renxiao2003


    运气比较好.
   C语言难学是公认的
作者: steven_sfb    时间: 2011-01-27 14:44
我是一个学通信,干电子,爱好做软件的工程师。从别人怂恿着开始用周立功的ARM7算起,也有5个年头了。对于莘莘学子们来说,这是个泥潭。你会恨死windows,让你错过了那么多的东西!
一点点的摸索,接触shell的不知所措到现在的熟练运用,总是觉得别别扭扭。看了鸟哥的私房菜,被他絮叨的风格所感染,现在带的徒弟,都说我爱絮叨
作者: snow888    时间: 2011-01-27 17:01
俺也想得这个书啊
作者: aility    时间: 2011-01-27 17:58
现在的电子产品里面的功能,大部分都可以找到现成的,或者半成品。 那么首先,就要移植,但是我看到大部分的书籍,都是求内容的全面。 针对一个实战项目,从头到尾的移植,没有看到过。 其实一个产品,从头开始立项到产品的完成, 这些移植的内容都用到了,我们如果可以按照书上的步骤,一步一步,做出一个产品来, 那效果及成就感就比较大了。
作者: 0vk0    时间: 2011-01-27 19:16
现在的电子产品里面的功能,大部分都可以找到现成的,或者半成品。 那么首先,就要移植,但是我看到大部分的 ...
aility 发表于 2011-01-27 17:58



    针对一个实战项目,从头到尾的移植,与其说是跟着书上的步骤来,一步一步移植,不如说是跟着书的思想,

加上慢慢理解和实现其功能,真正理解了才是书的存在的意义……
作者: renxiao2003    时间: 2011-01-28 12:21
回复 49# chenyx


    可不是怎么的。要不还得补考。这就造就了我大学一门课没有挂过的佳绩。但是唯一不爽的是大学一年级就背了个严重警告,战战兢兢的度过了后面三年的大学生活。最后拿了毕业证和学位证。
作者: newbuding    时间: 2011-01-29 08:29
以上为本人闲余时间玩arm的过程。
完全从零开始,当时和另一个网友自己制作了一块arm板,芯片为atmel的920 ...
EZWORD 发表于 2011-01-20 14:30



    atmel的9200 支持 ddr 吗?没听说过
作者: aility    时间: 2011-01-29 10:40
回复 53# 0vk0


    理解书的意思,跟实际项目,差别还是很大的。
就像会一个东西, 跟用会的东西,做一个产品是2码事。

当然通过书籍去学习, 再通过实际项目能够理解更透彻。 不然现在linux的培训班也不会这么火爆, 为什么, 因为大多数培训班, 里面都要做一些实践项目。我跟一些培训机构的老师,也聊过这些事情, 其实有的时候通过书本,很多东西,是会遗漏, 有的人基础好, 有的人基础薄弱一些, 千差万别, 所以都会留一些问题,让学生课后去了解。书本上不可能都讲解道。

所以如果通过实际产品项目, 一步一步走过去, 在不同阶段,解决不同问题,都可以会让读者一下醍醐灌顶,并让读者对整体产品,有一个整体的概念。
作者: yan8790511    时间: 2011-01-29 16:32
本帖最后由 yan8790511 于 2011-01-29 16:45 编辑

回复 26# omycle


    我的前提是做应用开发,不是底层开发,那个肯定不一样,公司的嵌入式浏览器(非webkit),四百万行代码,一样vc开发的,交叉编译之后,嵌入式平台就能跑起来,应用开发嵌入式和pc有什么区别?
作者: 0vk0    时间: 2011-01-30 08:27
回复  0vk0


    理解书的意思,跟实际项目,差别还是很大的。
就像会一个东西, 跟用会的东西,做一 ...
aility 发表于 2011-01-29 10:40



    所以我一直说要多手动,其实要做驱动,一定要把那份DATASHEET通读一遍,像我同学就是把它打印出来,天天拿手上

看不说对驱动的理解吧,对英语的阅读都是件好事……呵呵……

理解书的意思,跟实际项目,确实差别很大,这也是我说作者写这本书是来引导我们。在深圳,有一年工作经验的和没有工作

经验的,那都是相差很大的(面试的时候)。
作者: chinesedragon    时间: 2011-01-30 09:30
没学过嵌入式
作者: weiguixm    时间: 2011-01-30 10:25
入门水平,感觉linux移植主要是在驱动上面吧,不知道说的对不对。
作者: liugang9931706    时间: 2011-01-30 13:19
入门水平,感觉linux移植主要是在驱动上面吧,不知道说的对不对。
weiguixm 发表于 2011-01-30 10:25



我对Linux移植的观点,移植分为很多层面,一般将系统分为:
应用层
操作系统层
驱动层
bootloader
硬件层
除了硬件层外,其他每层都可以根据需要进行移植,移植的需求完全根据实际项目的需要,而且它的依赖关系是从上到下这样依赖的。而移植的顺序则是从下到上的。比如,要做一个无线上网卡,那么在应用层必须移植拨号程序;内核层必须添加对这些拨号协议的支持;驱动层移植时,应该确定对该设备的通信接口进行支持(例如串口、USB口);当然,我想说的是,要真正成功让你的上网卡能正确上网,可能还要其他驱动支持,比如对LCD的支持,对浏览器的支持等。

最后祝大家春节愉快,合家欢乐!!!
作者: Mryang8617    时间: 2011-01-30 13:42
{:3_201:}移植小白真没啥 这概念
作者: wocao11011    时间: 2011-01-30 19:21
问题描述:

   两台同型号的服务器(两台机器上运行HA,通过HA来监控他们的应用以及Oracle数据库)由于用户操作不当,造成一台服务器无法正常关机(能关闭内核,但不能关闭电源),尝试了在内核中加入电源管理的参数,仍然不能解决。更郁闷的是用户没有安装光盘,无法重装系统,那么唯一的办法就是把另外一台机器上的根分区移植到这台机器上。

解决方法:

   本想使用dd来拷贝根分区,但无奈硬盘空间不够,所以只有使用tar来备份了,tar的方法其实很简单,但像根分区下的一些/proc、/sys、/tmp、/dev这应该排除掉,其次oracle这些应用软件的安装目录也不需要打包(太大),因为tar好像最大只支持8GB的单个文件。当然tar文件存放的目录一定要排除掉。具体命令如下:
#tar zcvf /Bak/root-bak.tgz --exclude /proc --exclude /sys --exclude /tmp --exclude /dev --exclude /Bak --exclude /ora_data /


待tar命令完成后,将tar包拷贝至移动硬盘上。现在就可以转到另外一台机器来操作了,在执行恢复操作前,建议将这台机器上的Oracle等应用程序安装的目录以及一些重要的数据先备份。然后通过光盘引导至rescue模式,在这里需要注意的是,在进入rescue模式之前,一定要先将硬盘硬盘插上,否则进入rescue模式后系统不会自动添加USB驱动。其次在进入rescue模式的过程中,要选择“SKIP”跳过根分区的挂载。接下来的操作就是格式化根分区再将tar解开到根分区上。具体命令如下:


#mkfs.ext3 /dev/sda1

然后,挂在新的文件系统并还原操作系统。

#mkdir /newsystem
#mount /dev/sda1 /newsystem
#mkdir /bak
#mount /dev/sdb1 /bak
#tar zxvf /bak/root-bak.tgz -C /newsystem
#chroot /newsystem
#grub-install /dev/sda


开始我以为做到这一步查多算完工了,但是重新启动的时候报kernel panic的错误,提示不能挂载根分区,后来我将/etc/fstab、/etc/grub.conf文件中的LABEL全部该为实际的分区名称,并重做initrd:

# cp /boot/initrd-2.6.25smp.img /boot/initrd-2.6.25smp.img.bak
# mkinitrd /boot/initrd-2.6.25smp.img 2.6.25smp


最后重新启动OK,能正常进入系统,也能正常关机了。把备份的Oracle以及应用再恢复回去,并启动HA,一切OK!
作者: wugang2002    时间: 2011-01-30 21:02
63楼

你发的好像和嵌入式移植没关系吧
作者: wocao11011    时间: 2011-01-31 17:43
回复 64# wugang2002


    不能PC移植,只是嵌入式啊,可能我看错了,失误
作者: renxiao2003    时间: 2011-02-02 19:31
嵌入式的LINUX是不是只做内核和简单的一些工具就可以了。不用像PC的LINUX那样做得那么强大。
作者: 300second    时间: 2011-02-02 22:02
好活动啊,将来一定有大应用啊
作者: renxiao2003    时间: 2011-02-05 21:26
回复 67# 300second


    嗯。现在嵌入式的发展确实不错。
作者: CN薰様    时间: 2011-02-05 21:36
本帖最后由 CN薰様 于 2011-02-05 21:44 编辑

嵌入式其实也并非那么难学。
主要是因为环境不大好找,还有就是开始要有一个好点师傅带一下。之后的工作其实就是平台移植,因为大部分的工作在X86下面已经做的非常好了。我们主要是做一个交叉编译而已,包括驱动和用户层软件。

bootloader主要采用u-boot,如果开发板按照公版设计的话实用默认配置或者在默认配置的基础上在裁剪出最小配置基本上都能启动。需要改的无非是增加以下3点
1. 公版没有的网卡支持(其实就是增加一个define),能有tftp就可以,实在不行可以用loadb,只是速度慢而已
2. flash芯片驱动(也是增加几个define)提供存储以及从flash启动
3. 配置从flash加载内核和根文件系统,启动系统

目前linux kernel中基本包含了所有常见的芯片驱动。所以自己不需要太费力。自己只需要修改设备基地址、R/W底层函数、中断就可以了,编译后一般都能正常运行。实在不行可以google或者找芯片的技术支持解决。
有点难度的就是一些专用的芯片,比如加解密芯片,或者FPGA、CPLD的一些控制逻辑。这些东西就需要看相应的CPU、芯片手册,时间长了也就熟悉了。

根文件系统基本上就是实用busybox做一个最小系统。

至于做嵌入式的应用层开发其实和x86是一样的,仅仅是换一个编译器而已。

上面就是给大家的一些参考
作者: wugang2002    时间: 2011-02-08 16:26
69楼

你的口气好大阿
作者: 0vk0    时间: 2011-02-09 09:35
69楼说的只是简单的移植,如果真正想做好,还得会调优

咱们追求的不是能用就行,而是怎么让硬件发挥其最大的利用价值,简单的改名,define谁都会,

关键高手是怎么出来的,就是在不断进行调优,尝试中出来的
作者: CN薰様    时间: 2011-02-09 19:56
回71楼

硬件发挥其最大的利用价值。无非就是追求最大的速度。

这个东西在整个硬件设计的时候就是应该考虑的,比方说双总线会比单总线快,共享中断与串行中断的比较。百兆网卡最多也就能跑97-99%的速度。如果想跑200M的话就需要加2个网卡。本地总线几百兆的速度顶天了,PCI也不过66、133,如果想要求更快的速度就去寻找PCIE之类的高速总线。

目前来说硬件和驱动部分基本都能达到芯片的设计速度。真正的优化是在应用层做的。而这个无论是嵌入式还是非嵌入式都是一样的。
作者: mychz2011    时间: 2011-02-10 15:52
我买了这本书来看过了,有广度,深度不够。和<<嵌入式Linux完全开发手册>>相比,只是面要广一点。
作者: 0vk0    时间: 2011-02-10 16:28
回72楼
           硬件和驱动部分基本都能达到芯片的设计速度那是别人都把驱动做好了,

就单单一个bootloader移植,从2410移植到2440要想移植好也不是三下两下就能

搞定的事; 相反,当你把驱动做好了,应用层才能发挥更好的作用,无论上层如何

优化,最终结果还是在调用驱动上面
作者: liugang9931706    时间: 2011-02-13 14:28
本帖最后由 liugang9931706 于 2011-02-15 14:12 编辑
我买了这本书来看过了,有广度,深度不够。和相比,只是面要广一点。
mychz2011 发表于 2011-02-10 15:52



    移植的书或者文章很容易看懂,就容易上手,如果写为什么要这样移植,就成了原理性的文章了。
mychz2011觉得应该往哪方面深入点,可以举个例子,比如X86上的程序移植到ARM上,讲解交叉编译,移植相关库和资源外,简单介绍移植后的应用外,还可以在哪些方面深入下去?
作者: 2007robot    时间: 2011-02-18 22:59
总有一种茫然
作者: 2007robot    时间: 2011-02-19 11:19
现在还在做毕业设计,也是用的S3C2410!
作者: myqthj    时间: 2011-02-20 12:16
这活动很好,我接触LInux不久,自学嵌入式,在移植Bootloader和内核出了问题:Bootloader移植成功了,可内核移植不进去,在网上了解到是内核机器码问题,可检查机器码是对了,不知问题出在哪里。不知这本书有关于这方面介绍吗?
作者: 0vk0    时间: 2011-02-21 10:16
Bootloader移植是完全移植么,不是只用2410改改名字就成2440了吧
作者: ywf851207    时间: 2011-02-22 12:49
我做嵌入式的 现在进了事业单位 现在嵌入式只能当爱好了 哎。。。。天意弄人
作者: myqthj    时间: 2011-02-22 13:14
这本书有没有详细分析UBOOT代码和内核吗?一般很多新手对UBOOT很不了解。
作者: shenlanyouyu    时间: 2011-02-22 21:37
本科做的毕设是将linux移植到NIOS II处理器上面,那时感觉可以参考资料的很少,就只能参考一些linux在ARM移植的资料。其实linux在不同处理器上的移植大同小异,主要是希望能把基本原理性的东西讲懂,不仅仅是说怎样做,而是也要告诉初学者为什么这样做,“授鱼不如授渔”,期待这本书能给予全新的学习体验!
作者: shenlanyouyu    时间: 2011-02-22 21:47
我觉得还是买一块开发板开发比较好:

   1、驱动方面的开发,很枯燥,如果有自己的开发板,当成功做出相 ...
0vk0 发表于 2011-01-22 11:17


   的确,对于初学者,看书是必须的,但是动手实践意义更大。购买一个开发板,在实践中不断加深对理论的理解,会收到事半功倍的效果。IT行业,纸上得来终觉浅,绝知此事要躬行啊!所以购买一块开发板,配合着书籍一起学习效果会更好。
作者: shenlanyouyu    时间: 2011-02-22 22:00
本帖最后由 shenlanyouyu 于 2011-02-22 22:01 编辑

在搭建Linux系统开发环境曾经遇到这样一个问题,安装好编译器,并设置好系统环境,但是编译内核始终会出现一些错误。换了好几个linux操作系统平台,最后在Centos5.1平台下才编译成功。然后一个师弟按照我的方法编译,在同样的linux系统下编译出现了错误,最后才发现问题的症结所在:他安装Centos5.1系统时,选择了定制安装,并没有完全安装。很多初学者按照别人的步骤,在ubuntu上编译内核时,出现一些莫名的错误,甚至连也不能配置内核,关键在于ubuntu系统默认缺少ncurses库、系统开发等相关库,需要自己动手安装。因此,初学者开始时选择一个合适的linux系统也很重要。
作者: myqthj    时间: 2011-02-23 13:57
linux移植还有一点要注意的是,要熟悉目标板的电路。嵌入式学习板的电路一般是ARM公板设计的,移植是多数不会去考虑周边器件驱动问题,而开发用的开发板就不一样了,在移植时多数要注意周边器件驱动。记得我第一次移植uboot到产品开发板就碰到网络驱动芯片驱动不了,之后发现是产品开发板用的网络驱动芯片跟我平时学习用的学习板不一样。
作者: lvc2linux    时间: 2011-02-23 15:54
我是新手,刚学linux系统移植不久。

感觉linux内核移植教复杂,需要移植u-boot、linux内核、filesystem。

我是将2.6内核移植到pxa270开发板,现在到了编译内核阶段,感觉编译内核需要了解很多驱动,还要修改一些

内核源码。我已经来回编译内核,烧写内核无数次,系统还是没有完整。

很希望有一本书能正确的能正确指引我。
作者: myqthj    时间: 2011-02-24 09:29
得第一次移植bootload时总是搞不清楚vivi和u-boot联系和区别,后来上网查了一下才知道Vivi 是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。 Vivi有两种工作模式:启动加载模式和下载模式。而U-BOOT是比较通用的,可以通过修改配置用到不同的硬件平台上去。不知新手们一开始是否也会遇到这个问题,这本书是否有关这问题的讲解。
作者: haichang417    时间: 2011-02-24 11:28
回复 5# bitmilong


   如果从开发角度考虑,有个功能强大的bootloader会事半功倍,但到最终的产品,我觉的bootloader只要引导起Linux就ok了,过多的功能反而会增加系统开销,加长系统启动时间。
作者: haichang417    时间: 2011-02-24 11:30
还有一个我觉得不能懒惰的地方是:

    像我移植S3C2440,网上直接说的个性在board目录下将smdk2410 目录 ...
0vk0 发表于 2011-01-21 08:25



   顶!应该从原理上去弄明白u-boot,而不是按照别人的教程不求甚解的做。做的过程,我们应该了解下为什么这么做!
作者: myqthj    时间: 2011-02-24 13:18
本人认为内核移植难点在menuconfig里的内核选项配置。记得第一次内核移植时对menuconfig里的选项不懂要怎么选择,只是照着教程里的步骤去选择的,碰到板上硬件外设跟公版不一致就不懂要怎么去修改哪些外设驱动了。不知这本书第四章是否有详细介绍这方面知识。
作者: shenlanyouyu    时间: 2011-02-24 21:39
本帖最后由 shenlanyouyu 于 2011-02-27 21:57 编辑

目前几乎所有的教材都是以ARM处理器为平台介绍Linux移植的,其中以S3C2410、S3C2440居多。初学者学习时,也是对照书本,依葫芦画瓢,一步步按照步骤地做,这就带来了一个问题,很多时候是做出了结果,却不知道结果怎样来的,容易忽视了很多细节,当需要将linux移植到其他处理器平台时,就面临了很大的困难。回想起移植linux到Nios II处理器上的痛苦过程,其实当时缺乏一种指导。如果能针对一种平台介绍linux移植的同时,传授移植的方法,需要注意的问题,学习到移植的思想,这样才能灵活运用。期待这边书能带来全新的学习体验,将广大初学者带入linux的大门。
作者: shenlanyouyu    时间: 2011-02-24 21:44
本帖最后由 shenlanyouyu 于 2011-02-24 21:46 编辑

我在linux下3年开发的一些体会:在linux配置编译中,在要求修改原来内核提供的配置文件或者编译文件,要学会备份源文件,备份的方法:就是copy一份源文件,在后缀加上_bk,即backup的意思,例如我要修改/linux-dist/vendors/Altera/nios2nommu/makefile,我需要修改这个文件,要让自己以后更清楚这个文件的用途,因此需要备份这个文件,并另存为ven_Al_nios2_makefile_bk,含义大家一看就知道,路径、文件名和用途都很明了,保存的方法也有两种,一:保存在和原文件在同一目录,二:为自己的工程建一个专一的目录来保存备份文件,具体的方法看自己的习惯,我自己趋向于第二种方法。
作者: liugang9931706    时间: 2011-02-25 16:00
回复 78# myqthj


    我记得我遇到这样的问题几次,我自己做过笔记,好像记得在书中讲提过如何获得正确的机器码的方法,回头我考证下,如果没有在书中提过,我就会把细节贴出来。
作者: liugang9931706    时间: 2011-02-25 19:22
本人认为内核移植难点在menuconfig里的内核选项配置。记得第一次内核移植时对menuconfig里的选项不懂要怎么 ...
myqthj 发表于 2011-02-24 13:18



    书中介绍了内核配置的主要选项,也做了一个最简单配置的示例。对配置选项在视频中作了简单介绍,特别是有关系统调用和进程管理、文件系统等。但是内核配置的选项实在是太多,其配置组合也太多,由于篇幅的限制,不能展开讲,也没有必要。读者学会配置以及了解这些配置的作用就可以自己动手了。在此基础上,读者要自己动手进行操作,编译出自己裁剪的内核,然后写简单的测试用例进行测试,看自己添加的内核达到自己的要求没有。也可以在内核中添加打印消息等等。
   总之一句话,在会使用和了解的基础上,大家把内核多修改、多编译往自己的开发板上多烧写、多测试;也许内核的BUG就被读者测试出来了。
作者: 0vk0    时间: 2011-02-27 17:05
回复 84# shenlanyouyu


    这个嘛,我觉得还是得完全安装,能避免很多事情;等你真正对内核熟悉了,那时候,你可以自己定制系统,以免再发生类似的错误
作者: 0vk0    时间: 2011-02-27 17:11
目前几乎所有的教材都是以ARM处理器为平台介绍Linux移植的,其中以S3C2410、S3C2440居多。初学者学习时,也 ...
shenlanyouyu 发表于 2011-02-24 21:39



    这个嘛,我都说了作者只是引导,真正要做好Linux系统移植还得自己动手

  当你真正从u-boot到移值成功一个真正能用的,具备电路上齐全功能的开发板

  可以说,你与你开始绝对有很大的一个飞跃
作者: shenlanyouyu    时间: 2011-02-27 21:16
书中介绍了内核配置的主要选项,也做了一个最简单配置的示例。对配置选项在视频中作了简单介绍, ...
liugang9931706 发表于 2011-02-25 19:22


看过样章,作者真仔细,已经在书中比较详细地介绍了大部分内核配置选项,例如文件系统、系统调用、网络协议支持、设备驱动等方面,对于读者有很大的帮助,完全能引导我们完成对内核的配置。内核配置涉及方面太多,需要在开发过程中仔细阅读相关资料,在学习过程中实践,才能获得更大的收获。
作者: shenlanyouyu    时间: 2011-02-27 21:25
本帖最后由 shenlanyouyu 于 2011-03-02 20:36 编辑

建立linux交叉编译环境时需要注意一些问题。本书开发环境是建立在Fedora系统上,我们在安装交叉编译器成功后,设置环境变量时需要注意一个问题:在Fedora、RHEL、Centos linux系统中,我们在~/.bash_profile文件中添加路径,但是在Ubuntu系统中,我们却要~/.bashrc文件中添加路径。这些都是我们需要注意的。
作者: rubylc_unix    时间: 2011-02-28 22:06
网上大多是移植到ARM开发板上面的,资料丰富,感觉还是比较简单的。我手上有一块ALTERA的FPGA,用的是NIOSII软核,好像和上面的朋友搞的一样。可能是资料不丰富的原因,搞了很长时间。刚开始还要搭建硬件模块,也就是SOPC,当时那个SDRAM怎么也用不上去,然后才知道是PLL的问题,然后还要在软件包下面修改相应的头文件,最后终于成功了,感觉移植系统还必须进一步的了解部分的练习,特别是整个系统的启动过程。
作者: notion001    时间: 2011-02-28 23:39
建立linux交叉编译环境时需要注意一些问题。本书开发环境是建立在Fedora系统上,我们在安装安装交叉编译器成功后,设置环境变量时需要注意一个问题:在Fedora、RHEL、Centos linux系统中,我们在~/.bash_profile文件中添加路径,但是在Ubuntu系统中,我们却要~/.bashrc文件中添加路径。这些都是我们需要注意的。shenlanyouyu 发表于 2011-02-27 21:25



    本书是在Ubuntu系统中,请看清楚后再回复好么?不要为了要书而来瞎回复


   看完书再正确参与活动,好么?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2