您的位置  > 互联网

学习嵌入式Linux之前,肯定要有C语言基础

C语言需要学到什么程度? 当然,越熟悉越好。 如果不熟悉的话,还是需要有基本功的。 比如写一个数组排序,输入数字求和等,学习C语言的唯一方法就是多写程序,多练习。 编译有错误没关系,可以自己解决; 执行中出错没关系,可以自己分析。 我以前是用VC练习C语言的,也经常尝试写一些C语言的竞赛题。 都是纯C、纯数学、纯逻辑题,不涉及接口之类的东西,非常适合磨练你的编程能力。 回到主题,首先我们要明白你的目的是什么。 一般来说,所谓的嵌入式Linux可以分为底层系统和应用开发两部分。 如果你想做应用程序开发,那么你应该学习C语言、数据结构、JAVA等。 嵌入式应用开发和PC上的应用开发没有什么特别需要注意的地方。 也许你说嵌入式系统需要做一些优化。 是的,需要优化,但是未优化的程序和PC上的程序开发没有区别。

另外,当你有优化的能力时,就不再需要问这个问题了。 具体到某个例子,比如开发界面,我们在PC上使用VC; 在嵌入式Linux中,也许我们使用QT。 这个时候你就应该学习QT和编程。 但基础还是C或者JAVA,在此基础上,你可以熟悉他们的界面。 如果你学过VC,你还需要花时间理解那些类和控件。

如果你的目的是学习底层系统,这是我的专长,我可以说一点。 在回答这个问题之前,我先回答一下:很多人问我到底该学开车还是应聘?

我只能说是基于兴趣,驱动和应用程序并没有完全分开。

1.我们所说的驱动程序不仅仅局限于硬件的操作,还包括操作系统的原理以及进程的睡眠和唤醒调度等概念。如果你想写一个好的应用程序并更好的解决应用遇到的问题,这些东西你应该知道。

2.制作应用程序门槛低,尤其是现在,纯JAVA。 我个人认为应用开发的发展路径就是业务熟练程度。 比如通信行业、IPTV行业、手机行业,你了解行业的需求。 所以,领导者大多是做应用的。

3、制作驱动,其实我不想称之为“制作驱动”,而是“制作底层系统”。 如果做得好,它将杀死所有行业。 我工作了几年,做过手机、IPTV、会议电视,但这些产品对我来说没有什么区别,因为我只做底层。 他们的事与我无关。 当应用程序出现他们无法解决的问题时,我会从内核的角度给他们提供思路,并为他们提供工具。

至于底层的发展方向,我个人认为我是一个技术专家。

4、其实,做底层和做应用是没有界限的。 如果你有底层的经验,然后开始做应用,你会感觉很安全。 有了业务经验和对底层的了解,就可以快速组建团队。 回到如何学习的问题。 嵌入式Linux底层系统包括哪些内容? 别担心,给我举个例子你就知道了。

1.当计算机打开时,谁会显示那些界面? 它是BIOS吗?它有什么作用? 一些自检,然后从硬盘读取它,并启动它。 同样,这个BIOS对应于嵌入式Linux中的BIOS。 这就需要将Linux内核读入Flash并启动。

2、创业的目的是什么? 当然是网上聊天什么的。 这些互联网和聊天工具在哪里? 分别在C盘和D盘。 因此,首先要识别C盘和D盘。 在Linux下我们称其为根文件系统。

3、如果可以识别C盘和D盘,那么一定可以读写硬盘。 这涉及到一个叫做驱动程序的东西。 当然,不仅仅是硬盘,还包括网卡、USB等。嵌入式Linux可以从Flash中读取并执行应用程序。 它必须有Flash驱动程序,当然不仅仅是Flash。 嵌入式LINUX包含四个主要部分:内核、驱动程序和根文件系统。 1.:是一个稍微复杂的裸板程序。 但要理解和编写这个裸板程序却一点也不容易。 缺乏易用的工具削弱了我们的编程能力。 很多人玩嵌入式的时候都会用到ADS和KEIL。 你能回答这些问题吗?

1. 上电后,CPU从哪里取指令执行? 答:一般来说,命令是从Flash发出的。

2.但是Flash一般只能读取,不能直接写入。 如果我使用全局变量,这些全局变量在哪里? 答:全局变量应该在内存中

3. 那么谁将全局变量放入内存呢? 答:长期使用ADS和KEIL的朋友,您能回答一下吗? 这就需要“搬迁”。 在ADS或KEIL中,重定位代码是由制造这些工具的公司为您编写的。 你有去读过吗?

4、内存这么大,我怎么知道从哪里把“原来存储在Flash中的内容”读到内存中呢? 答:这个地址是由“链接脚本”决定的。 ADS中有文件,KEIL中有类似文件。 但你研究过吗?

5. 你说重定位是将程序从Flash复制到内存中,那么这个程序可以读取Flash吗? 答:可以,你必须会操作Flash。 当然不仅仅是这些,还有设置时钟,让系统运行得更快等等。 让我们先停止提问并回答你自己的问题。 这个裸板方案其实有三个关键点:

1、硬件操作

2.ARM系统处理器的理解

3、程序的基本概念:重定位、堆栈、代码段、数据段、BSS段等。硬件操作需要阅读原理图和芯片手册。 这需要一定的硬件知识。 不要求你会设计硬件,但至少要能理解它; 不要求您能够理解模拟电路,但要求您能够理解数字电路。 这个能力我是在学校学到的,这两本书(书名我忘记了)就足够了。 但我怀疑你是否有耐心读完这两本书。 不知道现在有没有更快的书。 如果你想快速完成这件事,就先放手吧。 不懂就问或者发帖。 另外,一定要阅读芯片手册。 不要找中文版,只看英文版。 一开始是很痛苦的,但是后来你会发现,一旦熟悉了语法和词汇,读任何芯片手册都很容易。 要了解ARM系统处理器,看杜春雷的书,里面讲了汇编指令、异常模式、MMU等,这是你需要了解的三块内容。

3、对于程序的基本概念,最好的办法就是看编译原理。 可惜的是,这样的书绝对是一本天书。 我建议你不要读它,除非你是超级天才。 就看我写的和第一个视频吧,不用担心,你不用花任何钱。 跟着视频并做硬件相关的实验后,这些概念就会变得清晰起来。 我还没有找到关于这些概念的第二套书籍或视频可以让我盲目吹牛。 因为,我学习的时候,都是先看,然后自己写程序在各种硬件上做实验,比如GPIO、时钟、

SDRAM、UART、NAND。 一旦你把它们全部弄清楚并将它们放在一起,理解u-boot就很容易了。 总结一下,硬件原理图和芯片手册需要自己去找资料看懂。 其余的就按照第一个视频的章节列表来学习即可。 2.内核:想要快速学习的人应该先跳过内核学习,直接学习如何编写驱动程序。 想要成为高手,就必须对核心有深刻的理解。 注意,我说的是理解,我并没有想到要写一个内核。 需要了解里面的调度机制、内存管理机制、文件管理机制等等。 推荐两本书:

1.通读,请看博的书(浮躁的社会讲究速度,哈),

2. 选择阅读。 如果您想知道哪个部分,请阅读哪个部分。 3、驱动程序:驱动程序由两部分组成:硬件本身的操作和驱动程序的框架。 又是硬件,还是要看懂原理图和芯片手册,多练习。 说到驱动框架,有一些书籍对其进行了介绍。 LDD3,即老外写的书,介绍了很多概念,值得一读。 然而,它的作用仅限于介绍概念。 我基本上在上手前用它来熟悉概念,上手后就扔掉了。

4、比较完整的驱动介绍应该是宋宝华的。 说实话,我只看过目录。 很多人都说我推荐这里。 如果你想进一步了解某个领域的话,绝对是5星推荐。 别指望能完成它。 该书共 1,800 多页,由两卷组成。 当我对某个部分不清楚时,我就会复习它。 这本书可以涵盖其中的任何部分,200或300页,非常详细。 并且它会带领你带着一定的目标去分析内核源代码。 以Linux 2.4为例,但原理是相同的,适用于其他版本的Linux。 4、根文件系统:你有没有想过这两个问题:

1、Linux做出的产品中,有的是用于监控的,有的是用于手机的,有的是用于平板电脑的。 那么内核启动并挂载根文件系统后,应该启动哪个应用程序呢? 答:内核不知道也不关心应该启动哪个用户程序。 它只启动init应用程序,对应的是/sbin/init。显然,这个应用程序必须读取配置文件,并根据配置文件启动用户程序(监控、手动界面、平板界面等)。 这个问题提醒我们,文件系统的内容是有一些约定的,比如/sbin/init需要一个配置文件

2.你有没有想过谁实现了你写的hello和world程序? 答:这个函数不是你自己实现的,而是库函数实现的。 当它运行时,它必须找到该库。 这个问题提醒我们,文件系统中也存在库。 简单的自问自答到此结束。 如果想更深入的了解,可以看一下init.c,了解init进程做了什么。 当然,你也可以阅读构建根文件系统的章节。 说说我的学习经历吧。

1.我上学的时候主修物理电子学。 其实课程并没有教如何设计电路,只是教了一些电子电路的知识。 我在实验室自学了PCB设计。 我只设计过2层板,现在都快忘记了。 但它保留了阅读原理图和芯片手册的能力。

2.我拿了软件学位,对软件设计很感兴趣,但只学了C语言和数据库。 出于兴趣,我做了很多竞赛题。 我没有能力参加比赛,但是我已经把C语言练习得很扎实了。

3、在实验室和第一家公司,设计了一些简单的PCI卡,写了一些驱动。

4、第二家公司采用51单片机作为车载电话,公司开始走上纯软件的道路。

5、开始感受到单片机的缺点,于是辞掉工作,闭门学习Linux半年,从如何操作red hat开始。 步骤是先读取,然后编写裸板程序操作硬件,然后分析u-boot。 同时阅读并理解LINUX框架。 在写裸板的时候,建议大家加强对中断的理解。 内核利用中断来完成各种功能。

6、分析完u-boot后,我们开始简单的驱动编程。 这个时候我们的能力还很弱。

7、开始在中兴工作,工作了2年,编写各种驱动,解决各种问题(驱动问题,帮助定位应用问题),能力得到了磨练。 总结一下要读的书:

1、硬件方面的书籍:微机原理、数字电路、高校教材。 毕业已经很多年了,我已经忘记了自己的名字。

2.Linux书籍:

,外国人写的