admin管理员组

文章数量:1531662

2024年7月13日发(作者:)

入门篇

《LINUX权威指南》书不错,写的很全面也比较广,涉及的不深,做为入门书籍不错,可以

比较全面的了解linux 。另外比较热门的也可以看看《鸟哥的私房菜》等书,偏管理类的书。

如果想做server方向的可以找来看看。

驱动 篇

《LINUX设备驱动程序 》就是网上说的“LDD”,经典之作,必备书籍。国产经典《Linux驱

动详细解》也是一本非常不错的书,很实用,书中源代码 分析比较多,基于2440的,对linux

外围驱动有很全面的讲解

内核篇

浙江大学的《LINUX内核源代码情景分析》,外国鬼子的《莱昂氏UNIX源代码分析》还有《深

入理解linux内核》都是出名的经典巨作。另外赵炯的《LINUX内核完全剖析--基于0.12内

核》也非常不错,对内核代码进行了详细的注释,非常有助于对内核的理解和代码的分析。

shell篇

《LINUX与UNIX Shell编程指南》

应用 编程

不用说了肯定是《unix环境高级编程》被称为unix编程的圣经。

TCP/IP篇

《TCP/IP详解》作者d Stevens也是《unix环境高级编程》的作者,牛人出的书没有

一本不是经典的。但是英年早逝,默哀一下。

c语言

《The C Programming Language》正是作者造出来的c语言,书能垃圾就怪了

《c和指针》和《c缺陷和陷阱》两本必备。包含了c语言最容易出错的地方,加深c语言

功力的好材料。

关于算法

《算法导论》

——————————————————————————————————————————

Linux操作系统主要就是一些配置文件和一些命令行工具,要掌握操作系统的主要目录结构

和配置文件,运用系统的命令行工具完成常规的操作系统维护工作,监控工作。进而你可以

安装部署一些企业应用,进行监控、管理等等。

把/etc目录下面常用的配置你都搞懂,把 /bin /sbin /usr/bin /usr/sbin下面常用的命令搞懂

会用shell编写常规的维护脚本

这样你已经非常厉害了。

2

linux 命令必须很熟悉,对,awk必须更熟悉,会正则。

了解unix编程,编译,知道gnu下的很多著名软件并会用。

example:m4,automake,autoconfig,binutils,gcc,...

能熟练试用vi,熟悉

可能的话掌握一种xwin开发方式gtk,qt等。

搞明白文件系统,能掌握50%以上/dev下设备干吗用的,并会用。

能知道/var下都有哪些重要东西。

熟悉/etc下的配置,了解常见的服务的配置

example:

squid,apache,natd,named,ftpd,sshd,xinetd

知道启动的时候unix按哪些顺序启动,并配置服务

C语言。

知道怎么安装软件

不仅仅是pkg_add,rpm,

知道怎样监控进程,网络

知道怎么追踪core

这些都熟悉了,基本算unix初通了,能做个unix初级使用者

看你想达到什么层次了,我个人的理解是:

初级:熟练使用命令、熟悉Shell编程、能配置简单的服务,清楚各类服务相关

的配置文件的位置,

能看懂并可修改系统提供的配置脚本(/etc/*.*)

推荐书籍:

《鸟哥的私房菜基础篇、高级篇》

《Advanced Bash Shell》

中级:熟悉TCP/IP原理、OS原理、熟练使用C语言、Linux系统编程、网络编

程。

推荐书籍:

《The C Programming Language》

《Unix环境高级编程》

《Linux程序设计》

《TCP/IP协议详解卷一》

《Unix网络高级编程》

高级:

《Linux Device Driver》

《深入理解Linux内核》

《深入理解计算机系统》

《深入理解LINUX网络内幕》

上面这些书单中,是我们公司一个玩Kernel的牛人开出的。

任何知识的学习都不是一蹴而就的,需要反复实践,反复理解。

祝你成功!

4

linux业内有句话,《深》为纲、《情》为目。情指的是情景分析,一本经典读

物。情景分析很难,本身也需要读者有一定的天赋。不建议linux初学者阅读,

很容易迷失方向。本身这本书更多是当你遇到问题的时候,希望能深入的探究

缘由,读其中的某个章节。

linux的四库全书

1. LINUX内核设计与实现 Edition2

2. Linux设备驱动 Edition3

3. LINUX内核源代码情景分析

4. 深入理解LINUX内核(第三版)

以上号称 Linux Kernel 四库全书,呵呵.

入门的话看 LINUX内核设计与实现 Edition 2

应用程序开发

查看代码的话,使用Source Insight 3.5

嵌入式Linux入门六部曲《新手请进》

经常在论坛有一些Linux初学者会询问:Linux如何入门?笔者对此给出建议:嵌入式Linux

入门六部曲,希

望能帮助到大家。

技术交流QQ2269819323徐工

第一,学习基本的裸机编程

对于学硬件的人而言,必须先对硬件的基本使用方法有感性的认识,更必须深刻认识该

硬件的控制方

式,如果一开始就学linux系统、学移植那么只会马上就陷入一个很深的漩涡。我在刚刚开

始学ARM的时候

是选择ARM7(主意是当时ARM9还很贵),学ARM7的时候还是保持着学51单片机的思

维,使用ADS去编程,第

一个实验就是控制led.学过一段时间ARM的人都会笑这样很笨,实际上也不是,我倒是觉

得有这个过程会好

很多,因为无论做多复杂的系统最终都会落实到这些最底层的硬件控制,因此对这些硬件的

控制有了感性

的认识就好很多了学习裸机的编程的同时要好好理解这个硬件的构架、控制原理,这些我称

他为理解硬件

。所谓的理解硬件就是说,理解这个硬件是怎么组织这么多资源的,这些资源又是怎么由

cpu、由编程进行

控制的。比如说,s3c2410中有AD转换器,有GPIO(通用IO口),还有nandflash控制

器,这些东西都有一

些寄存器来控制,这些寄存器都有一个地址,那么这些地址是什么意思?又怎么通过寄存器

来控制这些外

围设备的运转?还有,norflash内部的每一个单元在这个芯片的内存中都有一个相应的地址

单元,那么这

些地址与刚刚说的寄存器地址又有什么关系?他们是一样的吗?而与norflash相对应的

nandflash内部的储

存单元并不是线性排放的,那么s3c2410怎么将nandflash的地址映射在内存空间上进行

使用?或者简单地

说应该怎么用nandflash?再有,使用ADS进对arm9行编程时都需要使用到一个初始化的

汇编文件,这个文

件究竟有什么用?他里面的代码是什么意思?不要这个可以吗?

诸如此类都是对硬件的理解,理解了这些东西就对硬件有很深的理解了,这对以后更深

一步的学习将

有很大的帮助,如果跳过这一步,我相信越往后学越会觉得迷茫,越觉得这写东西深不可测。

因为,你的

根基没打好。

不过先声明一下,本人并没有使用ADS对ARM9进行编程,我是学完ARM7后直接

就使用ARM9学linux系统

的,因此涉及使用ADS对arm9进行编程的问题我很难回答^_^,自己去研究研究吧。

对于这部分不久将提供一份教程,这个教程中的例程并不是我为我们所代理的板子写的,

是我在我们

学院实验室拿的,英培特为他们自己的实验箱写的,不过很有借鉴意义,可以作为一份有价

值的参考。

第二,使用linux系统进行一些基本的实验

在买一套板子的时候一般会提供一些linux的试验例程,好好做一段时间这个吧,这个

过程也是很有意

义的,也是为进一步的学习积累感性认识,你能想象一个从没有使用过linux系统的人能学

好linux的编程

吗?好好按照手册上的例程做一做里面的实验,虽然有点娃娃学走路,有点弱智,但是我想

很多高手都会

经历这个过程。

在这方面我们深蓝科技目前没有计划提供相应的例程,主要是开发板的提供商会提供很

丰富的例程,

我们不做重复工作,只提供他们没有的、最有价值的东西给大家。

由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以

下的步骤都是

针对Linux系统的,并不面向WinCE.也许你会注意到,现在做嵌入式的人中,做linux研

究的人远比做WinCE

的人多,很多产家提供的资料也是以linux为主。我一直很难理解,其实WinCE的界面比

linux的界面好看多

了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学

起来简单得多,但

是学linux或者使用linux做嵌入式的人就是远比WinCE多。在和很多工作的人交流时我了

解到,他们公司从

没考虑使用WinCE,因为成本高,都是使用linux进行开发。我读研究生的的实验室中也没

有使用WinCE的,

大都研究linux,也有少部分项目使用vxwork,但是就没有听说过使用WinCE的,原因就

是开源!当然现在

WinCE6.0听说也开源,不过在成本和资源上linux已经有了无人能挡的优势。与此相对应

的是,越来越多的

电子厂商已经开始使用linux开发产品。举个例子,Google近期开发的智能手机操作系统

Android其实就是

使用linux-2.6.23内核进行改进得到的。

第三,研究完整的linux系统的的运行过程

所谓完整的linux系统包括哪些部分呢?

三部分:bootloader、linux kernel(linux内核)、rootfile(根文件系统)。

那么这3部分是怎么相互协作来构成这个系统的呢?各自有什么用呢?三者有什么联

系?怎么联系?系

统的执行流程又是怎么样的呢?搞清楚这个问题你对整个系统的运行就很清楚了,对于下一

步制作这个

linux系统就打下了另一个重要的根基。介绍这方面的资料网上可以挖掘到几吨,自己好好

研究吧。

技术交流QQ2269819323徐工

第四,开始做系统移植

上面说到完整的linux有3部分,而且你也知道了他们之间的关系和作用,那么现在你

要做的便是自己

动手学会制作这些东西。

当然我不可能叫你编写这些代码,这不实现。事实上这个3者都能在网下载到相应的

源代码,但是这个

源代码不可能下载编译后就能在你的系统上运行,需要很多的修改,直到他能运行在你的板

子上,这个修

改的过程就叫移植。在进行移植的过程中你要学的东西很多,要懂的相关知识也很多,等你

完成了这个过

程你会发现你已经算是一个初出茅庐的高手了。

在这个过程中如果你很有研究精神的话你必然会想到看源代码。很多书介绍你怎么阅读

linux源代码,

我不提倡无目的地去看linux源代码,用许三多的话说,这没有意义。等你在做移植的时候

你觉得你必须去

看源代码时再去找基本好书看看,这里我推荐一本好书倪继利的《linux内核的分析与编程》,

这是一本针

对linux-2.6.11内核的书,说得很深,建议先提高自己的C语言编程水平再去看。

至于每个部分的移植网上也可以找到好多吨的资料,自己研究研究吧,不过要提醒的是,

很多介绍自

己经验的东西都或多或少有所保留,你按照他说的去做总有一些问题,但是他不会告诉你怎

么解决,这时

就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保证能解决你的问题,因

为我未必遇到

过你的问题,不过我相信能给你一点建议,也许有助你解决问题。

这一步的最终目的是,从源代码的官方主页上(都是外国的,悲哀)下载标准的源代码

包,然后进行

修改,最终运行在板子上。

盗用阿基米德的一句话:“给我一根网线,我能将linux搞定”。

第五,研究linux驱动程序的编写

移植系统并不是最终的目的,最终的目的是开发产品,做项目,这些都要进行驱动程序

的开发。

Linux的驱动程序可以说是五花八门,linux2.4和linux2.6的编写有相当大的区别,就

是同为linux2.6

但是不同版本间的驱动程序也有区别,因此编写linux的驱动程序变都不是那么容易的事情,

对于最新版本

的驱动程序的编写甚至还没有足够的参考资料。那么我的建议就是使用、移植一个不算很新

的版本内核,

这样到时学驱动的编程就有足够的资料了。

这部分的推荐书籍可以参考另一篇文章《推荐几本学习嵌入式linux的书籍》。

第六,研究应用程序的编写

做作品做项目除了编写驱动程序,最后还要编写应用程序。现在的趋势是图形应用程序

的开发,而图

形应用程序中用得最多的还是qt/e函数库。我一直就使用这个函数库来开发自己的应用程

序,不过我希望

你能使用国产的MiniGUI函数库。盗用周杰伦的广告词就是“支持国产,支持MiniGUI”。

MiniGUI的编程比

较相似Windows下的VC编程,比较容易上手,效果应该说是相当不错的,我曾使用过来

开发arm7的程序。不

过MiniGUI最大的不好就是没有像qtopia这样的图形操作平台,这大大限制了他的推广,

我曾经幻想过与北

京飞漫公司(就是MiniGUI的版权拥有者)合作使用MiniGUI函数库开发像qtopia这样的

图形操作平台,不

过由于水平有限这只能是幻想了,呵呵。

完成这一步你基本就学完了嵌入式linux的全部内容了。

还有一个小小的经验想和大家分享。我在学习嵌入式linux的过程中很少问人,客观原

因是身边的老师

、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样

做有个好处,

就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有

这方面的经验

,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力

就显得非常关

键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是

不行了就自己

去研究,不要一味去等别人帮你解决问题。

记住,问题是学习的最好机会

本文标签: 使用编程系统理解